JBossEnvironmentRefsGroupMetaData originalEnv = null;
MethodAttributesMetaData originalMethodAttrs = null;
IgnoreDependencyMetaData originalIgnoreDependency = null;
PoolConfigMetaData originalPool = null;
JndiRefsMetaData originalJndiRefs = null;
SecurityIdentityMetaData originalSecId = null;
if(original != null)
{
if(original.aopDomainName != null)
aopDomainName = original.aopDomainName;
if(original.configurationName != null)
configurationName = original.configurationName;
if(original.containerName != null)
containerName = original.containerName;
if(original.ejbClass != null)
ejbClass = original.ejbClass;
if(original.generatedContainerName != null)
generatedContainerName = original.generatedContainerName;
if(original.jndiBindingPolicy != null)
jndiBindingPolicy = original.jndiBindingPolicy;
if(original.localJndiName != null)
localJndiName = original.localJndiName;
if(original.mappedName != null)
mappedName = original.mappedName;
if(original.securityDomain != null)
securityDomain = original.securityDomain;
if(original.securityProxy != null)
securityProxy = original.securityProxy;
if(original.transactionType != null)
transactionType = original.transactionType;
if(original.depends != null)
{
if(depends == null)
depends = new HashSet<String>();
depends.addAll(original.depends);
}
// boolean wrapper should be used to differentiate between default and not set values
timerPersistence = original.timerPersistence;
exceptionOnRollback = original.exceptionOnRollback;
originalAnnotations = original.annotations;
originalInvokers = original.invokers;
originalEnv = original.jndiEnvironmentRefsGroup;
originalMethodAttrs = original.methodAttributes;
originalIgnoreDependency = original.ignoreDependency;
originalPool = original.poolConfig;
originalJndiRefs = original.jndiRefs;
originalSecId = original.securityIdentity;
// not merged currently but overriden
if(original.iorSecurityConfig != null)
iorSecurityConfig = original.iorSecurityConfig;
}
AnnotationsMetaData overrideAnnotations = null;
InvokerBindingsMetaData overrideInvokers = null;
JBossEnvironmentRefsGroupMetaData overrideEnv = null;
MethodAttributesMetaData overrideMethodAttrs = null;
IgnoreDependencyMetaData overrideIgnoreDependency = null;
PoolConfigMetaData overridePool = null;
JndiRefsMetaData overrideJndiRefs = null;
SecurityIdentityMetaData overrideSecId = null;
if(override != null)
{
if(override.aopDomainName != null)
aopDomainName = override.aopDomainName;
if(override.configurationName != null)
configurationName = override.configurationName;
if(override.containerName != null)
containerName = override.containerName;
if(override.ejbClass != null)
ejbClass = override.ejbClass;
if(override.generatedContainerName != null)
generatedContainerName = override.generatedContainerName;
if(override.jndiBindingPolicy != null)
jndiBindingPolicy = override.jndiBindingPolicy;
if(override.localJndiName != null)
localJndiName = override.localJndiName;
if(override.mappedName != null)
mappedName = override.mappedName;
if(override.securityDomain != null)
securityDomain = override.securityDomain;
if(override.securityProxy != null)
securityProxy = override.securityProxy;
if(override.transactionType != null)
transactionType = override.transactionType;
if(override.depends != null)
{
if(depends == null)
depends = new HashSet<String>();
depends.addAll(override.depends);
}
timerPersistence = override.timerPersistence;
exceptionOnRollback = override.exceptionOnRollback;
overrideAnnotations = override.annotations;
overrideInvokers = override.invokers;
overrideEnv = override.jndiEnvironmentRefsGroup;
overrideMethodAttrs = override.methodAttributes;
overrideIgnoreDependency = override.ignoreDependency;
overridePool = override.poolConfig;
overrideJndiRefs = override.jndiRefs;
overrideSecId = override.securityIdentity;
if(override.iorSecurityConfig != null)
iorSecurityConfig = override.iorSecurityConfig;
}
if(originalAnnotations != null || overrideAnnotations != null)
{
if(annotations == null)
annotations = new AnnotationsMetaData();
annotations.merge(overrideAnnotations, originalAnnotations);
}
if(originalInvokers != null || overrideInvokers != null)
{
if(invokers == null)
invokers = new InvokerBindingsMetaData();
invokers.merge(overrideInvokers, originalInvokers);
}
if(originalEnv != null || overrideEnv != null)
{
if(jndiEnvironmentRefsGroup == null)
jndiEnvironmentRefsGroup = new JBossEnvironmentRefsGroupMetaData();
jndiEnvironmentRefsGroup.merge(overrideEnv, originalEnv, getJBossMetaData().getResourceManagers());
}
if(originalMethodAttrs != null || overrideMethodAttrs != null)
{
if(methodAttributes == null)
methodAttributes = new MethodAttributesMetaData();
methodAttributes.merge(overrideMethodAttrs, originalMethodAttrs);
}
if(originalIgnoreDependency != null || overrideIgnoreDependency != null)
{
if(ignoreDependency == null)
ignoreDependency = new IgnoreDependencyMetaData();
ignoreDependency.merge(overrideIgnoreDependency, originalIgnoreDependency);
}
if(originalPool != null || overridePool != null)
{
if(poolConfig == null)
poolConfig = new PoolConfigMetaData();
poolConfig.merge(overridePool, originalPool);
}
if(originalJndiRefs != null || overrideJndiRefs != null)
{
if(jndiRefs == null)
jndiRefs = new JndiRefsMetaData();
jndiRefs.merge(overrideJndiRefs, originalJndiRefs);
}
if(originalSecId != null || overrideSecId != null)
{
if(securityIdentity == null)
securityIdentity = new SecurityIdentityMetaData();
securityIdentity.merge(overrideSecId, originalSecId);
}
// Fixup the invoker binding references on ejb refs
InvokerBindingsMetaData invokerBindings = getInvokerBindings();
if (invokerBindings != null && invokerBindings.isEmpty() == false)
{
for (InvokerBindingMetaData invokerBinding : invokerBindings)
{
if(invokerBinding.getEjbRefs() != null)
{
for(InvokerBindingMetaData.EjbRef ejbRef : invokerBinding.getEjbRefs())
{
EJBReferenceMetaData targetEjbRef = jndiEnvironmentRefsGroup.getEjbReferenceByName(ejbRef.getEjbRefName());
if (targetEjbRef == null)
throw new IllegalStateException("ejb-ref " + ejbRef.getEjbRefName() + " found on invoker " + invokerBinding.getName() + " but it does not exist for ejb: " + getName());
targetEjbRef.addInvokerBinding(invokerBinding.getName(), ejbRef.getJndiName());
}
}
}
}
// Fixup the security identity
SecurityIdentityMetaData jbossSecurityIdentity = null;
if (override != null && override.getSecurityIdentity() != null)
jbossSecurityIdentity = override.getSecurityIdentity();
SecurityIdentityMetaData originalSecurityIdentity = null;
if(original != null)
originalSecurityIdentity = original.getSecurityIdentity();
if(jbossSecurityIdentity != null || originalSecurityIdentity != null)
{
if(securityIdentity == null)
securityIdentity = new SecurityIdentityMetaData();
securityIdentity.merge(jbossSecurityIdentity, originalSecurityIdentity);
}
if(original instanceof JBossGenericBeanMetaData)
merge((JBossGenericBeanMetaData)original);