[jboss-user] [Remoting] - Re: EJB3/Socket invoker - connection timeouts

javajedi do-not-reply at jboss.com
Wed Jun 27 19:52:27 EDT 2007


Ok, I wrapped the code in wakeup() inside of a try/catch, with a catch block that looks like this:


  |       } catch (Exception e) {
  |          synchronized (clientpool) {
  |             synchronized (threadpool) {
  |                clientpool.remove(this);
  |                threadpool.add(this);
  |                Thread.interrupted();
  |             }
  |          }
  |          throw e;
  |       }
  | 

and so far no deadlocks, but there were still plenty "mismatch version of JBossSerialization signature" errors spewing.  I tried switching from JBoss Serialization back to Java Serialization.  Instead of the "mismatch version" errors, I got a bunch of these:


  | 2007-06-27 16:37:22,519 156879 ERROR [org.jboss.remoting.transport.socket.SocketServerInvoker] (SocketServerInvoker#0-3873:) Failed to accept socket connection
  | java.lang.reflect.InvocationTargetException
  |         at sun.reflect.GeneratedConstructorAccessor62.newInstance(Unknown Source)
  |         at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
  |         at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
  |         at org.jboss.remoting.transport.socket.ServerThread.createServerSocket(ServerThread.java:188)
  |         at org.jboss.remoting.transport.socket.ServerThread.wakeup(ServerThread.java:233)
  |         at org.jboss.remoting.transport.socket.SocketServerInvoker.processInvocation(SocketServerInvoker.java:461)
  |         at org.jboss.remoting.transport.socket.SocketServerInvoker.run(SocketServerInvoker.java:392)
  |         at java.lang.Thread.run(Thread.java:619)
  | Caused by: java.io.EOFException
  |         at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2279)
  |         at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2748)
  |         at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780)
  |         at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280)
  |         at org.jboss.remoting.loading.ObjectInputStreamWithClassLoader.<init>(ObjectInputStreamWithClassLoader.java:73)
  |         at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.createInput(JavaSerializationManager.java:52)
  |         at org.jboss.remoting.transport.socket.ServerSocketWrapper.createInputStream(ServerSocketWrapper.java:56)
  |         at org.jboss.remoting.transport.socket.ClientSocketWrapper.createStreams(ClientSocketWrapper.java:76)
  |         at org.jboss.remoting.transport.socket.ClientSocketWrapper.<init>(ClientSocketWrapper.java:54)
  |         at org.jboss.remoting.transport.socket.ServerSocketWrapper.<init>(ServerSocketWrapper.java:50)
  |         ... 8 more
  | 

So I don't think JBoss Serialization is at fault here.  It looks like my socket timeout of 6 seconds was just not long enough to read what it needed before the socket timed out.  I switched the socket timeout back to the default (60 seconds?)  This seems to have halted all of the errors coming from the wakeup() method.

So the key to preventing the deadlock seems to be catching the exception that is coming from wakeup() and resetting the state (i.e. adding the thread back to the threadpool) before continuing.

Does this seem reasonable? 

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4058488#4058488

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4058488



More information about the jboss-user mailing list