Problem:
The Websphere Application System Log shows EJB errors with the following exception messages:
EJB container caught java.rmi.NoSuchObjectException: object (class com.lombardisoftware.server.ejb.workflow.EJSRemoteStatefulEJBWorkflowManagerHome_####a##b#c) not exported
And followed by the stack trace ...
at com.ibm.rmi.javax.rmi.PortableRemoteObject.toStub(PortableRemoteObject.java:189)
at javax.rmi.PortableRemoteObject.toStub(PortableRemoteObject.java:127)
at com.ibm.ejs.container.BeanO.getEJBHome(BeanO.java:861)
at com.wily.introscope.agent.servlethelper.EJBHelper.getEJBHomeFromSessionContext(EJBHelper.java:83)
at com.wily.introscope.agent.trace.ejb.hc2.EjbDeferredContextTracer.findInterfaceName(EjbDeferredContextTracer.java:90)
at com.wily.introscope.agent.trace.ejb.AEjbNameFormatter.INameFormatter_format(AEjbNameFormatter.java:97)
at com.wily.introscope.agent.trace.ATracerFactory.customFormat(ATracerFactory.java:287)
at com.wily.introscope.agent.trace.ATracerFactory.runtimeFormat(ATracerFactory.java:461)
at com.wily.introscope.agent.trace.ATracerFactory.formatParameterizedName(ATracerFactory.java:480)
at com.wily.introscope.appmap.agent.trace.hc2.AppMapMarkerTracer.getMapComponent(AppMapMarkerTracer.java:373)
Environment:
APM 10.0, 10.1
Cause:
This problem is related to ManagedSocket Tracer. During the Application startup, the "Managed Socket" code saw a connection to a database that was related to an EJB. When the 'nameformatter' tried to get the EJB home to determine the name for the "AppMap", the EJB resource was not available and throws an exception.
Resolution:
1) One recommendation is to switch from SocketTracing to ManagedSocketTracing in the toggles-typical.pbd (or toggles-full.pbd if using a full.pbl)
So that it would look like this:
#TurnOn: SocketTracing
# NOTE: Only SocketTracing or ManagedSocketTracing should be 'on'. Not both at the same time.
ManagedSocketTracing is provided to # enable pre 9.0 socket tracing.
TurnOn: ManagedSocketTracing
TurnOn: UDPTracing
Important: The application would have to be restarted for this to take effect.
In some cases completely disabling the SocketTracing works.
2) Where disabling Socket tracing completely has not helped, to prevent the exception from happening, as suggested previously we are trying to determine the EJB name for the AppMap. Since APM 10.1, the use of tracers is deprecated to determine application triage / Team Center information. So the feature can be disabled in the agent with no loss of data:
introscope.agent.appmap.enabled=false