This is perfect
to implement the entitymanager-per-conversation
pattern. A stateful session bean represents the conversation implementation. All intermediate
conversation work will be processed in methods not involving
transaction. The end of the conversation will be processed
inside a JTA transaction. Hence all queued operations will be executed to the database and committed
. If you are interested in the notion of conversation
inside your application, have a look at JBoss Seam. JBoss Seam emphasizes the concept of conversation and entity manager lifecycle
and bind EJB3 and JSF together.
When using an EXTENDED persistence context with a container managed entity manager, the lifecycle of the persistence context is binded to the lifecycle of the Stateful Session Bean. Plus if the entity manager is created outside a transaction, modifications operations (persist, merge, remove) are queued in the persistence context and not executed to the database.
When a method of the stateful session bean involved or starting a transaction is later called, the entity manager join the transaction. All queued operation will then be executed to synchronize the persistence context.