A quote from the EJB 3.1 specification:
13.6.1 Bean-Managed Transaction Demarcation
The container must manage client invocations to an enterprise bean instance with bean-managed transaction demarcation as follows. When a client invokes a business method via one of the enterprise bean’s client views, the container suspends any transaction that may be associated with the client request.
On the other hand, a transaction from a stand-alone client or another EJB is propagated into a bean using container-managed transactions. Looking at it from the CMT perspective, it seems that beans using CMT have an additional important feature (transaction propagation).
What is the reason for this restriction ("transaction barrier") being imposed on beans using BMT?
Related questions:
My "guess" would be this
container "sees" that you have marked the bean as BMT
so at some point you would presumably use UserTransaction object and its begin/commit/rollback etc methods
And since truely nested transactions are not supported by weblogic/oracle etc .. Container has no choice but to suspend current transaction to be able to support the new one
In case of CMT - since you use Requires, or RequiredNew - container "knows" your intent and choses to continue same transaction, or suspend and start a new one accordingly