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;
}
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;
}
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;
}