Re: ORBit2 and DSI



On Wed, Oct 08, 2003 at 10:27:26AM +0100, Michael Meeks wrote:
> 	Ok; I just looked at this again, and I think we could make an async
> interface out of it without too much pain; since the NVList is an
> interface; either way - it would be _most_ helpful if you could extract
> the DSI information, interfaces and types from the spec. and post them
> here in text form so we can wrestle with them more effectively [
> postscript / pdf suck for almost everything ].

that's easy...there aren't many:  (see below)

am i understanding correctly that the async handler will be invoked
via a new call like 'ORBit_small_invoke_async_adaptor' which will just
create the ServerRequest object, call a function to inform the async
servant, and then return?  

---------------------------------
from CORBA 3.0.1 

ServerRequest pseudo object contains the explicit state of the dsi
request

[ DIR = Dynamic Implementation Routine - the supplied handler for a 
dynamic skeleton ] 

module CORBA {
       Interface ServerRequest { 

              /* operation is the name of the operation being invoked
	       *            may be accessed in the DIR at any time
	       */
              readonly attribute Identifier operation; 

	      /* unless set_exception is called, arguments 
	       *  must be called by the DIR *exactly* once
	       *  even if there are no parameters
	       *
	       * the caller must allocate the NVList initilized 
	       * with signature and flags in operation 
	       * signature order
	       *
	       * a potentially different NVList is returned with 
	       * in/inout argument values filled
	       *
	       * the caller must provide any values for out args
	       * before returning (inout argument values may be changed)
	       */
	      void		 arguments(inout NVList nv);

	      /* ctx may be called once after arguments() and before
	       * any of the set_*()
	       * if non-nil context exists, it is an error 
	       * not to call this before set_result 
	       */	       
	      Context            ctx();

	      /* set_result must be called exactly once (after 
	       * calling arguments()) for any
	       * non-void operation (may also be called once for void
	       * operations with an Any of type tk_void
	       */
	      void		 set_result(in Any val);

	      /* may be called at any time to return 
	       * an exception to the client 
	       */
	      void		 set_exception(in Any val);
       };
};


- memory management for the parameters to the ServerRequest operations
are described in the language mappings

- the C binding derives a servant called DynamicImpl with two function
pointers:

void (*PortableServer_DynamicImplRoutine)(PortableServer_Servant servant, 
					CORBA_ServerRequest  request);

(note: there is no environment argument...use the server request call instead)

CORBA_RepositoryId (* primary_interface) (PortableServer_Servant servant, 
					  PortableServer_ObjectId id, 
					  PortableServer_POA poa,
					  CORBA_Environment * env);

- only the POA is expected to invoke these calls.   					  
- in the C binding NVList ownership is passed to the orb.


registration of a dynamic skeleton is implementation specific (8.4.2)

---------------------------------





----
Robert Melby
Georgia Institute of Technology, Atlanta Georgia, 30332
uucp:     ...!{decvax,hplabs,ncar,purdue,rutgers}!gatech!prism!gt4255a
Internet: async@cc.gatech.edu



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]