Search in sources :

Example 6 with EntityManagerReferenceDescriptor

use of com.sun.enterprise.deployment.EntityManagerReferenceDescriptor in project Payara by payara.

the class AsynchronousTask method createExtendedEMs.

private void createExtendedEMs(SessionContextImpl ctx, Object sessionKey) {
    Set<EntityManagerReferenceDescriptor> emRefs = ejbDescriptor.getEntityManagerReferenceDescriptors();
    Iterator<EntityManagerReferenceDescriptor> iter = emRefs.iterator();
    Set<EEMRefInfo> eemRefInfos = new HashSet<EEMRefInfo>();
    while (iter.hasNext()) {
        EntityManagerReferenceDescriptor refDesc = iter.next();
        if (refDesc.getPersistenceContextType() == PersistenceContextType.EXTENDED) {
            String unitName = refDesc.getUnitName();
            EntityManagerFactory emf = EntityManagerFactoryWrapper.lookupEntityManagerFactory(ComponentInvocation.ComponentInvocationType.EJB_INVOCATION, unitName, ejbDescriptor);
            if (emf != null) {
                PhysicalEntityManagerWrapper physicalEntityManagerWrapper = findExtendedEMFromInvList(emf);
                if (physicalEntityManagerWrapper == null) {
                    // We did not find an extended EM that we can inherit from. Create one
                    try {
                        EntityManager em = emf.createEntityManager(refDesc.getSynchronizationType(), refDesc.getProperties());
                        physicalEntityManagerWrapper = new PhysicalEntityManagerWrapper(em, refDesc.getSynchronizationType());
                    } catch (Throwable th) {
                        EJBException ejbEx = new EJBException("Couldn't create EntityManager for" + " refName: " + refDesc.getName() + "; unitname: " + unitName);
                        ejbEx.initCause(th);
                        throw ejbEx;
                    }
                } else {
                    // We found an extended EM we can inherit from. Validate that sync type matches
                    if (physicalEntityManagerWrapper.getSynchronizationType() != refDesc.getSynchronizationType()) {
                        throw new EJBException("The current invocation inherits a persistence context of synchronization type '" + physicalEntityManagerWrapper.getSynchronizationType() + "' where as it references a persistence context of synchronization type '" + refDesc.getSynchronizationType() + "' refName: " + refDesc.getName() + " unitName: " + unitName);
                    }
                }
                String emRefName = refDesc.getName();
                long containerID = this.getContainerId();
                EEMRefInfo refInfo = null;
                synchronized (extendedEMReferenceCountMap) {
                    refInfo = extendedEMReferenceCountMap.get(physicalEntityManagerWrapper.getEM());
                    if (refInfo != null) {
                        refInfo.refCount++;
                    } else {
                        refInfo = new EEMRefInfo(emRefName, refDesc.getUnitName(), refDesc.getSynchronizationType(), containerID, sessionKey, physicalEntityManagerWrapper.getEM(), emf);
                        refInfo.refCount = 1;
                        extendedEMReferenceCountMap.put(physicalEntityManagerWrapper.getEM(), refInfo);
                        eemKey2EEMMap.put(refInfo.getKey(), refInfo.getEntityManager());
                    }
                }
                ctx.addExtendedEntityManagerMapping(emf, refInfo);
                eemRefInfos.add(refInfo);
            } else {
                throw new EJBException("EMF is null. Couldn't get extended EntityManager for" + " refName: " + refDesc.getName() + "; unitname: " + unitName);
            }
        }
    }
    if (eemRefInfos.size() > 0) {
        ctx.setEEMRefInfos(eemRefInfos);
    }
}
Also used : EntityManager(javax.persistence.EntityManager) PhysicalEntityManagerWrapper(com.sun.enterprise.container.common.impl.PhysicalEntityManagerWrapper) EntityManagerFactory(javax.persistence.EntityManagerFactory) EJBException(javax.ejb.EJBException) EntityManagerReferenceDescriptor(com.sun.enterprise.deployment.EntityManagerReferenceDescriptor) HashSet(java.util.HashSet)

Example 7 with EntityManagerReferenceDescriptor

