1 Reply Latest reply on Aug 4, 2004 10:04 AM by adrian.brock

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

      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)


      and

      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???

      Question:

      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,
      ShadowDog.