The state field has 3 possible values, "C", "+" and "-".
As you already know "C" means a normal message, "+" means the message is sent to a destination within a XA transaction and the transaction is prepared (but not committed). "-" means the message is delivered to a receiver within a XA transaction and the transaction is prepared (but not committed).
In transaction recovery, JBM knows which messages belongs to which prepared transaction and how the message will be processed based on the state field.
Thanks for the quick response.
What happens if the container died(for example due to JVM heap memory exhaustion) and and as a result we have such messages with uncommitted transactions? Will JBM handle them automatically or an user intervention is required to recover them?