![]() | ![]() | ![]() | The liboaf Library | ![]() |
---|
#include <liboaf/liboaf.h> enum OAF_RegistrationResult; OAF_RegistrationResult oaf_active_server_register (const char *iid,CORBA_Object obj); void oaf_active_server_unregister (const char *iid,CORBA_Object obj); struct OAFPlugin; struct OAFPluginObject; void oaf_plugin_use (PortableServer_Servant servant,gpointer impl_ptr); void oaf_plugin_unuse (gpointer impl_ptr);
When writing a component which can be activated through OAF by clients, you need to be register your component to OAF once it is created.
typedef enum { OAF_REG_SUCCESS, OAF_REG_NOT_LISTED, OAF_REG_ALREADY_ACTIVE, OAF_REG_ERROR } OAF_RegistrationResult;
OAF_RegistrationResult oaf_active_server_register (const char *iid,CORBA_Object obj);
Registers obj with iid in the local OAF daemon.
iid : | IID of the server to register. |
obj : | CORBA::Object to register. |
Returns : | status of the registration. |
void oaf_active_server_unregister (const char *iid,CORBA_Object obj);
Unregisters obj with iid in the local OAF daemon.
iid : | IID of the server to unregister. |
obj : | CORBA::Object to unregister. |
struct OAFPlugin { const OAFPluginObject *plugin_object_list; const char *description; } OAFPlugin;
Components which want to be activated as
shared libraries must export an OAFPlugin
structure of name OAF_Plugin_info
.
An exmaple of how to use it folows:
static CORBA_Object hi_shlib_make_object (PortableServer_POA poa, const char *iid, gpointer impl_ptr, CORBA_Environment *ev) { CORBA_Object object_ref; object_ref = impl_Hi__create (poa, ev); if (object_ref == CORBA_OBJECT_NIL || ev->_major != CORBA_NO_EXCEPTION) { printf ("Server cannot get objref\n"); return CORBA_OBJECT_NIL; } oaf_plugin_use (poa, impl_ptr); return object_ref; } static const OAFPluginObject hi_plugin_list[] = { { "OAFIID:Hi:20000923", hi_shlib_make_object }, { NULL } }; const OAFPlugin OAF_Plugin_info = { hi_plugin_list, "Hi example" };
struct OAFPluginObject { const char *iid; /* This routine should call oaf_plugin_use(servant, impl_ptr), * as should all routines which activate CORBA objects * implemented by this shared library. This needs to be done * before making any CORBA calls on the object, or * passing that object around. First thing after servant creation * always works. :) */ CORBA_Object (*activate) (PortableServer_POA poa, const char *iid, gpointer impl_ptr, /* This pointer should be stored by the implementation * to be passed to oaf_plugin_unuse() in the * implementation's destruction routine. */ CORBA_Environment * ev); } OAFPluginObject;
void oaf_plugin_use (PortableServer_Servant servant,gpointer impl_ptr);
You should call this routine to activate a shared library-based CORBA Object. It will be called by OAF if the component exports correctly an OAFPlugin structure named "OAF_Plugin_info".
servant : | The servant that was created |
impl_ptr : | The impl_ptr that was passed to the original activation routine |
void oaf_plugin_unuse (gpointer impl_ptr);
Side effects: May arrange for the shared library that the implementation is in to be unloaded.
When a shlib plugin for a CORBA object is destroying an implementation, it should call this function to make sure that the shared library is unloaded as needed.
impl_ptr : | The impl_ptr that was passed to the activation routine |
<<< Utilities | Debugging >>> |