I didn't build the MDB that is being lost, but here is all the scenario information I could collect.
-MDB Container max size = 100, currentSize = 100 (so all the instances are currently being used from the pool)
-Transaction Manager reports 0 live transactions
-Thread Stack Trace(via ctrl-break) does not show any threads using any MDB code/container
-Right before this state was entered, I saw about 1300 WARNing with Transaction Time outs, current State ACTIVE(but no stack trace or warning, as if the exception is being swallowed).
The time-out appears to be correct, I noticed that the DB table set was huge and gradually took longer, up until the time the TM began rolling back transaction.
The MDB is designed to ERROR all exceptions as they appear. The first thing that caught my eye was that this error did not exist. The developer is catching Throwable and error the exception before leaving onMessage. The JMS message appears to still be consumed(as expected).
It appears that the MDB instances are not making their way back into the pool. Since I do not see an ERROR message, I am assuming it occurs between the end of the catch clause and the end of the onMessage statement. There is no work in this section.
It has only happened once, and I'm gathering as much information as possible. The test cycle takes 2 weeks. Has anyone seen this issue before, MDB instances not making back into the Instance Pool when work appears to be done.
MDB does a call to a session bean with required transaction.
I hate open ended questions... :(