public EntityManagerRef lookupReference()

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;
    }