为什么在回收客户端 JBoss 到远程队列的连接后仍然抛出 SpyJMSExceptions?
Why are SpyJMSExceptions still thrown after recycling the client JBoss connection to remote queues?
我下面的应用程序作为 JBoss 7.2.0 系统上的客户端与 JBoss 4.2.1 系统上的接收器 JNDI/JMS 进行通信。它创建一个发送队列和一个接收队列。使用此配置,我们已经 运行 连续 2 个月都很好;双方都没有做出任何改变。本地客户端应用程序安装了 4.2.1 jbossall-client.jar 和 jnp-client.jars。
正常activity后,我们开始接收org.jboss.mq.SpyJMSException: Exiting on IOE; - nested throwable: (java.io.EOFException) at org.jboss.mq.SpyJMSException.getAsJMSException(SpyJMSException.java:72)
异常。
我们在不做任何更改的情况下重新启动了 JBoss 7.2.0,当我们建立接收队列时,我们现在收到了从代码 QueueReceiver receiver = session.createReceiver(queue);
处抛出的 org.jboss.mq.SpyJMSException: Cannot subscribe to this Destination: ; {...} Caused by: java.io.EOFException
异常。在应用 运行 好几天,但在多天的时间段内没有 activity 之后,我们也开始抛出相同的异常。
我们重新启动了 4.2.1 系统以查看是否是问题所在,但没有解决任何问题。 事实上,我们可以通过让两个系统正常连接来复制此故障场景,然后回收 4.2.1 系统。一旦 4.2.1 系统关闭,错误就会开始抛出,并且一旦 4.2.1 系统完全建立(即使它应该能够这样做),7.2.0 系统仍然无法重新建立连接。
在 JBoss 中停止然后启动应用程序无法解决此问题。重新启动 JBoss 有 20% 的机会解决这个问题(在上面提到的强制失败情况下有 100% 的机会)。取消部署,然后重新部署应用程序通常可以解决此问题。
可能是什么原因造成的?
同一个 war 文件在我们的测试系统上工作正常,它具有相同的 JBoss 设置。使用相同的代码从命令提示符通过测试应用程序与目标 JBoss 系统通信工作正常。
我怀疑 JBoss 7.2.0 本身有问题,或者这可能是超时问题?如何检查或延长超时时间;这在客户端可行吗?即使超时,我在 start()
的其余部分重新连接之前调用了 stop()
方法,我仍然得到异常;在那种情况下,这不会是超时问题,因为超时会重置。
上下文值:
connectionFactoryName=ConnectionFactory
contextFactoryName=org.jnp.interfaces.NamingContextFactory
packagePrefixes=org.jboss.naming:org.jnp.interfaces
providerUrl=MYSERVER:1099
Java代码:
private ContextContainer contextContainer = null;
private QueueConnection connection = null;
private QueueReceiver receiver = null;
private Queue sendQueue = null;
private Queue receiveQueue = null;
private String sendQueueName = null;
private String receiveQueueName = null;
private MessageHandler messageHandler = null;
protected synchronized void start() throws Exception {
// NOTE: This position also has delay code (for pending multiple
// consecutive recycling requests), with an external method to
// reset the delay. It was removed for code clarity and has no
// effect on the issue being discussed.
// Clear prior Connection
stop();
logger.info("Regenerating JMS for : " + this.getClass().getName());
Context context = this.contextContainer.getContext();
logger.info("Looking up factory : " + contextContainer.getConnectionFactoryName());
QueueConnectionFactory connectionFactory = (QueueConnectionFactory)context.lookup(contextContainer.getConnectionFactoryName());
// ESTABLISH SEND MESSAGE QUEUE
logger.info("Looking up send queue : " + sendQueueName);
sendQueue = (Queue)context.lookup(sendQueueName);
logger.info("Send Queue string : " + sendQueue);
logger.info("Send Queue name : " + sendQueue.getQueueName());
logger.info("Creating Queue Connection");
connection = connectionFactory.createQueueConnection();
logger.info("Setting Exception Listener");
connection.setExceptionListener(new ExceptionListener() {
public void onException(JMSException ex) {
logger.error("JMS Exception received on QueueConnection", ex);
start();
}
});
// ESTABLISH RECEIVE MESSAGE QUEUE
logger.info("Looking up receive queue : " + receiveQueueName);
receiveQueue = (Queue)context.lookup(receiveQueueName);
logger.info("Receive Queue string : " + receiveQueue);
logger.info("Receive Queue name : " + receiveQueue.getQueueName());
logger.info("Creating JMS Session for Receiving");
QueueSession session = connection.createQueueSession(false, Session.CLIENT_ACKNOWLEDGE);
logger.info("Created Session " + session);
logger.info("Creating JMS Receiver for Queue \"" + receiveQueue.getQueueName() + "\"");
// THIS IS THE LINE WHERE THE EXCEPTION IS THROWN!!!
receiver = session.createReceiver(receiveQueue);
logger.info("Setting Message Listener");
receiver.setMessageListener(new MessageListener() {
public void onMessage(Message message) {
try {
if (message instanceof ObjectMessage) {
Object obj = ((ObjectMessage) message).getObject();
// UNRELATED METHOD FOR HANDLING THE MESSAGE
handleMessage(obj);
} else {
throw new Exception("Received message of unexpected type " + message.getJMSType() + ", was expecting ObjectMessage");
}
} catch (Exception ex) {
logger.error("Error processing incoming message.", ex);
} finally {
try {
message.acknowledge();
logger.info("Acknowledged message.");
} catch (Exception ex) {
logger.error("Unable to acknowledge message.", ex);
}
}
}
});
logger.info("Starting Queue Connection");
connection.start();
logger.info("Started Queue Connection");
}
/**
* Extinguish the existing connection.
*/
public synchronized void stop() {
if (receiver != null) {
try {
logger.info("Nullifying Receiver Listener");
receiver.setMessageListener(null);
logger.info("Nullified Receiver Listener");
} catch(Exception ex) {
logger.warn("Exception nullifying Receiver Listener", ex);
}
try {
logger.info("Closing Receiver");
receiver.close();
logger.info("Closed Receiver");
} catch(Exception ex) {
logger.warn("Exception closing Receiver", ex);
} finally {
receiver = null;
}
}
if (connection != null) {
try {
logger.info("Nullifying Exception Listener");
connection.setExceptionListener(null);
logger.info("Nullified Exception Listener");
} catch (Exception ex) {
logger.warn("Exception nullifying Exception Listener", ex);
}
try {
logger.info("Stopping Queue Connection");
connection.stop();
logger.info("Stopped Queue Connection");
} catch (Exception ex) {
logger.warn("Exception stopping Queue Connection", ex);
}
try {
logger.info("Closing Queue Connection");
connection.close();
logger.info("Closed Queue Connection");
} catch (Exception ex) {
logger.warn("Exception closing Queue Connection", ex);
} finally {
connection = null;
}
}
}
日志输出:
Setting Context Factory Class: org.jnp.interfaces.NamingContextFactory
Setting Package Prefixes: org.jboss.naming:org.jnp.interfaces
Setting Provider URL: MYSERVER:1099
Generating JMS for : MYPACKAGE.ConnectionHandler
Looking up factory : ConnectionFactory
Looking up send queue : queue/sendQueue
Send Queue string : QUEUE.sendQueue
Send Queue name : sendQueue
Creating Queue Connection
Setting Exception Listener
Looking up receive queue : queue/receiveQueue
Receive Queue string : QUEUE.receiveQueue
Receive Queue name : receiveQueue
Creating JMS Session for Receiving
Created Session SpySession@1903462020[tx=false ack=CLIENT txid=null RUNNING connection=Connection@1963631553[token=ConnectionToken:ID:273725/9966a9625bb094d33a37f72db71b3bb9 rcvstate=STOPPED]]
Creating JMS Receiver for Queue "receiveQueue"
Exception caught during initialization.
org.jboss.mq.SpyJMSException: Cannot subscribe to this Destination: ; - nested throwable: (java.io.EOFException)
正常后异常跟踪activity:
JMS Exception received on QueueConnection
org.jboss.mq.SpyJMSException: Exiting on IOE; - nested throwable: (java.io.EOFException)
at org.jboss.mq.SpyJMSException.getAsJMSException(SpyJMSException.java:72)
at org.jboss.mq.Connection.asynchFailure(Connection.java:423)
at org.jboss.mq.il.uil2.UILClientILService.asynchFailure(UILClientILService.java:174)
at org.jboss.mq.il.uil2.SocketManager$ReadTask.handleStop(SocketManager.java:439)
at org.jboss.mq.il.uil2.SocketManager$ReadTask.run(SocketManager.java:371)
at java.lang.Thread.run(Thread.java:744)
Caused by: java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.readByte(ObjectInputStream.java:2766)
at java.io.ObjectInputStream.readByte(ObjectInputStream.java:916)
at org.jboss.mq.il.uil2.SocketManager$ReadTask.run(SocketManager.java:316)
... 1 more
重启后异常跟踪:
org.jboss.mq.SpyJMSException: Cannot subscribe to this Destination: ; - nested throwable: (java.io.EOFException)
at org.jboss.mq.SpyJMSException.getAsJMSException(SpyJMSException.java:72)
at org.jboss.mq.SpyJMSException.rethrowAsJMSException(SpyJMSException.java:57)
at org.jboss.mq.Connection.addConsumer(Connection.java:800)
at org.jboss.mq.SpySession.addConsumer(SpySession.java:947)
at org.jboss.mq.SpySession.createReceiver(SpySession.java:658)
at org.jboss.mq.SpyQueueSession.createReceiver(SpyQueueSession.java)
at org.jboss.mq.SpySession.createReceiver(SpySession.java:647)
at org.jboss.mq.SpyQueueSession.createReceiver(SpyQueueSession.java)
at MYPACKAGE.ConnectionHandler.start(ConnectionHandler.java:144)
at MYPACKAGE.ConnectionHandler.initialize(ConnectionHandler.java:60)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1414)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1375)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.run(AbstractAutowireCapableBeanFactory.java:409)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
at org.springframework.beans.factory.support.AbstractBeanFactory.getObject(AbstractBeanFactory.java:264)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3339)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:3777)
at org.jboss.as.web.deployment.WebDeploymentService.doStart(WebDeploymentService.java:156)
at org.jboss.as.web.deployment.WebDeploymentService.access[=15=]0(WebDeploymentService.java:60)
at org.jboss.as.web.deployment.WebDeploymentService.run(WebDeploymentService.java:93)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
at org.jboss.threads.JBossThread.run(JBossThread.java:122)
Caused by: java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.readByte(ObjectInputStream.java:2766)
at java.io.ObjectInputStream.readByte(ObjectInputStream.java:916)
at org.jboss.mq.il.uil2.SocketManager$ReadTask.run(SocketManager.java:316)
at java.lang.Thread.run(Thread.java:744)
如问题中所述,JBoss 4.2.1 服务器已升级到 7.1.1 Final。升级已解决问题,客户端现在可以正常工作,但不幸的是,此解决方案无法解释问题。
我下面的应用程序作为 JBoss 7.2.0 系统上的客户端与 JBoss 4.2.1 系统上的接收器 JNDI/JMS 进行通信。它创建一个发送队列和一个接收队列。使用此配置,我们已经 运行 连续 2 个月都很好;双方都没有做出任何改变。本地客户端应用程序安装了 4.2.1 jbossall-client.jar 和 jnp-client.jars。
正常activity后,我们开始接收org.jboss.mq.SpyJMSException: Exiting on IOE; - nested throwable: (java.io.EOFException) at org.jboss.mq.SpyJMSException.getAsJMSException(SpyJMSException.java:72)
异常。
我们在不做任何更改的情况下重新启动了 JBoss 7.2.0,当我们建立接收队列时,我们现在收到了从代码 QueueReceiver receiver = session.createReceiver(queue);
处抛出的 org.jboss.mq.SpyJMSException: Cannot subscribe to this Destination: ; {...} Caused by: java.io.EOFException
异常。在应用 运行 好几天,但在多天的时间段内没有 activity 之后,我们也开始抛出相同的异常。
我们重新启动了 4.2.1 系统以查看是否是问题所在,但没有解决任何问题。 事实上,我们可以通过让两个系统正常连接来复制此故障场景,然后回收 4.2.1 系统。一旦 4.2.1 系统关闭,错误就会开始抛出,并且一旦 4.2.1 系统完全建立(即使它应该能够这样做),7.2.0 系统仍然无法重新建立连接。
在 JBoss 中停止然后启动应用程序无法解决此问题。重新启动 JBoss 有 20% 的机会解决这个问题(在上面提到的强制失败情况下有 100% 的机会)。取消部署,然后重新部署应用程序通常可以解决此问题。
可能是什么原因造成的?
同一个 war 文件在我们的测试系统上工作正常,它具有相同的 JBoss 设置。使用相同的代码从命令提示符通过测试应用程序与目标 JBoss 系统通信工作正常。
我怀疑 JBoss 7.2.0 本身有问题,或者这可能是超时问题?如何检查或延长超时时间;这在客户端可行吗?即使超时,我在 start()
的其余部分重新连接之前调用了 stop()
方法,我仍然得到异常;在那种情况下,这不会是超时问题,因为超时会重置。
上下文值:
connectionFactoryName=ConnectionFactory
contextFactoryName=org.jnp.interfaces.NamingContextFactory
packagePrefixes=org.jboss.naming:org.jnp.interfaces
providerUrl=MYSERVER:1099
Java代码:
private ContextContainer contextContainer = null;
private QueueConnection connection = null;
private QueueReceiver receiver = null;
private Queue sendQueue = null;
private Queue receiveQueue = null;
private String sendQueueName = null;
private String receiveQueueName = null;
private MessageHandler messageHandler = null;
protected synchronized void start() throws Exception {
// NOTE: This position also has delay code (for pending multiple
// consecutive recycling requests), with an external method to
// reset the delay. It was removed for code clarity and has no
// effect on the issue being discussed.
// Clear prior Connection
stop();
logger.info("Regenerating JMS for : " + this.getClass().getName());
Context context = this.contextContainer.getContext();
logger.info("Looking up factory : " + contextContainer.getConnectionFactoryName());
QueueConnectionFactory connectionFactory = (QueueConnectionFactory)context.lookup(contextContainer.getConnectionFactoryName());
// ESTABLISH SEND MESSAGE QUEUE
logger.info("Looking up send queue : " + sendQueueName);
sendQueue = (Queue)context.lookup(sendQueueName);
logger.info("Send Queue string : " + sendQueue);
logger.info("Send Queue name : " + sendQueue.getQueueName());
logger.info("Creating Queue Connection");
connection = connectionFactory.createQueueConnection();
logger.info("Setting Exception Listener");
connection.setExceptionListener(new ExceptionListener() {
public void onException(JMSException ex) {
logger.error("JMS Exception received on QueueConnection", ex);
start();
}
});
// ESTABLISH RECEIVE MESSAGE QUEUE
logger.info("Looking up receive queue : " + receiveQueueName);
receiveQueue = (Queue)context.lookup(receiveQueueName);
logger.info("Receive Queue string : " + receiveQueue);
logger.info("Receive Queue name : " + receiveQueue.getQueueName());
logger.info("Creating JMS Session for Receiving");
QueueSession session = connection.createQueueSession(false, Session.CLIENT_ACKNOWLEDGE);
logger.info("Created Session " + session);
logger.info("Creating JMS Receiver for Queue \"" + receiveQueue.getQueueName() + "\"");
// THIS IS THE LINE WHERE THE EXCEPTION IS THROWN!!!
receiver = session.createReceiver(receiveQueue);
logger.info("Setting Message Listener");
receiver.setMessageListener(new MessageListener() {
public void onMessage(Message message) {
try {
if (message instanceof ObjectMessage) {
Object obj = ((ObjectMessage) message).getObject();
// UNRELATED METHOD FOR HANDLING THE MESSAGE
handleMessage(obj);
} else {
throw new Exception("Received message of unexpected type " + message.getJMSType() + ", was expecting ObjectMessage");
}
} catch (Exception ex) {
logger.error("Error processing incoming message.", ex);
} finally {
try {
message.acknowledge();
logger.info("Acknowledged message.");
} catch (Exception ex) {
logger.error("Unable to acknowledge message.", ex);
}
}
}
});
logger.info("Starting Queue Connection");
connection.start();
logger.info("Started Queue Connection");
}
/**
* Extinguish the existing connection.
*/
public synchronized void stop() {
if (receiver != null) {
try {
logger.info("Nullifying Receiver Listener");
receiver.setMessageListener(null);
logger.info("Nullified Receiver Listener");
} catch(Exception ex) {
logger.warn("Exception nullifying Receiver Listener", ex);
}
try {
logger.info("Closing Receiver");
receiver.close();
logger.info("Closed Receiver");
} catch(Exception ex) {
logger.warn("Exception closing Receiver", ex);
} finally {
receiver = null;
}
}
if (connection != null) {
try {
logger.info("Nullifying Exception Listener");
connection.setExceptionListener(null);
logger.info("Nullified Exception Listener");
} catch (Exception ex) {
logger.warn("Exception nullifying Exception Listener", ex);
}
try {
logger.info("Stopping Queue Connection");
connection.stop();
logger.info("Stopped Queue Connection");
} catch (Exception ex) {
logger.warn("Exception stopping Queue Connection", ex);
}
try {
logger.info("Closing Queue Connection");
connection.close();
logger.info("Closed Queue Connection");
} catch (Exception ex) {
logger.warn("Exception closing Queue Connection", ex);
} finally {
connection = null;
}
}
}
日志输出:
Setting Context Factory Class: org.jnp.interfaces.NamingContextFactory
Setting Package Prefixes: org.jboss.naming:org.jnp.interfaces
Setting Provider URL: MYSERVER:1099
Generating JMS for : MYPACKAGE.ConnectionHandler
Looking up factory : ConnectionFactory
Looking up send queue : queue/sendQueue
Send Queue string : QUEUE.sendQueue
Send Queue name : sendQueue
Creating Queue Connection
Setting Exception Listener
Looking up receive queue : queue/receiveQueue
Receive Queue string : QUEUE.receiveQueue
Receive Queue name : receiveQueue
Creating JMS Session for Receiving
Created Session SpySession@1903462020[tx=false ack=CLIENT txid=null RUNNING connection=Connection@1963631553[token=ConnectionToken:ID:273725/9966a9625bb094d33a37f72db71b3bb9 rcvstate=STOPPED]]
Creating JMS Receiver for Queue "receiveQueue"
Exception caught during initialization.
org.jboss.mq.SpyJMSException: Cannot subscribe to this Destination: ; - nested throwable: (java.io.EOFException)
正常后异常跟踪activity:
JMS Exception received on QueueConnection
org.jboss.mq.SpyJMSException: Exiting on IOE; - nested throwable: (java.io.EOFException)
at org.jboss.mq.SpyJMSException.getAsJMSException(SpyJMSException.java:72)
at org.jboss.mq.Connection.asynchFailure(Connection.java:423)
at org.jboss.mq.il.uil2.UILClientILService.asynchFailure(UILClientILService.java:174)
at org.jboss.mq.il.uil2.SocketManager$ReadTask.handleStop(SocketManager.java:439)
at org.jboss.mq.il.uil2.SocketManager$ReadTask.run(SocketManager.java:371)
at java.lang.Thread.run(Thread.java:744)
Caused by: java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.readByte(ObjectInputStream.java:2766)
at java.io.ObjectInputStream.readByte(ObjectInputStream.java:916)
at org.jboss.mq.il.uil2.SocketManager$ReadTask.run(SocketManager.java:316)
... 1 more
重启后异常跟踪:
org.jboss.mq.SpyJMSException: Cannot subscribe to this Destination: ; - nested throwable: (java.io.EOFException)
at org.jboss.mq.SpyJMSException.getAsJMSException(SpyJMSException.java:72)
at org.jboss.mq.SpyJMSException.rethrowAsJMSException(SpyJMSException.java:57)
at org.jboss.mq.Connection.addConsumer(Connection.java:800)
at org.jboss.mq.SpySession.addConsumer(SpySession.java:947)
at org.jboss.mq.SpySession.createReceiver(SpySession.java:658)
at org.jboss.mq.SpyQueueSession.createReceiver(SpyQueueSession.java)
at org.jboss.mq.SpySession.createReceiver(SpySession.java:647)
at org.jboss.mq.SpyQueueSession.createReceiver(SpyQueueSession.java)
at MYPACKAGE.ConnectionHandler.start(ConnectionHandler.java:144)
at MYPACKAGE.ConnectionHandler.initialize(ConnectionHandler.java:60)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1414)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1375)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.run(AbstractAutowireCapableBeanFactory.java:409)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
at org.springframework.beans.factory.support.AbstractBeanFactory.getObject(AbstractBeanFactory.java:264)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3339)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:3777)
at org.jboss.as.web.deployment.WebDeploymentService.doStart(WebDeploymentService.java:156)
at org.jboss.as.web.deployment.WebDeploymentService.access[=15=]0(WebDeploymentService.java:60)
at org.jboss.as.web.deployment.WebDeploymentService.run(WebDeploymentService.java:93)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
at org.jboss.threads.JBossThread.run(JBossThread.java:122)
Caused by: java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.readByte(ObjectInputStream.java:2766)
at java.io.ObjectInputStream.readByte(ObjectInputStream.java:916)
at org.jboss.mq.il.uil2.SocketManager$ReadTask.run(SocketManager.java:316)
at java.lang.Thread.run(Thread.java:744)
如问题中所述,JBoss 4.2.1 服务器已升级到 7.1.1 Final。升级已解决问题,客户端现在可以正常工作,但不幸的是,此解决方案无法解释问题。