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:
When you use BMT, you manage the transaction. You use UserTransaction for create and commit the transaction.
The point here is that UserTransaction create a transaction in the current thread and when you call another EJB, that call will be executed in another thread (with its own EJB's life cycle).
In CMT, the container interpose on the method invocation for handling the transaction.
3.1 UserTransaction Interface (From JTA specification)
13.2.5 Container-Managed Demarcation (From EJB specification)