The short, practical answer is ... because it makes your entity beans useless as a reusable component. Also, transaction management is best left to the application server - that's what they're there for. It's all about atomic operations on your data. If an operation updates more than one entity then you want the whole thing to succeed or the whole thing to fail, nothing in between. If you put commits in the entity beans then it's very difficult to rollback if an error occurs at some point late in the operation. Think of an account transfer which takes money from the first account and then pays it into a second account. If the paying in part fails how do you put the money back in the first account? What about if that then fails too? The transaction should always "wrap" the entire operation. There are two obvious ways of achieving this in an EJB environment: Use the javax.transaction package Use a session bean to represent usecases and specify how transactions should be managed as part of the session bean's deployment descriptor. Solution 2 is the "correct" way to do it. Either way, you can simply leave all transaction code out of your entity beans. See link for the original message where i copied the answer above from...
Jeroen.<br />SCJP 1.4
posted 16 years ago
Thanks Jeroen...I get it now! But again, is it disallowed to use BMT demarcation at all or is it simply not a recommended way? Thanks again. [ April 01, 2004: Message edited by: Gayatri Aryan ]
Gayathri, It is disallowed. The container calls ejbStore() and ejbLoad() and if you did a BMT you would need to call them explicitly. This is because typically a transaction exits between a ejbload() and store()(usually). Since the container only has the priviledge to call these methods and you dont have control over these it is ILLEGAL to have a BMT in a Entity Bean.