Last night I ran a test putting roughly 10,000 orders through our system in around
12 hours. We have two WL servers communicating via JMS. One sends orders and the
other responds to them.
At one point during the evening, both servers got the PeerGoneException. I'm not
positive if they were at the exact same time since one log wasn't reporting a
time stamp. After the error, both servers continued functioning normally.
Thanks for the help.
Below is the stack trace:
============================
[ExecuteThread: '38' for queue: 'default'] 01/07/02 19:36:18,250 ERROR {LogEvent.JavaException.blackdiamond}
JmsDelegate.startSender - Caught start() Exception
weblogic.rjvm.PeerGoneException: ; nested exception is:
java.io.EOFException
java.io.EOFException
at weblogic.rjvm.t3.T3JVMConnection.endOfStream(T3JVMConnection.java:599)
at weblogic.socket.NTSocketMuxer.processSockets(NTSocketMuxer.java:586)
at weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:24)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:139)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)
--------------- nested within: ------------------
weblogic.rmi.extensions.RemoteRuntimeException - with nested exception:
[weblogic.rjvm.PeerGoneException: ; nested exception is:
java.io.EOFException]
at weblogic.rmi.internal.ProxyStub.invoke(ProxyStub.java:60)
at $Proxy263.dispatchSyncFuture(Unknown Source)
at weblogic.jms.dispatcher.DispatcherWrapperState.dispatchSync(DispatcherWrapperState.java:262)
at weblogic.jms.client.JMSConnection.sessionCreate(JMSConnection.java:268)
at weblogic.jms.client.JMSConnection.createQueueSession(JMSConnection.java:235)
at com.ghx.util.jms.JmsQueueFactoryBase.createSession(JmsQueueFactoryBase.java:106)
at com.ghx.util.jms.JmsQueueSender.startSender(JmsQueueSender.java:90)
at com.ghx.util.jms.JmsDelegate.startSender(JmsDelegate.java:161)
at com.ghx.util.jms.simserver.SimServerDelegate.<init>(Unknown Source)
at com.ghx.util.jms.simserver.SimServerDelegate.<init>(Unknown Source)
at com.ghx.bea.sessionbeans.routingservicetest.RoutingServiceTestBean.route(Unknown
Source)
at com.ghx.bea.sessionbeans.routingservicetest.RoutingServiceTestBean_6gwe5b_EOImpl.route(RoutingServiceTestBean_6gwe5b_EOImpl.java:37)
at com.ghx.bea.sessionbeans.routingservicetest.RoutingServiceTestBean_6gwe5b_EOImpl_WLSkel.invoke(Unknown
Source)
at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:298)
at weblogic.rmi.cluster.ReplicaAwareServerRef.invoke(ReplicaAwareServerRef.java:93)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:267)
at weblogic.rmi.internal.BasicServerRef.dispatch(BasicServerRef.java:166)
at weblogic.rmi.internal.ServerRequest.sendOneWayRaw(ServerRequest.java:92)
at weblogic.rmi.internal.ServerRequest.sendReceive(ServerRequest.java:112)
at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:262)
at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:229)
at weblogic.rmi.internal.ProxyStub.invoke(ProxyStub.java:35)
at $Proxy203.route(Unknown Source)
at com.ghx.bea.msgbeans.routingqueuemdb.RoutingQueueMDBBean.onMessage(RoutingQueueMDBBean.java:132)
at weblogic.ejb20.internal.MDListener.execute(MDListener.java:254)
at weblogic.ejb20.internal.MDListener.onMessage(MDListener.java:206)
at weblogic.jms.client.JMSSession.onMessage(JMSSession.java:1864)
at weblogic.jms.client.JMSSession.execute(JMSSession.java:1819)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:139)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)
A PeerGoneException can be thrown whenever an RJVM connection appears
"broken". Usually, this means the other listener was too busy to respond
in time, but could also occur for reasons beyond its control. The
ability for non-clustered MDB listeners to automatically recover from
this situation is a new behavior that has been added to WebLogic Server
6.1. The recovery time is determined by a new parameter added to the
weblogic-ejb-jar.xml file. Although this information has not yet been
added to our on-line docs, the definition for this parameter can be
found in the DTD file at
<http://www.bea.com/servers/wls600/dtd/weblogic-ejb-jar.dtd>:
<!-- Each Message-Driven EJB listens on an associated JMS destination.
If the JMS destination is located on another
WebLogic Server instance or a foreign JMS provider, it is possible
that the JMS destination will become unreachable.
In this case, the EJB container automatically attempts to reconnect to
the JMS Server. Once the JMS Server is up
again, the Message-Driven EJB can again receive JMS messages.
The jms-polling-interval-seconds determines the number of seconds
between each attempt to reconnect to the JMS
destination. The default value is 10 seconds.
Example:
<jms-polling-interval-seconds>5</jms-polling-interval-seconds>
Since: WebLogic Server 6.1 -->
Regards,
Jim Brown
--
Jim Brown
Developer Relations Engineer
BEA Support
In our case the applet is the message consumer and a StatefullSessionBean is a Message producer. The applet is establishing the listener with the
Queue and then sending some command to the StatefullSessionBean for processing and after processing the results are added to the Queue by the
StatefullSessionBean.
Initially the results are received by my client applet but after some time it is getting a PeerGoneException.
What is the way around to fix the problem. Any suggestion will be of immense help.
Thanks
Sanjit