另外,不知道是不是你的Web服务器的并发连接数太小而导致的

解决方案 »

  1.   

    察看了JBOSS的源代码,命名服务器抛出的这个异常分析如下
    java.net.SocketException: Software caused connection abort: socket write error
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
    at java.io.ObjectOutputStream$BlockDataOutputStream.drain(ObjectOutputStream.java:1639)
    at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(ObjectOutputStream.java:1548)
    at java.io.ObjectOutputStream.writeNonProxyDesc(ObjectOutputStream.java:1146)
    at java.io.ObjectOutputStream.writeClassDesc(ObjectOutputStream.java:1100)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1241)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
    at java.io.ObjectOutputStream.writeFatalException(ObjectOutputStream.java:1355)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:281)上述异常是由于这样的原因造成的:1、 客户端进行查找是NamingContext会建立到命名服务器的Socket连接。(此连接是带读取超时的!)
    2、 服务器接收了客户端的连接,使客户端可以继续向下运行。于是客户端运行到ObjectInputStream的readObject处,并等待。此时,客户端是想要得到NamingServer的stub。
    3、 服务端由于线程繁忙,迟迟不能将客户端需要的stub写入ObjectOutputStream。于是客户端等待超时,然后客户端抛出异常。如果此查找操作是在登录操作,客户在登录失败后选择推出程序。则Socket被关闭。
    4、 服务端闲下来后调用ObjectOutputStream的writeObject方法,此时由于客户端Socket关闭,最终抛出上述异常。这是我们公司的一个牛人分析的,后来察看了JMS也存在类似问题。另:JBOSS的源代码质量不高,JNDI中存在socket未关闭的情况,JMS代码中socket用法也很不规范。大家小心了