コード例 #1
0
PortableServer_POA
server_create_multi_threaded_poa (CORBA_ORB                  orb, 
				  PortableServer_POA         poa,
				  PortableServer_POAManager  poa_mgr,
				  CORBA_Environment         *ev)
{
	const static        MAX_POLICIES  = 1;
	PortableServer_POA  child_poa     = CORBA_OBJECT_NIL;
	CORBA_PolicyList   *poa_policies;

	poa_policies           = CORBA_PolicyList__alloc ();
        poa_policies->_maximum = MAX_POLICIES;
        poa_policies->_length  = MAX_POLICIES;
        poa_policies->_buffer  = CORBA_PolicyList_allocbuf (MAX_POLICIES);
        CORBA_sequence_set_release (poa_policies, CORBA_TRUE);
                                                                                
        poa_policies->_buffer[0] = (CORBA_Policy)
		PortableServer_POA_create_thread_policy (
			poa,
			PortableServer_ORB_CTRL_MODEL,
			ev);

	child_poa = PortableServer_POA_create_POA (poa,
                                                   "Thread Per Request POA",
                                                   poa_mgr,
                                                   poa_policies,
                                                   ev);
	if (etk_raised_exception(ev)) 
		goto failed_create_poa;

	ORBit_ObjectAdaptor_set_thread_hint ((ORBit_ObjectAdaptor) child_poa, 
					     ORBIT_THREAD_HINT_PER_REQUEST);

	
        CORBA_Policy_destroy (poa_policies->_buffer[0], ev); 
	if (etk_raised_exception(ev)) 
		goto failed;
        CORBA_free (poa_policies);	
	
	return child_poa;
	
 failed_create_poa:
	/* FIXME, in case of error, ev is set, but destructor should not
	 * return except anyway */
        CORBA_Policy_destroy (poa_policies->_buffer[0], ev); 
        CORBA_free (poa_policies);	
 failed:
	return CORBA_OBJECT_NIL;
}
コード例 #2
0
ファイル: pyorbit-poa.c プロジェクト: GNOME/pyorbit
  /* 
        POA create_POA(         in string       adapter_name,
                                in POAManager   a_POAManager,
                                in CORBA::PolicyList policies)
                                    raises (AdapterAlreadyExists, InvalidPolicy);
 */
