in deltaspike/modules/jpa/impl/src/main/java/org/apache/deltaspike/jpa/impl/entitymanager/EntityManagerRefLookup.java [78:141]
public EntityManagerRef lookupReference(final EntityManagerMetadata entityManagerMetadata)
{
EntityManagerRef ref = new EntityManagerRef();
EntityManagerResolver unmanagedResolver = entityManagerMetadata.getUnmanagedResolver();
if (unmanagedResolver != null)
{
ref.setEntityManagerResolver(unmanagedResolver);
ref.setEntityManager(unmanagedResolver.resolveEntityManager());
}
else if (entityManagerMetadata.getEntityManagerResolverClass() != null)
{
ref.setEntityManagerResolverClass(entityManagerMetadata.getEntityManagerResolverClass());
if (entityManagerMetadata.isEntityManagerResolverIsNormalScope())
{
ref.setEntityManagerResolver(
BeanProvider.getContextualReference(ref.getEntityManagerResolverClass()));
}
else
{
ref.setEntityManagerResolverDependentProvider(
BeanProvider.getDependent(ref.getEntityManagerResolverClass()));
ref.setEntityManagerResolver(
ref.getEntityManagerResolverDependentProvider().get());
}
ref.setEntityManager(
ref.getEntityManagerResolver().resolveEntityManager());
}
else
{
if (activeEntityManagerHolder.isSet())
{
ref.setEntityManager(
activeEntityManagerHolder.get());
// TODO should we really not apply the FlushMode on the active EntityManager?
return ref;
}
else
{
lazyInitGlobalEntityManager();
if (globalEntityManagerIsNormalScope)
{
ref.setEntityManager(globalEntityManager);
}
else
{
ref.setEntityManagerDependentProvider(
BeanProvider.getDependent(EntityManager.class));
ref.setEntityManager(
ref.getEntityManagerDependentProvider().get());
}
}
}
if (entityManagerMetadata.getEntityManagerFlushMode() != null)
{
ref.getEntityManager().setFlushMode(entityManagerMetadata.getEntityManagerFlushMode());
}
return ref;
}