package test.servantscaling;
import org.omg.CORBA.*;
import org.omg.CORBA.ORBPackage.*;
import org.omg.PortableServer.*;
import org.omg.PortableServer.ServantLocatorPackage.*;
public class SessionFactoryServant
extends SessionFactoryPOA
{
private ORB orb;
private POA poaList[];
private POA currentPoa;
private byte [][] objectIds;
private int poa_kind = 0;
private int nextId = 0;
private SessionServant defServant;
public class SessionLocator extends _ServantLocatorLocalBase {
public void postinvoke(byte[] oid,
POA adapter,
String operation,
java.lang.Object the_cookie,
Servant the_servant)
{
}
public Servant preinvoke(byte[] oid,
POA adapter,
String operation,
CookieHolder the_cookie)
throws org.omg.PortableServer.ForwardRequest {
return defServant;
}
}
public class SessionActivator extends _ServantActivatorLocalBase {
public Servant incarnate(byte[] oid, POA adapter) throws ForwardRequest {
objectIds[nextId++] = oid;
return new SessionServant(oid);
}
public void etherealize(byte[] oid,
POA adapter,
Servant serv,
boolean cleanup_in_progress,
boolean remaining_activations)
{
}
}
public SessionFactoryServant( ORB orb)
{
try {
this.orb = orb;
org.omg.PortableServer.Current current =
org.omg.PortableServer.CurrentHelper.narrow(orb.resolve_initial_references("POACurrent"));
defServant = new SessionServant(current);
ServantManager locator = new SessionLocator();
ServantManager activator = new SessionActivator();
POA rootPOA =
POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
poaList = new POA[4];
Policy userIdPolicy =
rootPOA.create_id_assignment_policy (IdAssignmentPolicyValue.USER_ID);
Policy multiIdPolicy =
rootPOA.create_id_uniqueness_policy (IdUniquenessPolicyValue.MULTIPLE_ID);
Policy retainPolicy =
rootPOA.create_servant_retention_policy (ServantRetentionPolicyValue.NON_RETAIN);
Policy defServPolicy =
rootPOA.create_request_processing_policy (RequestProcessingPolicyValue.USE_DEFAULT_SERVANT);
Policy servMangPolicy =
rootPOA.create_request_processing_policy (RequestProcessingPolicyValue.USE_SERVANT_MANAGER);
poaList[0] = rootPOA.create_POA ("sysId",
rootPOA.the_POAManager(),
new Policy[] {multiIdPolicy});
poaList[1] = rootPOA.create_POA ("userId",
rootPOA.the_POAManager(),
new Policy[] {userIdPolicy, multiIdPolicy});
poaList[2] = rootPOA.create_POA ("defserv",
rootPOA.the_POAManager(),
new Policy[]
{userIdPolicy, multiIdPolicy, defServPolicy, retainPolicy});
poaList[2].set_servant (defServant);
poaList[3] = rootPOA.create_POA ("servloc",
rootPOA.the_POAManager(),
new Policy[]
{userIdPolicy, multiIdPolicy, servMangPolicy});
poaList[3].set_servant_manager (activator);
} catch (Exception e) {
e.printStackTrace();
}
currentPoa = poaList[0];
}
private void kill_old_ids () {
if (objectIds == null)
return;
try {
System.out.println ("deactivating " + objectIds.length + " objects");
for (int i = 0; i < nextId; i++)
currentPoa.deactivate_object (objectIds[i]);
} catch (Exception ex) {}
nextId = 0;
objectIds = null;
}
public void set_poa (POA_Kind kind) {
kill_old_ids();
poa_kind = kind.value();
currentPoa = poaList[poa_kind];
System.out.println ("now using poa " + currentPoa.the_name());
}
public void create_sessions(int count)
{
kill_old_ids();
try {
if (poa_kind != 2)
objectIds = new byte[count][];
if (poa_kind > 1)
return; // nothing to do references returned on demand
for (nextId = 0; nextId < count; nextId++) {
byte objId[];
SessionServant servant = new SessionServant();
if (poa_kind == 1) {
objId = ("object " + Integer.toString(nextId)).getBytes();
currentPoa.activate_object_with_id(objId,defServant);
} else
objId = currentPoa.activate_object (servant);
servant.setID(objId);
objectIds[nextId] = objId;
}
}
catch( Throwable e ) {
System.out.println ("Error activating objectID " + nextId);
e.printStackTrace();
throw new org.omg.CORBA.UNKNOWN();
}
}
public Session get_session (int index)
{
try {
org.omg.CORBA.Object obj = poa_kind < 2 ?
currentPoa.id_to_reference(objectIds[index]) :
currentPoa.create_reference_with_id (("object " + Integer.toString(index)).getBytes(),"IDL:test/serventscaling/Session:1.0");
return SessionHelper.narrow(obj);
} catch (Exception e) {
e.printStackTrace();
throw new org.omg.CORBA.UNKNOWN();
}
}
}