Wie konfiguriere ich einen EntityManager in einer Jersey / HK2-Anwendung richtig?
Ich habe eine Jersey-2 / HK2-Anwendung, die JPA-Persistenz verwendet. DasEntityManager
wird beim Start so gebunden
public MyApplication() {
// ...
register(new AbstractBinder() {
@Override
public void configure() {
bindFactory(EmFactory.class)
.to(EntityManager.class)
.in(RequestScoped.class);
}
});
}
mit der Fabrikklasse als
public class EmFactory implements Factory<EntityManager> {
private static final String PERSISTENCE_UNIT = "unit";
private EntityManagerFactory emf;
private CloseableService closeableService;
@Inject
public EmFactory(@Named(PERSISTENCE_UNIT) String persistenceUnit,
CloseableService closeableService) {
emf = Persistence.createEntityManagerFactory(persistenceUnit);
this.closeableService = closeableService;
}
@Override
public EntityManager provide() {
final EntityManager entityManager = emf.createEntityManager();
closeableService.add(new Closeable() {
@Override
public void close() throws IOException {
if(entityManager.isOpen()) {
entityManager.close();
}
}
});
return entityManager;
}
@Override
public void dispose(EntityManager entityManager) {
if(entityManager.isOpen()) {
entityManager.close();
}
}
}
das funktioniert, aber dann bekomme ich bei jeder Anfrage eine Warnung in den Protokollen, dass ein EntityManager bereits registriert ist:
HHH000436: Entity manager factory name (unit) is already registered. \
If entity manager will be clustered or passivated, specify a unique \
value for property 'hibernate.ejb.entitymanager_factory_name'
Was mache ich falsch? Wie initialisiere ich einen EntityManager in einer jersey-2 / hk2-Anwendung?