[
https://issues.apache.org/jira/browse/DELTASPIKE-816?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14542068#comment-14542068
]
Ron Smeral commented on DELTASPIKE-816:
---------------------------------------
Also, looking the EntityManagerFactoryProducer which produces
@PersistenceUnitName EMFs:
it calls {{Persistence.createEntityManagerFactory(unitName, properties);}}
Why not just use standard JPA way {{@PersistenceUnit EntityManagerFactory
emf;}} directly instead? Is there any difference? What's the point of
EntityManagerFactoryProducer exactly?
> document usage of multiple entity-managers
> ------------------------------------------
>
> Key: DELTASPIKE-816
> URL: https://issues.apache.org/jira/browse/DELTASPIKE-816
> Project: DeltaSpike
> Issue Type: Task
> Components: Documentation
> Affects Versions: 1.2.1
> Reporter: Gerhard Petracek
> Assignee: Ron Smeral
> Fix For: 1.4.0
>
>
> #1) application-managed via @PersistenceUnitName:
> {code}
> @ApplicationScoped
> public class MultiEntityManagerProducer
> {
> @Inject
> @PersistenceUnitName("puA")
> private EntityManagerFactory emfA;
> @Inject
> @PersistenceUnitName("puB")
> private EntityManagerFactory emfB;
> @Produces
> //e.g.: @RequestScoped
> @DbA //custom qualifier annotation
> public EntityManager createEntityManagerA()
> {
> return emfA.createEntityManager();
> }
> public void closeEmA(@Disposes @DbA EntityManager em)
> {
> em.close();
> }
> @Produces
> //e.g.: @RequestScoped
> @DbB //custom qualifier annotation
> public EntityManager createEntityManagerB()
> {
> return emfB.createEntityManager();
> }
> public void closeEmB(@Disposes @DbB EntityManager em)
> {
> em.close();
> }
> }
> {code}
> or
> #2) select from multiple container-managed em-managers based on the
> InjectionPoint:
> {code}
> public class EntityManagerSelector
> {
> @PersistenceContext(unitName = "firstDB")
> private EntityManager firstEntityManager;
> @PersistenceContext(unitName = "secondDB")
> private EntityManager secondEntityManager;
> @Produces
> protected EntityManager createEntityManager(InjectionPoint injectionPoint)
> {
> CustomQualifier customQualifier =
> injectionPoint.getAnnotated().getAnnotation(CustomQualifier.class);
> return selectEntityManager(customQualifier); //selects
> firstEntityManager or secondEntityManager based on the details provided by
> CustomQualifier
> }
> //...
> }
> {code}
> or
> #3) select from multiple container-managed em-managers based on a custom
> context:
> {code}
> public class EntityManagerSelector
> {
> @PersistenceContext(unitName = "firstDB")
> private EntityManager firstEntityManager;
> @PersistenceContext(unitName = "secondDB")
> private EntityManager secondEntityManager;
> @Inject
> private CustomDatabaseContext customDatabaseContext;
> @Produces
> protected EntityManager createEntityManager()
> {
> if (customDatabaseContext.usePrimaryDb()) {
> return firstEntityManager;
> }
> return secondEntityManager;
> }
> //...
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)