[ 
https://issues.apache.org/jira/browse/DELTASPIKE-816?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Gerhard Petracek updated DELTASPIKE-816:
----------------------------------------
    Fix Version/s:     (was: 1.4.0)
                   1.4.1

> 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.1
>
>
> #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)

Reply via email to