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?
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