dev@glassfish.java.net

reason for destroying POA's when starting a server instance

From: Dies Koper <diesk_at_fast.au.fujitsu.com>
Date: Mon, 9 Feb 2009 12:05:45 +1100

Hi Ken,

I've ran into the following issue. I'm looking at how to fix it, but I
just like to make sure why are POA's destroyed when starting a server
instance? Is it really necessary?

I have a cluster with multiple instances. When another instance is
started IiopFolbGmsClient#addMember is invoked, which leads to a call to
ReferenceFactoryManagerImpl#suspend. In this method, the state is
changed to RFMState.SUSPENDED.

After that, when the EJB application is being started,
ReferenceFactoryManagerImpl#create fails because of the SUSPENDED state.
(see following exception)

Caused by: org.omg.CORBA.TRANSIENT: vmcid: SUN minor code: 1003
completed: No
        at
com.sun.corba.ee.impl.logging.POASystemException.rfmMightDeadlock(POASystemException.java:2341)
        at
com.sun.corba.ee.impl.logging.POASystemException.rfmMightDeadlock(POASystemException.java:2363)
        at
com.sun.corba.ee.impl.oa.rfm.ReferenceFactoryManagerImpl.create(ReferenceFactoryManagerImpl.java:244)
        at
com.sun.enterprise.iiop.POARemoteReferenceFactory.createReferenceFactory(POARemoteReferenceFactory.java:345)
        at
com.sun.enterprise.iiop.POARemoteReferenceFactory.setRepositoryIds(POARemoteReferenceFactory.java:229)
        ... 18 more


ReferenceFactoryManagerImpl#suspend was called from
ServerGroupManager#restartFactories with the purpose of destroying the
POA's.

Why do the POA's need to be destroyed? Would it be okay here to not
invoke ServerGroupManager#restartFactories?

Thanks,
Dies Koper