2016-07-14 28 views
0

Ich schreibe ein Framework, das mit einer vom Benutzer bereitgestellten Persistenzeinheit verlinken muss. Zuvor war das Unternehmen Manager @PersistenceContext Anmerkung injiziert verwenden, aber das ist eine statische Art und Weise:Wie injiziere ich den EntityManager dynamisch?

public class MyItemReader implements ItemReader { 

    @PersistenceContext(unitName="myPU") 
    private EntityManager em; 

    ... 
} 

Jetzt will ich die Zuordnung dynamisch. Somit kann unabhängig vom Namen der Persistenzeinheit der zugehörige Entitätsmanager gefunden werden. Hier ist meine Umsetzung:

public class MyItemReader implements ItemReader { 

    private EntityManager em; 

    @Inject @BatchProperty 
    private String persistenceUnitName; 

    @Override 
    public void open(Serializable checkpoint) throws Exception { 
     String path = "java:comp/env/" + persistenceUnitName; 
     em = (EntityManager) InitialContext.doLookup(path); 
     ... 
    } 

    ... 
} 

Meine Implementierung in Wildfly funktioniert, aber ich bin mir nicht sicher, dass es in anderen Java EE Container funktioniert. Und ich bin mir nicht sicher, ob es funktioniert, wenn sich der ursprüngliche Kontext ändert.

Also, ist meine Implementierung ein guter Ansatz?

+1

Es ist gut, nur vorsichtig sein, dass einige Container verschiedene jndi Namen veröffentlichen haben, aber man kann die Basis jndi Pfad zu einer @Resource Eigenschaft initialisiert mit Deployment-Deskriptoren – fantarama

Antwort

-1

Sie müssen unitName nicht in persistanceContext angeben. Versuchen Sie unter einem ..

@PersistenceContext 
    public void setEntityManager(EntityManager entityManager) { 
     this.entityManager = entityManager; 
    } 

Es wird funktionieren.

Dank

+1

Wenn Benutzer bindet mehr als ein PU, dann Welches wird in diesem Fall gewählt? –

+0

In diesem Fall versuchen Sie, den Einheitennamen als @PersistenceContext (unitName = "$ {persistence.UnitName}") anzugeben. Fügen Sie persistence.UnitName in Ihren Eigenschaften hinzu. es wird klappen. – Umamaheswar