use of com.sun.enterprise.deployment.EntityManagerReferenceDescriptor in project Payara by payara.

the class EntityManagerReferenceNode method setElementValue.

/**
 * receives notiification of the value for a particular tag
 *
 * @param element the xml element
 * @param value it's associated value
 */
public void setElementValue(XMLElement element, String value) {
    if (TagNames.PERSISTENCE_CONTEXT_TYPE.equals(element.getQName())) {
        EntityManagerReferenceDescriptor entityMgrReferenceDescriptor = (EntityManagerReferenceDescriptor) getDescriptor();
        PersistenceContextType contextType = null;
        if (EXTENDED.equals(value)) {
            contextType = PersistenceContextType.EXTENDED;
        } else if (TRANSACTION.equals(value)) {
            contextType = PersistenceContextType.TRANSACTION;
        } else {
            throw new IllegalArgumentException(localStrings.getLocalString("enterprise.deployment.node.invalidvalue", "Invalid value for a tag under {0} : {1}", new Object[] { TagNames.PERSISTENCE_CONTEXT_TYPE, value }));
        }
        entityMgrReferenceDescriptor.setPersistenceContextType(contextType);
    } else if (TagNames.PERSISTENCE_CONTEXT_SYNCHRONIZATION_TYPE.equals(element.getQName())) {
        EntityManagerReferenceDescriptor entityMgrReferenceDescriptor = (EntityManagerReferenceDescriptor) getDescriptor();
        SynchronizationType synchronizationType;
        if (SYNCHRONIZED.equals(value)) {
            synchronizationType = SynchronizationType.SYNCHRONIZED;
        } else if (UNSYNCHRONIZED.equals(value)) {
            synchronizationType = SynchronizationType.UNSYNCHRONIZED;
        } else {
            throw new IllegalArgumentException(localStrings.getLocalString("enterprise.deployment.node.invalidvalue", "Invalid value for a tag under {0} : {1}", new Object[] { TagNames.PERSISTENCE_CONTEXT_SYNCHRONIZATION_TYPE, value }));
        }
        entityMgrReferenceDescriptor.setSynchronizationType(synchronizationType);
    } else if (TagNames.NAME_VALUE_PAIR_NAME.equals(element.getQName())) {
        propertyName = value;
    } else if (TagNames.NAME_VALUE_PAIR_VALUE.equals(element.getQName())) {
        EntityManagerReferenceDescriptor entityMgrReferenceDescriptor = (EntityManagerReferenceDescriptor) getDescriptor();
        entityMgrReferenceDescriptor.addProperty(propertyName, value);
        propertyName = null;
    } else {
        super.setElementValue(element, value);
    }
}
Also used : PersistenceContextType(javax.persistence.PersistenceContextType) EntityManagerReferenceDescriptor(com.sun.enterprise.deployment.EntityManagerReferenceDescriptor) SynchronizationType(javax.persistence.SynchronizationType)

Aggregations

EntityManagerReferenceDescriptor (com.sun.enterprise.deployment.EntityManagerReferenceDescriptor)7 InjectionTarget (com.sun.enterprise.deployment.InjectionTarget)3 PhysicalEntityManagerWrapper (com.sun.enterprise.container.common.impl.PhysicalEntityManagerWrapper)1 EjbInterceptor (com.sun.enterprise.deployment.EjbInterceptor)1 EntityManagerFactoryReferenceDescriptor (com.sun.enterprise.deployment.EntityManagerFactoryReferenceDescriptor)1 Result (com.sun.enterprise.tools.verifier.Result)1 Field (java.lang.reflect.Field)1 Method (java.lang.reflect.Method)1 HashSet (java.util.HashSet)1 EJBException (javax.ejb.EJBException)1 EntityManager (javax.persistence.EntityManager)1 EntityManagerFactory (javax.persistence.EntityManagerFactory)1 PersistenceContextType (javax.persistence.PersistenceContextType)1 SynchronizationType (javax.persistence.SynchronizationType)1 SingleThreadModel (javax.servlet.SingleThreadModel)1 TranslationResults (org.glassfish.ejb.deployment.util.InterceptorBindingTranslator.TranslationResults)1