static PyObject *
pyorbit_poa_create_POA(PyCORBA_Object *self, PyObject *args, PyObject *kwargs)
{
    static char *kwlist[] = { "adapter_name", "a_POAManager", "policies", NULL};
    CORBA_Environment ev;
    CORBA_PolicyList policies;
    char *adapter_name;
    PyObject *py_POAManager, *py_policies, *py_new_poa;
    PortableServer_POA new_poa;
    PortableServer_POAManager manager;
    int i;

    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "sO!O!:CORBA.ORB_init", kwlist,
                                     &adapter_name,
                                     &PyPortableServer_POAManager_Type, &py_POAManager,
                                     &PyList_Type, &py_policies))
	return NULL;

    policies._length = PyList_Size(py_policies);
    policies._maximum = policies._length;
    policies._buffer = CORBA_PolicyList_allocbuf(policies._length);
    for (i = 0; i < policies._length; ++i) {
        PyObject *item = PyList_GET_ITEM(py_policies, i);
        if (!PyObject_TypeCheck(item, &PyCORBA_Policy_Type)) {
            CORBA_free(policies._buffer);
            PyErr_SetString(PyExc_TypeError, "policies must be a list of CORBA.Policy objects");
            return NULL;
        }
        policies._buffer[i] = (CORBA_Policy) ((PyCORBA_Policy *) item)->objref;
    }

    manager = (PortableServer_POAManager) ((PyCORBA_Object *) py_POAManager)->objref;
    
    CORBA_exception_init(&ev);
    new_poa = PortableServer_POA_create_POA((PortableServer_POA)self->objref,
                                            adapter_name, manager, &policies, &ev);
    CORBA_free(policies._buffer);
    if (pyorbit_check_ex(&ev))
	return NULL;
    py_new_poa = pyorbit_poa_new(new_poa);
    CORBA_Object_release((CORBA_Object) new_poa, &ev);
    return py_new_poa;
}
コード例 #3
0
static PortableServer_POA
create_mult_id_poa (CORBA_Environment *ev)
{
	PortableServer_POA  rootpoa;
	PortableServer_POA  retval;
	CORBA_PolicyList   *policies;

	rootpoa = (PortableServer_POA)
		CORBA_ORB_resolve_initial_references (orb, "RootPOA", ev);
	g_assert (ev->_major == CORBA_NO_EXCEPTION);

	policies           = CORBA_PolicyList__alloc ();
	policies->_maximum = 1;
	policies->_length  = 1;
	policies->_buffer  = CORBA_PolicyList_allocbuf (1);
	CORBA_sequence_set_release (policies, CORBA_TRUE);

	policies->_buffer[0] = (CORBA_Policy)
					PortableServer_POA_create_id_uniqueness_policy (
							rootpoa,
							PortableServer_MULTIPLE_ID,
							ev);
	g_assert (ev->_major == CORBA_NO_EXCEPTION);

	retval = PortableServer_POA_create_POA (rootpoa, "Multiple Id POA",
					        NULL, policies, ev);
	g_assert (ev->_major == CORBA_NO_EXCEPTION);

	CORBA_Policy_destroy (policies->_buffer[0], ev);
	CORBA_free (policies);

	g_assert (ev->_major == CORBA_NO_EXCEPTION);

	CORBA_Object_release ((CORBA_Object) rootpoa, ev);

	g_assert (ev->_major == CORBA_NO_EXCEPTION);

	return retval;
}
コード例 #4
0
poatest
poatest_run (PortableServer_POA        rootpoa,
             PortableServer_POAManager rootpoa_mgr)
{
	CORBA_Environment       ev;
	poatest                 poatest_obj1, poatest_obj2;
	CORBA_PolicyList       *poa_policies;

	CORBA_exception_init( &ev );
 
	/*
	 * Create child POA with MULTIPLE_ID Object Id Uniqueness policy and
	 * IMPLICIT_ACTIVATION Implicit Activation policy.
	 */
	poa_policies           = CORBA_PolicyList__alloc ();
	poa_policies->_maximum = 2;
	poa_policies->_length  = 2;
	poa_policies->_buffer  = CORBA_PolicyList_allocbuf (2);
	CORBA_sequence_set_release (poa_policies, CORBA_TRUE);

	poa_policies->_buffer[0] = (CORBA_Policy)
					PortableServer_POA_create_id_uniqueness_policy (
							rootpoa,
							PortableServer_MULTIPLE_ID,
							&ev);

	poa_policies->_buffer[1] = (CORBA_Policy)
					PortableServer_POA_create_implicit_activation_policy (
							rootpoa,
							PortableServer_IMPLICIT_ACTIVATION,
							&ev);

	child_poa = PortableServer_POA_create_POA (rootpoa,
						   "Multiple Id POA",
						   rootpoa_mgr,
						   poa_policies,
						   &ev);
	if (POATEST_EX (&ev)) {
		POATEST_PRINT_EX ("create_POA : ", &ev);
		return CORBA_OBJECT_NIL;
	}

	CORBA_Policy_destroy (poa_policies->_buffer[0], &ev);
	CORBA_Policy_destroy (poa_policies->_buffer[1], &ev);
	CORBA_free (poa_policies);

	/*
	 * Initialise the servant.
	 */
	POA_poatest__init (&poatest_servant, &ev);
	if (POATEST_EX (&ev)) {
		POATEST_PRINT_EX ("POA_poatest__init : ", &ev);
		return CORBA_OBJECT_NIL;
	}

	/*
	 * Implicitly activate two objects.
	 */
	poatest_obj1 = PortableServer_POA_servant_to_reference (child_poa, 
								&poatest_servant, 
								&ev);
	if (POATEST_EX (&ev)) {
		POATEST_PRINT_EX ("servant_to_reference : ", &ev);
		return CORBA_OBJECT_NIL;
	}
	CORBA_Object_release (poatest_obj1, &ev);

	poatest_obj2 = PortableServer_POA_servant_to_reference (child_poa, 
								&poatest_servant, 
								&ev);
	if (POATEST_EX (&ev)) {
		POATEST_PRINT_EX ("servant_to_reference : ", &ev);
		return CORBA_OBJECT_NIL;
	}

	/*
	 * Activate the POAManager. POA will now accept requests
	 */
	PortableServer_POAManager_activate (rootpoa_mgr, &ev);
	if (POATEST_EX (&ev)) {
		POATEST_PRINT_EX ("POAManager_activate : ", &ev);
		return CORBA_OBJECT_NIL;
	}

	return poatest_obj2;
}
コード例 #5
0
poatest
poatest_run (PortableServer_POA        rootpoa,
             PortableServer_POAManager rootpoa_mgr)
{
	CORBA_Environment        ev;
	poatest                  poatest_obj;
	CORBA_PolicyList        *poa_policies;
	PortableServer_ObjectId *objid;

	CORBA_exception_init (&ev);
 
	/*
	 * Create child POA with USER_ID Id Assignment and PERSISTENT lifespan policy.
	 */
	poa_policies           = CORBA_PolicyList__alloc ();
	poa_policies->_maximum = 2;
	poa_policies->_length  = 2;
	poa_policies->_buffer  = CORBA_PolicyList_allocbuf (2);
	CORBA_sequence_set_release (poa_policies, CORBA_TRUE);

	poa_policies->_buffer[0] = (CORBA_Policy)
					PortableServer_POA_create_id_assignment_policy (
							rootpoa,
							PortableServer_USER_ID,
							&ev);

	poa_policies->_buffer[1] = (CORBA_Policy)
					PortableServer_POA_create_lifespan_policy (
							rootpoa,
							PortableServer_PERSISTENT,
							&ev);

	child_poa = PortableServer_POA_create_POA (rootpoa,
						   "User Id and Persistent POA",
						   rootpoa_mgr,
						   poa_policies,
						   &ev);
	if (POATEST_EX (&ev)) {
		POATEST_PRINT_EX ("create_POA : ", &ev);
		return CORBA_OBJECT_NIL;
	}

	/*
	 * Initialise the servant.
	 */
	POA_poatest__init (&poatest_servant, &ev);
	if (POATEST_EX (&ev)) {
		POATEST_PRINT_EX ("POA_poatest__init : ", &ev);
		return CORBA_OBJECT_NIL;
	}

	/*
	 * Set up the ObjectId.
	 */
	objid = PortableServer_string_to_ObjectId ("Test Id", &ev);
	if (POATEST_EX (&ev)) {
		POATEST_PRINT_EX ("string_to_ObjectId : ", &ev);
		return CORBA_OBJECT_NIL;
	}

	/*
	 * Activate object with user assigned Id.
	 */
	PortableServer_POA_activate_object_with_id (child_poa, objid, &poatest_servant, &ev);
	if (POATEST_EX (&ev)) {
		POATEST_PRINT_EX ("activate_object_with_id : ", &ev);
		return CORBA_OBJECT_NIL;
	}

	/*
	 * Get reference for object.
	 */
	poatest_obj = PortableServer_POA_servant_to_reference (child_poa, &poatest_servant, &ev);
	if (POATEST_EX (&ev)) {
		POATEST_PRINT_EX ("servant_to_reference : ", &ev);
		return CORBA_OBJECT_NIL;
	}

	/*
	 * Deactivate object and destroy POA
	 */
	PortableServer_POA_deactivate_object(child_poa, objid, &ev);
	if (POATEST_EX (&ev)) {
		POATEST_PRINT_EX ("deactivate_object : ", &ev);
		return CORBA_OBJECT_NIL;
	}

	PortableServer_POA_destroy (child_poa, CORBA_FALSE, CORBA_FALSE, &ev);
	if (POATEST_EX (&ev)) {
		POATEST_PRINT_EX ("POA_destroy : ", &ev);
		return CORBA_OBJECT_NIL;
	}

	/*
	 * Re-create POA and re-activate the object.
	 */
	child_poa = PortableServer_POA_create_POA (rootpoa,
						   "User Id and Persistent POA",
						   rootpoa_mgr,
						   poa_policies,
						   &ev);
	if (POATEST_EX (&ev)) {
		POATEST_PRINT_EX ("create_POA : ", &ev);
		return CORBA_OBJECT_NIL;
	}

	PortableServer_POA_activate_object_with_id (child_poa, objid, &poatest_servant, &ev);
	if (POATEST_EX (&ev)) {
		POATEST_PRINT_EX ("activate_object_with_id : ", &ev);
		return CORBA_OBJECT_NIL;
	}

	/*
	 * Reference should still be valid.
	 */

	CORBA_free (objid);

	CORBA_Policy_destroy (poa_policies->_buffer[0], &ev);
	CORBA_Policy_destroy (poa_policies->_buffer[1], &ev);
	CORBA_free (poa_policies);

	/*
	 * Activate the POAManager. POA will now accept requests
	 */
	PortableServer_POAManager_activate( rootpoa_mgr, &ev );
	if (POATEST_EX (&ev)) {
		POATEST_PRINT_EX ("POAManager_activate : ", &ev);
		return CORBA_OBJECT_NIL;
	}

	return poatest_obj;
}
コード例 #6
0
poatest
poatest_run (PortableServer_POA        rootpoa,
             PortableServer_POAManager rootpoa_mgr)
{
	CORBA_Environment        ev;
	poatest                  poatest_obj;
	CORBA_PolicyList        *poa_policies;
	PortableServer_ObjectId *objid;

	CORBA_exception_init (&ev);
 
	/*
	 * Create child POA with USER_ID Id Assignment policy.
	 */
	poa_policies           = CORBA_PolicyList__alloc ();
	poa_policies->_maximum = 1;
	poa_policies->_length  = 1;
	poa_policies->_buffer  = CORBA_PolicyList_allocbuf (1);
	CORBA_sequence_set_release (poa_policies, CORBA_TRUE);

	poa_policies->_buffer[0] = (CORBA_Policy)
					PortableServer_POA_create_id_assignment_policy (
							rootpoa,
							PortableServer_USER_ID,
							&ev);

	child_poa = PortableServer_POA_create_POA (rootpoa,
						   "User Id POA",
						   rootpoa_mgr,
						   poa_policies,
						   &ev);
	if (POATEST_EX (&ev)) {
		POATEST_PRINT_EX ("create_POA : ", &ev);
		return CORBA_OBJECT_NIL;
	}

	CORBA_Policy_destroy (poa_policies->_buffer[0], &ev);
	CORBA_free (poa_policies);

	/*
	 * Initialise the servant.
	 */
	POA_poatest__init (&poatest_servant, &ev);
	if (POATEST_EX (&ev)) {
		POATEST_PRINT_EX ("POA_poatest__init : ", &ev);
		return CORBA_OBJECT_NIL;
	}

	/*
	 * Set up the ObjectId.
	 */
	objid = PortableServer_string_to_ObjectId ("Test Id", &ev);
	if (POATEST_EX (&ev)) {
		POATEST_PRINT_EX ("string_to_ObjectId : ", &ev);
		return CORBA_OBJECT_NIL;
	}

	/*
	 * Activate object with user assigned Id.
	 */
	PortableServer_POA_activate_object_with_id (child_poa, objid, &poatest_servant, &ev);
	if (POATEST_EX (&ev)) {
		POATEST_PRINT_EX ("activate_object_with_id : ", &ev);
		return CORBA_OBJECT_NIL;
	}

	CORBA_free (objid);

	poatest_obj = PortableServer_POA_servant_to_reference (child_poa, &poatest_servant, &ev);
	if (POATEST_EX (&ev)) {
		POATEST_PRINT_EX ("servant_to_reference : ", &ev);
		return CORBA_OBJECT_NIL;
	}

	/*
	 * Activate the POAManager. POA will now accept requests
	 */
	PortableServer_POAManager_activate (rootpoa_mgr, &ev);
	if (POATEST_EX (&ev)) {
		POATEST_PRINT_EX ("POAManager_activate : ", &ev);
		return CORBA_OBJECT_NIL;
	}

	return poatest_obj;
}
コード例 #7
0
poatest
poatest_run (PortableServer_POA        rootpoa,
             PortableServer_POAManager rootpoa_mgr )
{
    CORBA_Environment        ev;
    poatest                  poatest_obj;
    CORBA_PolicyList        *poa_policies;
    PortableServer_ObjectId *objid;

    CORBA_exception_init (&ev);

    /*
     * Create child POA with RETAIN servant retention policy, USE_DEFAULT_SERVANT
     * request processing policy and MULTIPLE_ID id uniqueness policy.
     */
    poa_policies           = CORBA_PolicyList__alloc ();
    poa_policies->_maximum = 3;
    poa_policies->_length  = 3;
    poa_policies->_buffer  = CORBA_PolicyList_allocbuf (3);
    CORBA_sequence_set_release (poa_policies, CORBA_TRUE);

    poa_policies->_buffer[0] = (CORBA_Policy)
                               PortableServer_POA_create_id_uniqueness_policy (
                                   rootpoa,
                                   PortableServer_MULTIPLE_ID,
                                   &ev);

    poa_policies->_buffer[1] = (CORBA_Policy)
                               PortableServer_POA_create_request_processing_policy (
                                   rootpoa,
                                   PortableServer_USE_DEFAULT_SERVANT,
                                   &ev);

    poa_policies->_buffer[2] = (CORBA_Policy)
                               PortableServer_POA_create_servant_retention_policy (
                                   rootpoa,
                                   PortableServer_RETAIN,
                                   &ev);

    child_poa = PortableServer_POA_create_POA (rootpoa,
                "Default Servant POA",
                rootpoa_mgr,
                poa_policies,
                &ev);
    if (POATEST_EX (&ev)) {
        POATEST_PRINT_EX ("create_POA : ", &ev);
        return CORBA_OBJECT_NIL;
    }

    CORBA_Policy_destroy (poa_policies->_buffer[0], &ev);
    CORBA_Policy_destroy (poa_policies->_buffer[1], &ev);
    CORBA_Policy_destroy (poa_policies->_buffer[2], &ev);
    CORBA_free (poa_policies);

    /*
     * Initialise the servant.
     */
    POA_poatest__init (&poatest_servant, &ev);
    if (POATEST_EX (&ev)) {
        POATEST_PRINT_EX ("POA_poatest__init : ", &ev);
        return CORBA_OBJECT_NIL;
    }

    /*
     * Register the default servant.
     */
    PortableServer_POA_set_servant (child_poa, &poatest_servant, &ev);
    if (POATEST_EX (&ev)) {
        POATEST_PRINT_EX ("set_servant : ", &ev);
        return CORBA_OBJECT_NIL;
    }

    /*
     * Activate an object.
     */
    objid = PortableServer_POA_activate_object (child_poa, &poatest_servant, &ev);
    if (POATEST_EX (&ev)) {
        POATEST_PRINT_EX ("activate_object : ", &ev);
        return CORBA_OBJECT_NIL;
    }
    CORBA_free (objid);

    /*
     * Create a reference for an inactive object.
     */
    poatest_obj = PortableServer_POA_create_reference (child_poa, "IDL:poatest:1.0", &ev);
    if (POATEST_EX (&ev)) {
        POATEST_PRINT_EX ("create_reference : ", &ev);
        return CORBA_OBJECT_NIL;
    }

    /*
     * Activate the POAManager. POA will now accept requests
     */
    PortableServer_POAManager_activate (rootpoa_mgr, &ev);
    if (POATEST_EX (&ev)) {
        POATEST_PRINT_EX ("POAManager_activate : ", &ev);
        return CORBA_OBJECT_NIL;
    }

    return poatest_obj;
}