package org.jacorb.test.bugs.bugjac189;
import org.jacorb.config.Configurable;
import org.jacorb.config.Configuration;
import org.jacorb.config.ConfigurationException;
import org.omg.CORBA.INTERNAL;
import org.omg.CORBA.ORB;
import org.omg.CORBA.ORBPackage.InvalidName;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.POAHelper;
import org.omg.PortableServer.ThreadPolicyValue;
/**
* <code>JAC189Impl</code> is the implementation code to test creating multiple
* POAs with SINGLE_THREAD and shutting them down.
*
* @author Nick Cross
*/
public class JAC189Impl extends JAC189POA implements Configurable
{
/**
* <code>rootPoa</code> is the root POA.
*/
private POA rootPoa;
/**
* <code>_requestCounter</code> is a count of POAs.
*/
private static int _requestCounter = 0;
/**
* <code>login</code>
*
* @return a <code>Session</code> value
*/
public Session login ()
{
Session result = null;
_requestCounter++;
String poaName = "SessionPOA_" + _requestCounter;
org.omg.CORBA.Policy[] policies =
{
rootPoa.create_thread_policy(ThreadPolicyValue.SINGLE_THREAD_MODEL)
};
try
{
POA childPOA = rootPoa.create_POA(poaName,
rootPoa.the_POAManager(),
policies);
childPOA.the_POAManager().activate();
SessionImpl imp = new SessionImpl(childPOA);
imp.activate();
result = SessionHelper.narrow(imp.reference());
}
catch(Exception e)
{
throw new INTERNAL ("Error creating session " + e);
}
return result;
}
public void configure(Configuration arg0) throws ConfigurationException
{
ORB orb = ((org.jacorb.config.Configuration)arg0).getORB();
try
{
rootPoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
} catch (InvalidName e)
{
throw new IllegalArgumentException();
}
}
}