@Singleton public class CDIEntityManagerFactoryRegistry extends Object implements EntityManagerFactoryRegistry
EntityManagerFactoryRegistry that retrieves the entity manager factory
from the CDI context by its bean name.
When calling getDefault(), the single registered EntityManagerFactory bean
will be returned, or if there is none the entity manager factory will be retrieved
using a @PersistenceUnit annotation.
When calling get(String) or get(String, String), the reference
will be interpreted as a Named qualifier.
Caution: EntityManagerFactory are not considered as beans per
default, and thus can't be retrieved without a specific user configuration. In order
for retrieval by name to work, users should have producer methods expose the entity manager
factories in their context, for instance like this:
@ApplicationScoped
public class EntityManagerFactoriesProducer {
@PersistenceUnit(unitName = "db1")
private EntityManagerFactory db1Factory;
@PersistenceUnit(unitName = "db2")
private EntityManagerFactory db2Factory;
@Produces
@Singleton
@Named("db1") // The name to use when referencing the bean
public EntityManagerFactory createEntityManagerFactoryForDb1() {
return db1Factory;
}
@Produces
@Singleton
@Named("db2") // The name to use when referencing the bean
public EntityManagerFactory createEntityManagerFactoryForDb2() {
return db2Factory;
}
}
Note that retrieving an EntityManagerFactory by its persistence unit name is not supported, because CDI does not offer any API allowing to achieve it dynamically. Indeed:
| Constructor and Description |
|---|
CDIEntityManagerFactoryRegistry() |
| Modifier and Type | Method and Description |
|---|---|
javax.persistence.EntityManagerFactory |
get(String reference) |
javax.persistence.EntityManagerFactory |
get(String namespace,
String reference) |
javax.persistence.EntityManagerFactory |
getDefault() |
public javax.persistence.EntityManagerFactory getDefault()
getDefault in interface EntityManagerFactoryRegistrypublic javax.persistence.EntityManagerFactory get(String reference)
get in interface EntityManagerFactoryRegistrypublic javax.persistence.EntityManagerFactory get(String namespace, String reference)
get in interface EntityManagerFactoryRegistryCopyright © 2006–2017 Hibernate. All rights reserved.