|  |  |  | Bonobo Activation API Reference Manual |  | 
|---|
Registration — Registering CORBA objects to Bonobo Activation.
#include <bonobo-activation/bonobo-activation.h> enum Bonobo_RegistrationResult; void bonobo_activation_unregister_active_server (const char *iid, CORBA_Object obj); void bonobo_activation_registration_env_free (GSList *reg_env); GSList* bonobo_activation_registration_env_set (GSList *reg_env, const char *name, const char *value); void bonobo_activation_registration_env_set_global (GSList *reg_env, gboolean append_if_existing); Bonobo_RegistrationResult bonobo_activation_register_active_server (const char *iid, CORBA_Object obj, GSList *reg_env); const char* bonobo_activation_iid_get (void); typedef BonoboActivationPlugin; typedef BonoboActivationPluginObject; void bonobo_activation_plugin_use (PortableServer_Servant servant, gpointer impl_ptr); void bonobo_activation_plugin_unuse (gpointer impl_ptr);
When writing a component which can be activated through Bonobo Activation by clients, you need to be register your component to Bonobo Activation once it is created.
   typedef enum
   {
      Bonobo_ACTIVATION_REG_SUCCESS,
      Bonobo_ACTIVATION_REG_NOT_LISTED,
      Bonobo_ACTIVATION_REG_ALREADY_ACTIVE,
      Bonobo_ACTIVATION_REG_ERROR
   }
   Bonobo_RegistrationResult;
void        bonobo_activation_unregister_active_server
                                            (const char *iid,
                                             CORBA_Object obj);Unregisters obj with iid with the local bonobo-activation-server daemon.
| iid : | IID of the server to unregister. | 
| obj : | CORBA::Object to unregister. | 
void        bonobo_activation_registration_env_free
                                            (GSList *reg_env);Frees the registration environment list, reg_env.
| reg_env : | a GSList pointer. | 
GSList*     bonobo_activation_registration_env_set
                                            (GSList *reg_env,
                                             const char *name,
                                             const char *value);Sets the environment variable name to value in the registration environment list reg_env.
| reg_env : | a GSList pointer. | 
| name : | the name of the env variable (must not be NULL). | 
| value : | the value of the env variable (may be NULL). | 
| Returns : | the new start of reg_env. | 
void        bonobo_activation_registration_env_set_global
                                            (GSList *reg_env,
                                             gboolean append_if_existing);Sets the global registration environment list with the contents of reg_env. If append_if_existing is set to FALSE, the an existing global list will be overwritten.
| reg_env : | a GSList pointer. | 
| append_if_existing : | whether or not to append to the global list. | 
Bonobo_RegistrationResult bonobo_activation_register_active_server (const char *iid, CORBA_Object obj, GSList *reg_env);
Registers obj with iid with the local bonobo-activation-server daemon.
If reg_env is not NULL, obj will be registered in such a way that if a client who's environment differs from the environment specified in reg_env, then another attempt to activate iid will not result in a reference to obj being returned, but rather another instance of iid being activated.
So, for example, you can ensure that a seperate instance of the component is activated for each distinct X display (and screen) by:
  display_name = gdk_display_get_name (gdk_display_get_default());
  reg_env = bonobo_activation_registration_env_set (
                             reg_env, "DISPLAY", display_name);
  bonobo_activation_register_active_server (iid, active_server, reg_env);
  bonobo_activation_registration_env_free (reg_env);
If reg_env is NULL, the global registration environment list will be used if it is set. See bonobo_activation_registration_env_set_global().
| iid : | IID of the server to register. | 
| obj : | CORBA::Object to register. | 
| reg_env : | the registration environment. | 
| Returns : | status of the registration. | 
typedef struct {
	const BonoboActivationPluginObject *plugin_object_list;
	const char *description;
        gpointer dummy[8];
} BonoboActivationPlugin;
Components which want to be activated as shared libraries must export an BonoboActivationPlugin structure of name BonoboActivation_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;
        }
        bonobo_activation_plugin_use (poa, impl_ptr);
        return object_ref;
}
static const BonoboActivationPluginObject hi_plugin_list[] = {
        {
                "OAFIID:Hi:20000923",
                hi_shlib_make_object
        },
        {
                NULL
  	}
};
const BonoboActivationPlugin BonoboActivation_Plugin_info = {
        hi_plugin_list,
        "Hi example"
};
typedef struct {
	const char *iid;
	/* This routine should call bonobo_activation_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 bonobo_activation_plugin_unuse() in the 
                                                         * implementation's destruction routine. */
				  CORBA_Environment *ev);
        gpointer dummy[4];
} BonoboActivationPluginObject;
void        bonobo_activation_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 BonoboActivationPlugin structure named "Bonobo_Plugin_info".
| servant : | The servant that was created | 
| impl_ptr : | The impl_ptr that was passed to the original activation routine | 
void bonobo_activation_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 >> |