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