Win a copy of Re-engineering Legacy Software this week in the Refactoring forum
or Docker in Action in the Cloud/Virtualization forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Usage of EntityManagerFactory

 
Devaka Cooray
ExamLab Creator
Marshal
Pie
Posts: 4262
229
Chrome Eclipse IDE Google App Engine IntelliJ IDE jQuery Postgres Database Tomcat Server
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Can anyone tell me, what is the usage of using @PersistenceUnit annotation, instead of using @PersistenceContext annotation.

When we used @PersistenceUnit, we can get a EntityManagerFactory object as:


In this case, we can get the EntityManager as:


However, we can use the following syntax to get the EntityManager directly, with @PersistenceContext annotation as:


So, why we use the long way with @PersistenceUnit annotation, instead of using @PersistenceContext annotation?
[ November 03, 2008: Message edited by: Devaka Cooray ]
 
Christophe Verré
Sheriff
Posts: 14691
16
Eclipse IDE Ubuntu VI Editor
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
The EntityManagerFactory, along with the @PersistenceUnit annotation is used to create an Application-managed Persistence Context. The main difference between an application-managed persistence context and a context-managed persistence context is that application-managed persistence contexts are extended in scope, and may span multiple transactions. Using a transaction-scoped container-managed persistence context (like in your last code) limits the scope of the persistence context to the existing transaction.
 
Devaka Cooray
ExamLab Creator
Marshal
Pie
Posts: 4262
229
Chrome Eclipse IDE Google App Engine IntelliJ IDE jQuery Postgres Database Tomcat Server
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Originally posted by Christophe Verre:
The EntityManagerFactory, along with the @PersistenceUnit annotation is used to create an Application-managed Persistence Context. The main difference between an application-managed persistence context and a context-managed persistence context is that application-managed persistence contexts are extended in scope, and may span multiple transactions. Using a transaction-scoped container-managed persistence context (like in your last code) limits the scope of the persistence context to the existing transaction.



Thanks for the quick reply. However I didn't understand this well. Can you explain me?
 
Chaminda Amarasinghe
Ranch Hand
Posts: 405
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
application manage persistence context can be shared on multiple transaction since life of container managed persistence context life cycle limited to one transaction,
 
Ralph Jaus
Ranch Hand
Posts: 342
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi,
The main difference between an application-managed persistence context and a context-managed persistence context is that application-managed persistence contexts are extended in scope, and may span multiple transactions
Can you give an example where an extended persistence context is used in a reasonable way in a stateless session bean or a MDB ?

In stateful session beans it seems to be easier to aquire an extended persistence context via

@PersistenceContext(type=PersistenceContextType.EXTENDED)
 
Afzal Hossain
Greenhorn
Posts: 25
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi Friends,
When the PersistenceUnit is used it not only injects the EntityManagerFactory, it also registers a reference to it within the JNDI ENC of the EJB.

thanks
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic