--- a/corba/src/share/classes/com/sun/corba/se/spi/orb/ORB.java Tue Oct 30 17:15:13 2012 +0000
+++ b/corba/src/share/classes/com/sun/corba/se/spi/orb/ORB.java Mon Dec 17 07:43:20 2012 -0800
@@ -98,6 +98,7 @@
import com.sun.corba.se.impl.presentation.rmi.PresentationManagerImpl ;
import com.sun.corba.se.impl.orbutil.ORBClassLoader ;
+import sun.awt.AppContext;
public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB
implements Broker, TypeCodeFactory
@@ -173,14 +174,7 @@
protected MonitoringManager monitoringManager;
- // There is only one instance of the PresentationManager
- // that is shared between all ORBs. This is necessary
- // because RMI-IIOP requires the PresentationManager in
- // places where no ORB is available, so the PresentationManager
- // must be global. It is initialized here as well.
- protected static PresentationManager globalPM = null ;
-
- static {
+ private static PresentationManager setupPresentationManager() {
staticWrapper = ORBUtilSystemException.get(
CORBALogDomains.RPC_PRESENTATION ) ;
@@ -220,10 +214,11 @@
}
) ;
- globalPM = new PresentationManagerImpl( useDynamicStub ) ;
- globalPM.setStubFactoryFactory( false,
+ PresentationManager pm = new PresentationManagerImpl( useDynamicStub ) ;
+ pm.setStubFactoryFactory( false,
PresentationDefaults.getStaticStubFactoryFactory() ) ;
- globalPM.setStubFactoryFactory( true, dynamicStubFactoryFactory ) ;
+ pm.setStubFactoryFactory( true, dynamicStubFactoryFactory ) ;
+ return pm;
}
public void destroy() {
@@ -234,11 +229,19 @@
byteBufferPool = null;
}
- /** Get the single instance of the PresentationManager
+ /**
+ * Returns the Presentation Manager for the current thread group, using the ThreadGroup-specific
+ * AppContext to hold it. Creates and records one if needed.
*/
public static PresentationManager getPresentationManager()
{
- return globalPM ;
+ AppContext ac = AppContext.getAppContext();
+ PresentationManager pm = (PresentationManager) ac.get(PresentationManager.class);
+ if (pm == null) {
+ pm = setupPresentationManager();
+ ac.put(PresentationManager.class, pm);
+ }
+ return pm;
}
/** Get the appropriate StubFactoryFactory. This
@@ -248,8 +251,9 @@
public static PresentationManager.StubFactoryFactory
getStubFactoryFactory()
{
- boolean useDynamicStubs = globalPM.useDynamicStubs() ;
- return globalPM.getStubFactoryFactory( useDynamicStubs ) ;
+ PresentationManager gPM = getPresentationManager();
+ boolean useDynamicStubs = gPM.useDynamicStubs() ;
+ return gPM.getStubFactoryFactory( useDynamicStubs ) ;
}
protected ORB()