For BMT transaction can span method calls.
Correction : that should have been BMT +Stateful
we would not specify the Stateless Session Bean as CMT, since as we know the same bean instance may not be available to service the next method.
But we can specify - There is no restriction as such.
what i want to know is we don't issue the commit explicitly in CMT. Then where and how it is getting commited.
It gets committed unless - the method or any method in another bean in the same transaction propagated calls setRollbackOnly() or ApplicationException is thrown which has rollback marked as true. See the Core Specs - 14.2.1:
An application exception does not automatically result in marking the transaction for rollback unless the ApplicationException annotation is applied to the exception class and is specified with the rollback element value true or the application-exception deployment descriptor element for the exception specifies the rollback element as true .