package org.jacorb.test.bugs.bug832; import org.jacorb.test.bugs.bugjac182.JAC182Helper; import org.omg.CORBA.ORB; import org.omg.CORBA.Policy; import org.omg.PortableServer.IdUniquenessPolicyValue; import org.omg.PortableServer.POA; import org.omg.PortableServer.POAHelper; import org.omg.PortableServer.RequestProcessingPolicyValue; import org.omg.PortableServer.Servant; import org.omg.PortableServer.ServantRetentionPolicyValue; public class Bug832TestServerRunner { // Hack n a half. // Integer increment to differentiate test runs. private static int testRun = 1; static MyLocator locator; public static void main (String[] args) throws Exception { //init ORB ORB serverOrb = ORB.init( args, null ); //init POA POA rootPoa = POAHelper.narrow( serverOrb.resolve_initial_references( "RootPOA" )); rootPoa.the_POAManager().activate(); Policy[] policies = null; if (testRun == 1) { policies = new Policy[] { rootPoa.create_servant_retention_policy(ServantRetentionPolicyValue.NON_RETAIN), rootPoa.create_request_processing_policy(RequestProcessingPolicyValue.USE_SERVANT_MANAGER) }; } else if (testRun == 2) { policies = new Policy[] { rootPoa.create_id_uniqueness_policy (IdUniquenessPolicyValue.MULTIPLE_ID), rootPoa.create_servant_retention_policy(ServantRetentionPolicyValue.NON_RETAIN), rootPoa.create_request_processing_policy(RequestProcessingPolicyValue.USE_DEFAULT_SERVANT) }; } POA poa = rootPoa.create_POA("childPOA1", rootPoa.the_POAManager(), policies); String className = args[0]; Class<?> servantClass = Class.forName (className); Servant servant = ( Servant ) servantClass.newInstance(); if (testRun == 1) { locator = new MyLocator(); poa.set_servant_manager (locator); } else if (testRun == 2) { poa.set_servant (servant); } org.omg.CORBA.Object obj = poa.create_reference (JAC182Helper.id ()); if (testRun == 1) { locator.setup (servant); } poa.the_POAManager().activate(); testRun++; System.out.println ("SERVER IOR: " + serverOrb.object_to_string(obj)); System.out.flush(); // wait for requests serverOrb.run(); } public static class MyLocator extends org.omg.CORBA.portable.ObjectImpl implements org.omg.PortableServer.ServantLocator { private org.omg.PortableServer.Servant instance; /** * <code>setup</code> is used to setup this locator. * * @param instance an <code>org.omg.PortableServer.Servant</code> value * @param obj an <code>org.omg.CORBA.Object</code> value */ void setup (org.omg.PortableServer.Servant instance) { this.instance = instance; } public org.omg.PortableServer.Servant preinvoke( byte[] oid, org.omg.PortableServer.POA adapter, java.lang.String operation, org.omg.PortableServer.ServantLocatorPackage.CookieHolder the_cookie) { return instance; } public void postinvoke( byte[] oid, org.omg.PortableServer.POA adapter, java.lang.String operation, java.lang.Object the_cookie, org.omg.PortableServer.Servant the_servant) { } public String[] _ids() { return null; } } }