1 Reply Latest reply on Aug 4, 2004 10:04 AM by Adrian Brock

    MDB ejbRemove() never called and OutOfMemory occurs...

    shadowdog Newbie

      The scenario:

      I am using JBossMQ to hold transient data that is passed to a Queue then to an MDB, data is processed and the result goes to another Queue and another MDB and then the final result is put into a MySql db. The MDB's are pooled using the default config in "standardjboss.xml". For a small number of transactions everything works fine but when load testing (running 24 transactions every 5 mins) for an extended time (24 hrs) Connection errors start being thrown along with OutOfMemory errors.

      Connection failures like:

      18:40:28,735 ERROR [SocketManager] Exiting on unexpected error in read task
      java.lang.OutOfMemoryError: unable to create new native thread
       at java.lang.Thread.start(Native Method)
       at EDU.oswego.cs.dl.util.concurrent.PooledExecutor.addThread(PooledExecutor.java:515)
       at EDU.oswego.cs.dl.util.concurrent.PooledExecutor.execute(PooledExecutor.java:870)
       at org.jboss.mq.il.uil2.SocketManager$ReadTask.run(SocketManager.java:290)
       at java.lang.Thread.run(Thread.java:536)


      18:45:27,964 WARN [Connection] Connection failure: org.jboss.mq.SpyJMSException: Connection Failed; - nested throwable: (java.io.IOException: ping timeout.)
       at org.jboss.mq.Connection.asynchFailure(Connection.java:429)
       at org.jboss.mq.Connection$PingTask.run(Connection.java:1356)
       at EDU.oswego.cs.dl.util.concurrent.ClockDaemon$RunLoop.run(ClockDaemon.java:364)
       at java.lang.Thread.run(Thread.java:536)
      Caused by: java.io.IOException: ping timeout.
       at org.jboss.mq.Connection$PingTask.run(Connection.java:1348)
       ... 2 more

      occur along with OutOfMemory...

      ENVIRONMENT - Duel PIII 500, Windows 2000, JBoss 4.0.0DR3, JDK 1.4.1_05, 512 ram (JBoss is running as a service and is basically the only app running)

      From what I can tell the ejbRemove() on the MDB is never called and another MDB is created for the next transaction???


      Is it ok to use the default MDB pooling found in standardjboss.xml?? Will it pool my MDB and will it clean up once the MDB has finshed its transaction? How do I ensure ejbRemove() is called on my MDB?

      Besides the errors everything works great for a while....

      thanks in advance for any help,