The container serializes calls to each message-driven bean instance. Most containers will
support many instances of a message-driven bean executing concurrently; however, each
instance sees only a serialized sequence of method calls. Therefore, a message-driven bean
DOES NOT have to be coded as reentrant.
"reentrant" means a multi-threaded environment where a method can be executed concurrently by different threads. This is not applicable to MDBs as everytime a message listener method is executed (or a timer callback) a new instance is picked up by the container from the pool.
Hope this answers.
I’ve looked at a lot of different solutions, and in my humble opinion Aspose is the way to go. Here’s the link: http://aspose.com