1 Reply Latest reply on May 31, 2009 12:22 PM by b.eckenfels

    Socket closed exception in JBossMQ

    vons1234

      Hi,

      I am using jboss 4.2.0 and i have couple of MDBs in my application which is bound to queues
      Every now and then i am seeing following exception in my server.log

      I am running Jboss in cluster mode and we have 2 nodes in cluster.

      What could be the problem in JBoss MQ or in my MsgSender code

      2009-05-29 23:00:01,166 DEBUG [org.jboss.mq.il.uil2.ServerSocketManagerHandler] Exiting on IOE
      java.net.SocketException: Socket closed
       at java.net.SocketInputStream.read(SocketInputStream.java:162)
       at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
       at java.io.BufferedInputStream.read(BufferedInputStream.java:235)
       at org.jboss.util.stream.NotifyingBufferedInputStream.read(NotifyingBuff eredInputStream.java:79)
       at java.io.ObjectInputStream$PeekInputStream.peek(ObjectInputStream.java :2196)
       at java.io.ObjectInputStream$BlockDataInputStream.readBlockHeader(Object InputStream.java:2376)
       at java.io.ObjectInputStream$BlockDataInputStream.refill(ObjectInputStre am.java:2443)
       at java.io.ObjectInputStream$BlockDataInputStream.read(ObjectInputStream .java:2515)
       at java.io.ObjectInputStream$BlockDataInputStream.readByte(ObjectInputSt ream.java:2664)
       at java.io.ObjectInputStream.readByte(ObjectInputStream.java:875)
       at org.jboss.mq.il.uil2.SocketManager$ReadTask.run(SocketManager.java:31 6)
       at java.lang.Thread.run(Thread.java:595)
      2009-05-29 23:00:01,166 DEBUG [org.jboss.mq.il.uil2.SocketManager] End ReadTask. run
      2009-05-29 23:00:01,166 DEBUG [org.jboss.mq.il.uil2.SocketManager] End WriteTask .run
      
      


      Here is my MsgSender which post message in queue for MDB
       public void send(String jndiQueueName, String message)throws NamingException, JMSException, Exception
       {
       logger.info("MsgSender Using jndiQueueName:"+jndiQueueName);
       logger.info("Sening string object:" + message);
       QueueConnection conn = getQueueConncetion();
       QueueSession session = conn.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);
       Queue que = (Queue) getContext().lookup(jndiQueueName);
       QueueSender sender = session.createSender(que);
       TextMessage txtMsg = session.createTextMessage();
       txtMsg.setText(message);
       sender.send(txtMsg);
       //free all created objects
       if(sender != null) {
       sender.close();
       }
       if(session != null) {
       session.close();
       }
       if(conn != null) {
       conn.close();
       }
       logger.info("Msg sent successfully");
       }
      




        • 1. Re: Socket closed exception in JBossMQ
          b.eckenfels

           

          "vons1234" wrote:
          Hi,
          Every now and then i am seeing following exception in my server.log

          java.net.SocketException: Socket closed
           at java.net.SocketInputStream.read(SocketInputStream.java:162)
          ...
           at java.io.ObjectInputStream.readByte(ObjectInputStream.java:875)
           at org.jboss.mq.il.uil2.SocketManager$ReadTask.run(SocketManager.java:31
          



          This happens when the network connection is terminated (either by hardware problems, firewall, router, os buffer shortage, jmx-stop of server or restart of the other side).

          I dont think your (client) code can or is causing this.

          However your client code is missing proper error and resource handling. Especially you should use finally blocks to close the connection. This can explain leaking connections, which lead to leaking threads and this quickly (on hpux) leads to out of native memory.