Tejas,
Thanks for changing your display name. Remember that asking a question might make you look dumb for a moment, but if you don't ask it you might look dumb for the eternity. Your call
1.Entity Bean always have to be CMT. Why can't they be BMT?? Remember that entity beans are abstract classes that usually map a table in a database and that provide abstract get/set methods for accessing the column values in that table. When you deploy an entity bean, the application server will create a new class that extends your entity bean and that provides a concrete implementation for all your abstract methods. The bean-managed transaction model requires you to use a UserTransaction object in order to delimit the transactions in your code. Since entity beans are abstract (i.e., they don't have any code), you will not be able to use UserTransaction anywhere in an entity bean. Hence, the BMT model is de facto not available for entity beans.
2.Consider the following scenario:
2.1.A BMT Session bean starts a trancation and calls a CMT session beans method which is marked with "reqd" tx attribute.
2.2.The called method of CMT bean calls setRollBackOnly() on EJBContext.
2.3.The called method of CMT bean returns.
2.4.Now in the BMT beans method which is resume tx is committed.
2.5.What would happen?(would it throw illegalstate?) I usually don't like to answer questions like these because it would be much better that you actually go ahead and write some code for visualizing the scenario and see what happens. Remember that EJBs (as well as many other technical topics for that matter) cannot be learned theoritically. You have to put your hands in the dirt in order to see how it works. This is the only sustainable way of learning EJBs. Writing and deploying code for the above scenario wouldn't take much longer than a couple of minutes.
Now, an answer to your question can be found in section 17.2.4 (Client-managed demarcation) of in the EJB 2.1 spec which states:
The application programmer demarcates the transaction with begin and commit calls. If the enterprise beans X and Y are configured to use a client transaction (i.e., their methods have either the Required, Mandatory, or Supports transaction attribute), the EJB server ensures that the updates to databases A and B are made as part of the client�s transaction.
In your case, you don't have two databases, but the same logic applies, namely a BMT bean calling a CMT bean.
Write some code and see for yourself. Please let us know the outcome so that others can learn from your experience...
Thanks