Re: ORBit2 and DSI
- From: rm <async cc gatech edu>
- To: Michael Meeks <michael ximian com>
- Cc: orbit <orbit-list gnome org>
- Subject: Re: ORBit2 and DSI
- Date: Wed, 8 Oct 2003 20:54:23 -0400
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]