1) ForwardRequest defined for ServantActivator.incarnate and ServantLocator.preinvoke not catched separately in class org.jacorb.orb.Delegate method servant_preinvoke and processed according Spec (MinorRevision 2.3.1 Oct 99) 11.3.4.1 and 11.2.10. 2) For local call, ServantManager is used also if there is an active servant in the ActiveObjectMap (see Spec 2.3.1, 11.3.4). proposition for Bug 2): public ServantObject servant_preinvoke( org.omg.CORBA.Object self, String operation, Class expectedType) { if (poa != null) { try { ServantObject so = new ServantObject(); // old version beta4 /*if( ( poa.isRetain() && !poa.isUseServantManager() ) || poa.useDefaultServant() ) { so.servant = poa.reference_to_servant(self); } else if( poa.isUseServantManager() ) */ // new code --> while( true ) { if ( poa.isRetain() || poa.isUseDefaultServant() ) { try { so.servant = poa.reference_to_servant(self); break; }catch ( ObjectNotActive ona ) { if ( poa.isUseDefaultServant() ) throw ona; // also if defaultServant==null } } if( poa.isUseServantManager() ) // --> new code end { byte [] oid = org.jacorb.poa.util.POAUtil.extractOID(getParsedIOR ().get_object_key()); org.omg.PortableServer.ServantManager sm = poa.get_servant_manager(); if( poa.isRetain() ) { org.omg.PortableServer.ServantActivator sa = org.omg.PortableServer.ServantActivatorHelper.narrow( sm ); so.servant = sa.incarnate( oid, poa ); } else { org.omg.PortableServer.ServantLocator sl = org.omg.PortableServer.ServantLocatorHelper.narrow ( sm ); so.servant = sl.preinvoke( oid, poa, operation, new org.omg.PortableServer.ServantLocatorPackage.CookieHolder() ); } } else { // } } if (!expectedType.isInstance(so.servant)) return null; else { ((org.jacorb.orb.ORB)orb).getPOACurrent()._addContext( Thread.currentThread(), new org.jacorb.poa.LocalInvocationContext( orb, poa, getObjectId(), (org.omg.PortableServer.Servant)so.servant ) ); } return so; } catch ( Throwable e ) { Debug.output(2,e); } } return null; }
Part 1 fix committed. Attempted to contact reporter for clarification re part 2 but company has gone bankrupt.