[jboss-cvs] JBossAS SVN: r66337 - in projects/metadata/trunk/src/main/java/org/jboss/metadata: common/javaee/ejb and 4 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Oct 22 16:38:01 EDT 2007


Author: scott.stark at jboss.org
Date: 2007-10-22 16:38:01 -0400 (Mon, 22 Oct 2007)
New Revision: 66337

Modified:
   projects/metadata/trunk/src/main/java/org/jboss/metadata/ApplicationMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/common/javaee/ejb/IEnterpriseBeanMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossAssemblyDescriptorMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossEnterpriseBeanMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossEnterpriseBeansMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossEntityBeanMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossEnvironmentRefsGroupMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossGenericBeanMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossMessageDrivenBeanMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossSessionBeanMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/spec/EnterpriseBeansMap.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/AbstractEJBReferenceMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/EJBLocalReferenceMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/EJBReferenceMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/MessageDestinationMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/MessageDestinationReferenceMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/MessageDestinationsMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/ResourceEnvironmentReferenceMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/ResourceInjectionMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/ResourceReferenceMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/ServiceReferenceMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/support/IdMetaDataImpl.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/support/NamedMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/support/ResourceInjectionMetaDataWithDescriptions.java
Log:
Update merge logic and expand jboss metadata

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/ApplicationMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/ApplicationMetaData.java	2007-10-22 20:36:35 UTC (rev 66336)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/ApplicationMetaData.java	2007-10-22 20:38:01 UTC (rev 66337)
@@ -81,6 +81,7 @@
    {
       JBossMetaData jbossMetaData = new JBossMetaData();
       jbossMetaData.setOverridenMetaData(delegate);
+      jbossMetaData.merge(null, delegate);
       return jbossMetaData;
    }
    

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/common/javaee/ejb/IEnterpriseBeanMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/common/javaee/ejb/IEnterpriseBeanMetaData.java	2007-10-22 20:36:35 UTC (rev 66336)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/common/javaee/ejb/IEnterpriseBeanMetaData.java	2007-10-22 20:38:01 UTC (rev 66337)
@@ -112,5 +112,5 @@
    public void setEnterpriseBeansMetaData(IEnterpriseBeansMetaData<?> data);
 
    //
-   public void merge(NamedMetaData merged, NamedMetaData original);
+   //public void merge(NamedMetaData merged, NamedMetaData original);
 }

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossAssemblyDescriptorMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossAssemblyDescriptorMetaData.java	2007-10-22 20:36:35 UTC (rev 66336)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossAssemblyDescriptorMetaData.java	2007-10-22 20:38:01 UTC (rev 66337)
@@ -24,6 +24,7 @@
 import java.util.Collections;
 import java.util.Set;
 
+import org.jboss.metadata.common.javaee.ejb.IAssemblyDescriptorMetaData;
 import org.jboss.metadata.ejb.spec.ApplicationExceptionsMetaData;
 import org.jboss.metadata.ejb.spec.AssemblyDescriptorMetaData;
 import org.jboss.metadata.ejb.spec.ContainerTransactionsMetaData;
@@ -276,17 +277,17 @@
    }
 
    @Override
-   public void merge(IdMetaDataImpl mergedinput, IdMetaDataImpl original)
+   public void merge(IdMetaDataImpl override, IdMetaDataImpl original)
    {
-      // TODO Auto-generated method stub
-      super.merge(mergedinput, original);
-      JBossAssemblyDescriptorMetaData merged = (JBossAssemblyDescriptorMetaData) mergedinput;
+      super.merge(override, original);
+      JBossAssemblyDescriptorMetaData input = (JBossAssemblyDescriptorMetaData) override;
       AssemblyDescriptorMetaData assemblyDescriptorMetaData = (AssemblyDescriptorMetaData) original;
+      JBossAssemblyDescriptorMetaData merged = this;
 
       SecurityRolesMetaData securityRolesMetaData = null;
-      SecurityRolesMetaData jbossSecurityRolesMetaData = getSecurityRoles();
+      SecurityRolesMetaData jbossSecurityRolesMetaData = input.getSecurityRoles();
       MessageDestinationsMetaData messageDestinationsMetaData = null;
-      MessageDestinationsMetaData jbossMessageDestinationsMetaData = getMessageDestinations();
+      MessageDestinationsMetaData jbossMessageDestinationsMetaData = input.getMessageDestinations();
       if (assemblyDescriptorMetaData != null)
       {
          merged.setOverridenMetaData(assemblyDescriptorMetaData);
@@ -331,4 +332,25 @@
       }
       return x;
    }
+   public void merge(JBossAssemblyDescriptorMetaData merged, IAssemblyDescriptorMetaData assembly)
+   {
+      AssemblyDescriptorMetaData original = (AssemblyDescriptorMetaData) assembly;
+      super.merge(merged, original);
+      if(messageDestinations != null)
+      {
+         MessageDestinationsMetaData mergedMD = new MessageDestinationsMetaData();
+         messageDestinations.merge(mergedMD, original.getMessageDestinations());
+         merged.setMessageDestinations(mergedMD);
+      }
+      else if(original.getMessageDestinations() != null)
+         merged.setMessageDestinations(original.getMessageDestinations());
+      if(this.securityRoles != null)
+      {
+         SecurityRolesMetaData mergedSR = new SecurityRolesMetaData();
+         securityRoles.merge(mergedSR, original.getSecurityRoles());
+         merged.setSecurityRoles(mergedSR);
+      }
+      else if(original.getSecurityRoles() != null)
+         merged.setSecurityRoles(original.getSecurityRoles());
+   }
 }

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossEnterpriseBeanMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossEnterpriseBeanMetaData.java	2007-10-22 20:36:35 UTC (rev 66336)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossEnterpriseBeanMetaData.java	2007-10-22 20:38:01 UTC (rev 66337)
@@ -25,18 +25,22 @@
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 
 import org.jboss.metadata.common.javaee.ejb.IAssemblyDescriptorMetaData;
 import org.jboss.metadata.common.javaee.ejb.IEjbJarMetaData;
 import org.jboss.metadata.common.javaee.ejb.IEnterpriseBeanMetaData;
 import org.jboss.metadata.common.javaee.ejb.IEnterpriseBeansMetaData;
+import org.jboss.metadata.ejb.spec.ContainerTransactionMetaData;
 import org.jboss.metadata.ejb.spec.ContainerTransactionsMetaData;
 import org.jboss.metadata.ejb.spec.EjbJarMetaData;
 import org.jboss.metadata.ejb.spec.EnterpriseBeanMetaData;
 import org.jboss.metadata.ejb.spec.EntityBeanMetaData;
 import org.jboss.metadata.ejb.spec.ExcludeListMetaData;
 import org.jboss.metadata.ejb.spec.InterceptorBindingMetaData;
+import org.jboss.metadata.ejb.spec.MessageDrivenBeanMetaData;
 import org.jboss.metadata.ejb.spec.MethodInterfaceType;
+import org.jboss.metadata.ejb.spec.MethodMetaData;
 import org.jboss.metadata.ejb.spec.MethodPermissionMetaData;
 import org.jboss.metadata.ejb.spec.MethodPermissionsMetaData;
 import org.jboss.metadata.ejb.spec.SecurityIdentityMetaData;
@@ -105,6 +109,12 @@
    /** The enterprise bean container */
    private JBossEnterpriseBeansMetaData enterpriseBeansMetaData;
    
+   /** The mapped name */
+   private String mappedName;
+
+   /** The ejb class */
+   private String ejbClass;
+
    /** The local jndi name */
    private String localJndiName;
    
@@ -157,8 +167,38 @@
    
    /** The jndi refs */
    private JndiRefsMetaData jndiRefs;
+
+   /** The security identity */
+   private SecurityIdentityMetaData securityIdentity;
+
+   /** The cached container transactions */
+   private transient ContainerTransactionsMetaData cachedContainerTransactions;
    
+   /** The transaction type cache */
+   private transient ConcurrentHashMap<Method, TransAttributeType> methodTx; 
+   /** The transaction type */
+   private TransactionType transactionType;
+
    /**
+    * Create the correct JBossEnterpriseBeanMetaData for the input
+    * standard bean metadata.
+    * 
+    * @param bean the standard bean metadata
+    * @return the corresponding jboss extenstion metadata
+    */
+   static JBossEnterpriseBeanMetaData newBean(EnterpriseBeanMetaData bean)
+   {
+      JBossEnterpriseBeanMetaData jbean = null;
+      if(bean instanceof EntityBeanMetaData)
+         jbean = new JBossEntityBeanMetaData();
+      if(bean instanceof MessageDrivenBeanMetaData)
+         jbean = new JBossMessageDrivenBeanMetaData();
+      if(bean instanceof SessionBeanMetaData)
+         jbean = new JBossSessionBeanMetaData();
+      return jbean;
+   }
+
+   /**
     * Create a new EnterpriseBeanMetaData.
     */
    public JBossEnterpriseBeanMetaData()
@@ -252,94 +292,142 @@
       setName(ejbName);
    }
 
-   public ContainerTransactionsMetaData getContainerTransactions()
-   {
-      return ensureOverride().getContainerTransactions();
-   }
-
-   public DescriptionGroupMetaData getDescriptionGroup()
-   {
-      return ensureOverride().getDescriptionGroup();
-   }
-
    public String getEjbClass()
    {
-      return ensureOverride().getEjbClass();
+      return ejbClass;
    }
 
    public IEjbJarMetaData getEjbJarMetaData()
    {
-      return ensureOverride().getEjbJarMetaData();
+      return enterpriseBeansMetaData.getEjbJarMetaData();
    }
 
-   public ExcludeListMetaData getExcludeList()
+   /**
+    * Get the container transactions
+    * 
+    * @return the container transactions or null for no result
+    */
+   public ContainerTransactionsMetaData getContainerTransactions()
    {
-      return ensureOverride().getExcludeList();
+      if (cachedContainerTransactions != null)
+         return cachedContainerTransactions;
+      org.jboss.metadata.common.javaee.ejb.IAssemblyDescriptorMetaData assemblyDescriptor = getAssemblyDescriptor();
+      if (assemblyDescriptor == null)
+         return null;
+      return assemblyDescriptor.getContainerTransactionsByEjbName(getEjbName()); 
    }
 
-   public InterceptorBindingMetaData getInterceptorBinding()
+   /**
+    * Get the method transaction type
+    * 
+    * @param methodName the method name
+    * @param params the parameters
+    * @param iface the interface type
+    * @return the method transaction type
+    */
+   public TransAttributeType getMethodTransactionType(String methodName, Class[] params, MethodInterfaceType iface)
    {
-      return ensureOverride().getInterceptorBinding();
-   }
+      // default value
+      TransAttributeType result = null;
 
-   public String getMappedName()
-   {
-      return ensureOverride().getMappedName();
-   }
+      ContainerTransactionsMetaData containerTransactions = getContainerTransactions();
+      if (containerTransactions == null || containerTransactions.isEmpty())
+         return result;
 
-   public MethodPermissionsMetaData getMethodPermissions()
-   {
-      return ensureOverride().getMethodPermissions();
+      ContainerTransactionMetaData bestMatchTransaction = null;
+      MethodMetaData bestMatch = null;
+      for (ContainerTransactionMetaData transaction : containerTransactions)
+      {
+         MethodMetaData match = transaction.bestMatch(methodName, params, iface, bestMatch);
+         if (match != bestMatch)
+         {
+            bestMatchTransaction = transaction;
+            bestMatch = match;
+         }
+      }
+
+      if (bestMatchTransaction != null)
+         result = bestMatchTransaction.getTransAttribute();
+
+      return result;
    }
 
+   /**
+    * Get the transaction type
+    * 
+    * @param m the method
+    * @param iface the interface type
+    * @return the transaction type
+    */
    public TransAttributeType getMethodTransactionType(Method m, MethodInterfaceType iface)
    {
-      return ensureOverride().getMethodTransactionType(m, iface);
-   }
+      if (m == null)
+         return TransAttributeType.Supports;
 
-   public TransAttributeType getMethodTransactionType(String methodName, Class[] params, MethodInterfaceType iface)
-   {
-      return ensureOverride().getMethodTransactionType(methodName, params, iface);
-   }
+      TransAttributeType result = null;
+      if (methodTx != null)
+      {
+         result = methodTx.get(m);
+         if (result != null) 
+            return result;
+      }
 
-   public TransactionType getTransactionType()
-   {
-      return ensureOverride().getTransactionType();
-   }
+      result = getMethodTransactionType(m.getName(), m.getParameterTypes(), iface);
 
-   public boolean isBMT()
-   {
-      return ensureOverride().isBMT();
+      // provide default if method is not found in descriptor
+      if (result == null)
+         result = TransAttributeType.Required;
+
+      if (methodTx == null)
+         methodTx = new ConcurrentHashMap<Method, TransAttributeType>();
+      methodTx.put(m, result);
+      return result;
    }
 
-   public boolean isCMT()
+   /**
+    * Get the interceptor binding
+    * 
+    * @return the interceptor binding or null for no result
+    */
+   public InterceptorBindingMetaData getInterceptorBinding()
    {
-      return ensureOverride().isCMT();
+      org.jboss.metadata.common.javaee.ejb.IAssemblyDescriptorMetaData assemblyDescriptor = getAssemblyDescriptor();
+      if (assemblyDescriptor == null)
+         return null;
+      return assemblyDescriptor.getInterceptorBindingByEjbName(getEjbName()); 
    }
 
-   public void merge(NamedMetaData merged, NamedMetaData original)
+   /**
+    * Get the exclude list
+    * 
+    * @return the exclude list or null for no result
+    */
+   public ExcludeListMetaData getExcludeList()
    {
-      ensureOverride().merge(merged, original);
+      org.jboss.metadata.common.javaee.ejb.IAssemblyDescriptorMetaData assemblyDescriptor = getAssemblyDescriptor();
+      if (assemblyDescriptor == null)
+         return null;
+      return assemblyDescriptor.getExcludeListByEjbName(getEjbName()); 
    }
 
-   public void setDescriptionGroup(DescriptionGroupMetaData descriptionGroup)
+   public String getMappedName()
    {
-      ensureOverride().setDescriptionGroup(descriptionGroup);
+      return mappedName;
    }
 
    public void setEjbClass(String ejbClass)
    {
-      ensureOverride().setEjbClass(ejbClass);
+      this.ejbClass = ejbClass;
    }
 
    public void setMappedName(String mappedName)
    {
-      ensureOverride().setMappedName(mappedName);
+      this.mappedName = mappedName;
    }
 
    public void setSecurityIdentity(SecurityIdentityMetaData securityIdentity)
    {
-      ensureOverride().setSecurityIdentity(securityIdentity);
+      this.securityIdentity = securityIdentity;
    }
 
    /**
@@ -373,6 +461,40 @@
    }
 
    /**
+    * Is this container managed transactions
+    * 
+    * @return true when CMT
+    */
+   public boolean isCMT()
+   {
+      TransactionType type = getTransactionType();
+      if (type == null)
+         return true;
+      else
+         return type == TransactionType.Container;
+   }
+
+   /**
+    * Is this bean managed transactions
+    * 
+    * @return true when BMT
+    */
+   public boolean isBMT()
+   {
+      return isCMT() == false;
+   }
+
+   public TransactionType getTransactionType()
+   {
+      return transactionType;
+   }
+
+   public void setTransactionType(TransactionType transactionType)
+   {
+      this.transactionType = transactionType;
+   }
+
+   /**
     * Get the localJndiName.
     * 
     * @return the localJndiName.
@@ -740,40 +862,6 @@
       
       try
       {
-         mergedEnvironment = JBossEnvironmentRefsGroupMetaData.merge(jndiEnvironmentRefsGroup,
-               getOverridenMetaDataWithCheck().getJndiEnvironmentRefsGroup(),
-               this.getJBossMetaData().getResourceManagers(),
-               "ejb-jar.xml", "jboss.xml");
-
-         // Fixup the invoker binding references on ejb refs
-         InvokerBindingsMetaData invokerBindings = getInvokerBindings();
-         if (invokerBindings != null && invokerBindings.isEmpty() == false)
-         {
-            for (InvokerBindingMetaData invokerBinding : invokerBindings)
-            {
-               String ejbRefName = invokerBinding.getEjbRefName();
-               if (ejbRefName != null)
-               {
-                  EJBReferenceMetaData ejbRef = mergedEnvironment.getEjbReferenceByName(ejbRefName);
-                  if (ejbRef == null)
-                     throw new IllegalStateException("ejb-ref " + ejbRefName + " found on invoker " + invokerBinding.getName() + " but it does not exist for ejb: " + getName());
-                  ejbRef.addInvokerBinding(invokerBinding.getName(), invokerBinding.getJndiName());
-               }
-            }
-         }
-         
-         // Fixup the security identity
-         SecurityIdentityMetaData jbossSecurityIdentity = null;
-         if (jndiEnvironmentRefsGroup != null)
-            jbossSecurityIdentity = jndiEnvironmentRefsGroup.getSecurityIdentity();
-         SecurityIdentityMetaData originalSecurityIdentity = getOverridenMetaDataWithCheck().getSecurityIdentity();
-         SecurityIdentityMetaData mergedSecurityIdentity = jbossSecurityIdentity;
-         if (jbossSecurityIdentity == null)
-            mergedSecurityIdentity = originalSecurityIdentity;
-         else if  (originalSecurityIdentity != null)
-            mergedSecurityIdentity = jbossSecurityIdentity.merge(originalSecurityIdentity);
-         if (mergedSecurityIdentity != null)
-            mergedEnvironment.setSecurityIdentity(mergedSecurityIdentity);
       }
       catch (Exception e)
       {
@@ -1024,8 +1112,21 @@
       else
          return assemblyDescriptor.getSecurityRolePrincipals(roleName);
    }
-   
+
    /**
+    * Get the methods permissions
+    * 
+    * @return the method permissions or null for no result
+    */
+   public MethodPermissionsMetaData getMethodPermissions()
+   {
+      org.jboss.metadata.common.javaee.ejb.IAssemblyDescriptorMetaData assemblyDescriptor = getAssemblyDescriptor();
+      if (assemblyDescriptor == null)
+         return null;
+      return assemblyDescriptor.getMethodPermissionsByEjbName(getEjbName()); 
+   }
+
+   /**
     * A somewhat tedious method that builds a Set<Principal> of the roles
     * that have been assigned permission to execute the indicated method. The
     * work performed is tedious because of the wildcard style of declaring
@@ -1265,5 +1366,89 @@
       return getMethodTransactionTimeout(method.getName());
    }
 
-   protected abstract IEnterpriseBeanMetaData ensureOverride();
+   public void merge(JBossEnterpriseBeanMetaData override, EnterpriseBeanMetaData original)
+   {
+      JBossEnterpriseBeanMetaData merged = this;
+      if(override != null && override.getEjbClass() != null)
+         merged.setEjbClass(override.getEjbClass());
+      else if(original.getEjbClass() != null)
+         merged.setEjbClass(original.getEjbClass());
+      if(override != null && override.getName() != null)
+         merged.setName(override.getName());
+      else if(original.getName() != null)
+         merged.setName(original.getName());
+
+      if(override != null)
+      {
+         merged.setAopDomainName(override.aopDomainName);
+         merged.setConfigurationName(override.configurationName);
+         merged.setAnnotations(override.annotations);
+         merged.setDepends(override.depends);
+         merged.setExceptionOnRollback(override.exceptionOnRollback);
+         merged.setIgnoreDependency(override.ignoreDependency);
+         merged.setInvokerBindings(override.invokers);
+         merged.setIorSecurityConfig(override.iorSecurityConfig);
+         merged.setSecurityProxy(override.securityProxy);
+      }
+      merged.setOverridenMetaData(original);
+
+      merged.setJndiEnvironmentRefsGroup(new JBossEnvironmentRefsGroupMetaData());
+      EnvironmentRefsGroupMetaData env = original != null ? original.getJndiEnvironmentRefsGroup() : null;
+      JBossEnvironmentRefsGroupMetaData jenv = null;
+      ResourceManagersMetaData resourceMgrs = null;
+      if( override != null )
+      {
+         resourceMgrs = override.getJBossMetaData().getResourceManagers();
+         jenv = override.jndiEnvironmentRefsGroup;
+      }
+      merged.jndiEnvironmentRefsGroup.merge(jenv, env, resourceMgrs);
+
+      // Fixup the invoker binding references on ejb refs
+      InvokerBindingsMetaData invokerBindings = getInvokerBindings();
+      if (invokerBindings != null && invokerBindings.isEmpty() == false)
+      {
+         for (InvokerBindingMetaData invokerBinding : invokerBindings)
+         {
+            String ejbRefName = invokerBinding.getEjbRefName();
+            if (ejbRefName != null)
+            {
+               EJBReferenceMetaData ejbRef = mergedEnvironment.getEjbReferenceByName(ejbRefName);
+               if (ejbRef == null)
+                  throw new IllegalStateException("ejb-ref " + ejbRefName + " found on invoker " + invokerBinding.getName() + " but it does not exist for ejb: " + getName());
+               ejbRef.addInvokerBinding(invokerBinding.getName(), invokerBinding.getJndiName());
+            }
+         }
+      }
+      
+      // Fixup the security identity
+      SecurityIdentityMetaData jbossSecurityIdentity = null;
+      if (jndiEnvironmentRefsGroup != null)
+         jbossSecurityIdentity = jndiEnvironmentRefsGroup.getSecurityIdentity();
+      SecurityIdentityMetaData originalSecurityIdentity = null;
+      if(original != null)
+         originalSecurityIdentity = original.getSecurityIdentity();
+      SecurityIdentityMetaData mergedSecurityIdentity = jbossSecurityIdentity;
+      if (jbossSecurityIdentity == null)
+         mergedSecurityIdentity = originalSecurityIdentity;
+      else if  (originalSecurityIdentity != null)
+         mergedSecurityIdentity = jbossSecurityIdentity.merge(originalSecurityIdentity);
+      if (mergedSecurityIdentity != null)
+         mergedEnvironment.setSecurityIdentity(mergedSecurityIdentity);
+
+      // TODO, all fields
+   }
+
+   /**
+    * Get the assembly descriptor
+    * 
+    * @return the ejbJarMetaData.
+    */
+   protected IAssemblyDescriptorMetaData getAssemblyDescriptor()
+   {
+      IEjbJarMetaData ejbJar = getEjbJarMetaData();
+      if (ejbJar == null)
+         return null;
+      return ejbJar.getAssemblyDescriptor();
+   }
+   
 }

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossEnterpriseBeansMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossEnterpriseBeansMetaData.java	2007-10-22 20:36:35 UTC (rev 66336)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossEnterpriseBeansMetaData.java	2007-10-22 20:38:01 UTC (rev 66337)
@@ -111,4 +111,29 @@
    {
       jbossMetaData = (JBossMetaData) ejbJarMetaData;
    }
+
+   /**
+    * Merge override + original into this
+    * @param override
+    * @param original
+    */
+   public void merge(JBossEnterpriseBeansMetaData override, IEnterpriseBeansMetaData<EnterpriseBeanMetaData> original)
+   {
+      if(original == null && override != null)
+         addAll(override);
+      else if(original != null)
+      {
+         for(EnterpriseBeanMetaData ejb : original)
+         {
+            JBossEnterpriseBeanMetaData jejb = null;
+            if( override != null )
+               jejb = override.get(ejb.getEjbName());
+            JBossEnterpriseBeanMetaData mergedEJB = JBossEnterpriseBeanMetaData.newBean(ejb);
+            mergedEJB.merge(jejb, ejb);
+            this.add(mergedEJB);
+         }
+      }
+   }
+
+
 }

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossEntityBeanMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossEntityBeanMetaData.java	2007-10-22 20:36:35 UTC (rev 66336)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossEntityBeanMetaData.java	2007-10-22 20:38:01 UTC (rev 66337)
@@ -374,12 +374,5 @@
       cacheInvalidationConfig.setEntityBean(this);
       this.cacheInvalidationConfig = cacheInvalidationConfig;
    }
-
-   @Override
-   protected IEnterpriseBeanMetaData ensureOverride()
-   {
-      return ensureOverride(EntityBeanMetaData.class);
-   }
-
    
 }

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossEnvironmentRefsGroupMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossEnvironmentRefsGroupMetaData.java	2007-10-22 20:36:35 UTC (rev 66336)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossEnvironmentRefsGroupMetaData.java	2007-10-22 20:38:01 UTC (rev 66337)
@@ -168,6 +168,115 @@
    }
 
    /**
+    * Merge an environment
+    * 
+    * @param jbossEnvironmentRefsGroup the override environment
+    * @param environmentRefsGroup the overriden environment
+    * @param overridenFile the overriden file name
+    * @param overrideFile the override file
+    * @return the merged environment
+    */
+   public void merge(JBossEnvironmentRefsGroupMetaData jbossEnvironmentRefsGroup,
+            EnvironmentRefsGroupMetaData environmentRefsGroup,
+            ResourceManagersMetaData resourceMgrs)
+   {
+      JBossEnvironmentRefsGroupMetaData merged = this;
+      
+      if (jbossEnvironmentRefsGroup == null && environmentRefsGroup == null)
+         return;
+
+      EnvironmentEntriesMetaData envEntries = null;
+      EJBReferencesMetaData ejbRefs = null;
+      EJBReferencesMetaData jbossEjbRefs = null;
+      EJBLocalReferencesMetaData ejbLocalRefs = null;
+      EJBLocalReferencesMetaData jbossEjbLocalRefs = null;
+      ResourceReferencesMetaData resRefs = null;
+      ResourceReferencesMetaData jbossResRefs = null;
+      ResourceEnvironmentReferencesMetaData resEnvRefs = null;
+      ResourceEnvironmentReferencesMetaData jbossResEnvRefs = null;
+      MessageDestinationReferencesMetaData messageDestinationRefs = null;
+      MessageDestinationReferencesMetaData jbossMessageDestinationRefs = null;
+      PersistenceContextReferencesMetaData persistenceContextRefs = null;
+      PersistenceUnitReferencesMetaData persistenceUnitRefs = null;
+      LifecycleCallbacksMetaData postConstructs = null;
+      LifecycleCallbacksMetaData preDestroys = null;
+      
+      if (environmentRefsGroup != null)
+      {
+         envEntries = environmentRefsGroup.getEnvironmentEntries();
+         ejbRefs = environmentRefsGroup.getEjbReferences();
+         ejbLocalRefs = environmentRefsGroup.getEjbLocalReferences();
+         // ServiceRefs
+         resRefs = environmentRefsGroup.getResourceReferences();
+         resEnvRefs = environmentRefsGroup.getResourceEnvironmentReferences();
+         messageDestinationRefs = environmentRefsGroup.getMessageDestinationReferences();
+         persistenceContextRefs = environmentRefsGroup.getPersistenceContextRefs();
+         persistenceUnitRefs = environmentRefsGroup.getPersistenceUnitRefs();
+         postConstructs = environmentRefsGroup.getPostConstructs();
+         preDestroys = environmentRefsGroup.getPreDestroys();
+      }
+      
+      if (jbossEnvironmentRefsGroup != null)
+      {
+         jbossEjbRefs = jbossEnvironmentRefsGroup.getEjbReferences();
+         jbossEjbLocalRefs = jbossEnvironmentRefsGroup.getEjbLocalReferences();
+         jbossResRefs = jbossEnvironmentRefsGroup.getResourceReferences();
+         jbossResEnvRefs = jbossEnvironmentRefsGroup.getResourceEnvironmentReferences();
+         jbossMessageDestinationRefs = jbossEnvironmentRefsGroup.getMessageDestinationReferences();
+      }
+      
+      EJBReferencesMetaData mergedEjbRefs = EJBReferencesMetaData.merge(jbossEjbRefs, ejbRefs, "ejb-jar.xml", "jboss.xml");
+      if (mergedEjbRefs != null)
+         merged.setEjbReferences(mergedEjbRefs);
+      
+      EJBLocalReferencesMetaData mergedEjbLocalRefs = EJBLocalReferencesMetaData.merge(jbossEjbLocalRefs, ejbLocalRefs, "ejb-jar.xml", "jboss.xml");
+      if (mergedEjbLocalRefs != null)
+         merged.setEjbLocalReferences(mergedEjbLocalRefs);
+      
+      // Need to set the jndi name from resource mgr if referenced
+      if(jbossResRefs != null && resourceMgrs != null)
+      {
+         for(ResourceReferenceMetaData ref : jbossResRefs)
+         {
+            ResourceManagerMetaData mgr = resourceMgrs.get(ref.getResourceName());
+            if(mgr != null)
+            {
+               if(mgr.getResJndiName() != null)
+                  ref.setJndiName(mgr.getResJndiName());
+               else if(mgr.getResUrl() != null)
+                  ref.setResUrl(mgr.getResUrl());
+            }
+         }
+      }
+      ResourceReferencesMetaData mergedResRefs = ResourceReferencesMetaData.merge(jbossResRefs, resRefs, "ejb-jar.xml", "jboss.xml");
+      if (mergedResRefs != null)
+         merged.setResourceReferences(mergedResRefs);
+
+      ResourceEnvironmentReferencesMetaData mergedResEnvRefs = ResourceEnvironmentReferencesMetaData.merge(jbossResEnvRefs, resEnvRefs, "ejb-jar.xml", "jboss.xml");
+      if (mergedResEnvRefs != null)
+         merged.setResourceEnvironmentReferences(mergedResEnvRefs);
+
+      MessageDestinationReferencesMetaData mergedMessageDestinationRefs = MessageDestinationReferencesMetaData.merge(jbossMessageDestinationRefs, messageDestinationRefs, "ejb-jar.xml", "jboss.xml");
+      if (mergedMessageDestinationRefs != null)
+         merged.setMessageDestinationReferences(mergedMessageDestinationRefs);
+      
+      if (envEntries != null)
+         merged.setEnvironmentEntries(envEntries);
+      
+      if (persistenceContextRefs != null)
+         merged.setPersistenceContextRefs(persistenceContextRefs);
+      
+      if (persistenceUnitRefs != null)
+         merged.setPersistenceUnitRefs(persistenceUnitRefs);
+      
+      if (postConstructs != null)
+         merged.setPostConstructs(postConstructs);
+      
+      if (preDestroys != null)
+         merged.setPreDestroys(preDestroys);
+   }
+
+   /**
     * Get the securityIdentity.
     * 
     * @return the securityIdentity.

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossGenericBeanMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossGenericBeanMetaData.java	2007-10-22 20:36:35 UTC (rev 66336)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossGenericBeanMetaData.java	2007-10-22 20:38:01 UTC (rev 66337)
@@ -57,9 +57,4 @@
       return null;
    }
 
-   @Override
-   protected IEnterpriseBeanMetaData ensureOverride()
-   {
-      return new JBossGenericBeanMetaData();
-   }
 }

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossMessageDrivenBeanMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossMessageDrivenBeanMetaData.java	2007-10-22 20:36:35 UTC (rev 66336)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossMessageDrivenBeanMetaData.java	2007-10-22 20:38:01 UTC (rev 66337)
@@ -295,11 +295,5 @@
          throw new IllegalArgumentException("Null ejbTimeoutIdentity");
       this.ejbTimeoutIdentity = ejbTimeoutIdentity;
    }
-
-   @Override
-   protected IEnterpriseBeanMetaData ensureOverride()
-   {
-      return ensureOverride(MessageDrivenBeanMetaData.class);
-   }
    
 }

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossMetaData.java	2007-10-22 20:36:35 UTC (rev 66336)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossMetaData.java	2007-10-22 20:38:01 UTC (rev 66337)
@@ -26,6 +26,8 @@
 import org.jboss.metadata.common.javaee.ejb.IEnterpriseBeanMetaData;
 import org.jboss.metadata.common.javaee.ejb.IEnterpriseBeansMetaData;
 import org.jboss.metadata.common.jboss.LoaderRepositoryMetaData;
+import org.jboss.metadata.ejb.spec.EjbJarMetaData;
+import org.jboss.metadata.ejb.spec.EnterpriseBeanMetaData;
 import org.jboss.metadata.ejb.spec.RelationsMetaData;
 import org.jboss.metadata.javaee.support.IdMetaDataImplWithDescriptionGroupWithOverride;
 import org.jboss.logging.Logger;
@@ -83,15 +85,9 @@
    /** The enterprise beans */
    private JBossEnterpriseBeansMetaData enterpriseBeans;
    
-   /** The merged enterprise beans */
-   private JBossEnterpriseBeansMetaData mergedEnterpriseBeans;
-   
    /** The assembly descriptor */
    private JBossAssemblyDescriptorMetaData assemblyDescriptor;
    
-   /** The merged assembly descriptor */
-   private JBossAssemblyDescriptorMetaData mergedAssemblyDescriptor;
-   
    /** The resource manager */
    private ResourceManagersMetaData resourceManagers;
    
@@ -561,4 +557,43 @@
          throw new IllegalArgumentException("Null assemblyDescriptor");
       this.assemblyDescriptor = assemblyDescriptor;
    }
+
+
+   /**
+    * Merge the contents of override with original into this.
+    * 
+    * @param override data which overrides original
+    * @param original the original data
+    */
+   public void merge(JBossMetaData override, EjbJarMetaData original)
+   {
+      super.merge(override, original);
+      setAssemblyDescriptor(new JBossAssemblyDescriptorMetaData());
+      if(override != null && override.assemblyDescriptor != null)
+      {
+         assemblyDescriptor.merge(override.assemblyDescriptor, original.getAssemblyDescriptor());
+      }
+      else if(original != null && original.getAssemblyDescriptor() != null)
+      {
+         assemblyDescriptor.merge(null, original);
+      }
+
+      setEnterpriseBeans(new JBossEnterpriseBeansMetaData());
+      JBossEnterpriseBeansMetaData jbeans = null;
+      if(override != null)
+         jbeans = override.enterpriseBeans;
+      IEnterpriseBeansMetaData<EnterpriseBeanMetaData> beans = null;
+      if(original != null)
+         beans = original.getEnterpriseBeans();
+      enterpriseBeans.merge(jbeans, beans);
+   }
+
+   /**
+    * 
+    * @return
+    */
+   protected JBossEnterpriseBeanMetaData newBean()
+   {
+      return null;
+   }
 }

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossSessionBeanMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossSessionBeanMetaData.java	2007-10-22 20:36:35 UTC (rev 66336)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossSessionBeanMetaData.java	2007-10-22 20:38:01 UTC (rev 66337)
@@ -364,10 +364,5 @@
          throw new IllegalArgumentException("Null remoteBinding");
       this.remoteBinding = remoteBinding;
    }
-
-   @Override
-   protected IEnterpriseBeanMetaData ensureOverride()
-   {
-      return ensureOverride(SessionBeanMetaData.class);
-   }  
+ 
 }

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/spec/EnterpriseBeansMap.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/spec/EnterpriseBeansMap.java	2007-10-22 20:36:35 UTC (rev 66336)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/spec/EnterpriseBeansMap.java	2007-10-22 20:38:01 UTC (rev 66337)
@@ -48,6 +48,9 @@
    public boolean add(T o)
    {
       o.setEnterpriseBeansMetaData(this);
+      String key = o.getKey();
+      if(key == null)
+         throw new IllegalStateException("Null name for bean: "+o);
       return map.put(o.getKey(), o) == null;
    }
 

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/AbstractEJBReferenceMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/AbstractEJBReferenceMetaData.java	2007-10-22 20:36:35 UTC (rev 66336)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/AbstractEJBReferenceMetaData.java	2007-10-22 20:38:01 UTC (rev 66337)
@@ -132,21 +132,21 @@
    }
    
    /**
-    * Merge
+    * Merge the contents of override with original into this.
     * 
-    * @param merged the data to merge into
+    * @param override data which overrides original
     * @param original the original data
     */
-   public void merge(AbstractEJBReferenceMetaData merged, AbstractEJBReferenceMetaData original)
+   public void merge(AbstractEJBReferenceMetaData override, AbstractEJBReferenceMetaData original)
    {
-      super.merge(merged, original);
-      if (type != null)
-         merged.setEjbRefType(type);
+      super.merge(override, original);
+      if (override.type != null)
+         setEjbRefType(override.type);
       else if (original.type != null)
-         merged.setEjbRefType(original.type);
-      if (link != null)
-         merged.setLink(link);
+         setEjbRefType(original.type);
+      if (override.link != null)
+         setLink(override.link);
       else if (original.link != null)
-         merged.setLink(original.link);
+         setLink(original.link);
    }
 }

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/EJBLocalReferenceMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/EJBLocalReferenceMetaData.java	2007-10-22 20:36:35 UTC (rev 66336)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/EJBLocalReferenceMetaData.java	2007-10-22 20:38:01 UTC (rev 66337)
@@ -105,21 +105,21 @@
    }
    
    /**
-    * Merge
+    * Merge the contents of override with original into this.
     * 
-    * @param merged the data to merge into
+    * @param override data which overrides original
     * @param original the original data
     */
-   public void merge(EJBLocalReferenceMetaData merged, EJBLocalReferenceMetaData original)
+   public void merge(EJBLocalReferenceMetaData override, EJBLocalReferenceMetaData original)
    {
-      super.merge(merged, original);
-      if (localHome != null)
-         merged.setLocalHome(localHome);
+      super.merge(override, original);
+      if (override != null && override.localHome != null)
+         setLocalHome(override.localHome);
       else if (original.localHome != null)
-         merged.setLocalHome(original.localHome);
-      if (local != null)
-         merged.setLocal(local);
+         setLocalHome(original.localHome);
+      if (override != null && override.local != null)
+         setLocal(local);
       else if (original.local != null)
-         merged.setLocal(original.local);
+         setLocal(original.local);
    }
 }

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/EJBReferenceMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/EJBReferenceMetaData.java	2007-10-22 20:36:35 UTC (rev 66336)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/EJBReferenceMetaData.java	2007-10-22 20:38:01 UTC (rev 66337)
@@ -134,26 +134,26 @@
    public EJBReferenceMetaData merge(EJBReferenceMetaData original)
    {
       EJBReferenceMetaData merged = new EJBReferenceMetaData();
-      merge(merged, original);
+      merged.merge(this, original);
       return merged;
    }
    
    /**
-    * Merge
+    * Merge the contents of override with original into this.
     * 
-    * @param merged the data to merge into
+    * @param override data which overrides original
     * @param original the original data
     */
-   public void merge(EJBReferenceMetaData merged, EJBReferenceMetaData original)
+   public void merge(EJBReferenceMetaData override, EJBReferenceMetaData original)
    {
-      super.merge(merged, original);
-      if (home != null)
-         merged.setHome(home);
+      super.merge(override, original);
+      if (override != null && override.home != null)
+         setHome(override.home);
       else if (original.home != null)
-         merged.setHome(original.home);
-      if (remote != null)
-         merged.setRemote(remote);
+         setHome(original.home);
+      if (override != null && override.remote != null)
+         setRemote(override.remote);
       else if (original.remote != null)
-         merged.setRemote(original.remote);
+         setRemote(original.remote);
    }
 }

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/MessageDestinationMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/MessageDestinationMetaData.java	2007-10-22 20:36:35 UTC (rev 66336)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/MessageDestinationMetaData.java	2007-10-22 20:38:01 UTC (rev 66337)
@@ -122,22 +122,22 @@
    public MessageDestinationMetaData merge(MessageDestinationMetaData original)
    {
       MessageDestinationMetaData merged = new MessageDestinationMetaData();
-      merge(merged, original);
+      merged.merge(this, original);
       return merged;
    }
 
    /**
-    * Merge
+    * Merge the contents of override with original into this.
     * 
-    * @param merged the data to merge into
+    * @param override data which overrides original
     * @param original the original data
     */
-   public void merge(MessageDestinationMetaData merged, MessageDestinationMetaData original)
+   public void merge(MessageDestinationMetaData override, MessageDestinationMetaData original)
    {
-      super.merge(merged, original);
-      if (mappedName != null)
-         merged.setMappedName(mappedName);
+      super.merge(override, original);
+      if (override != null && override.mappedName != null)
+         setMappedName(override.mappedName);
       else if (original.mappedName != null)
-         merged.setMappedName(original.mappedName);
+         setMappedName(original.mappedName);
    }
 }

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/MessageDestinationReferenceMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/MessageDestinationReferenceMetaData.java	2007-10-22 20:36:35 UTC (rev 66336)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/MessageDestinationReferenceMetaData.java	2007-10-22 20:38:01 UTC (rev 66337)
@@ -152,30 +152,30 @@
    public MessageDestinationReferenceMetaData merge(MessageDestinationReferenceMetaData original)
    {
       MessageDestinationReferenceMetaData merged = new MessageDestinationReferenceMetaData();
-      merge(merged, original);
+      merged.merge(this, original);
       return merged;
    }
    
    /**
-    * Merge
+    * Merge the contents of override with original into this.
     * 
-    * @param merged the data to merge into
+    * @param override data which overrides original
     * @param original the original data
     */
-   public void merge(MessageDestinationReferenceMetaData merged, MessageDestinationReferenceMetaData original)
+   public void merge(MessageDestinationReferenceMetaData override, MessageDestinationReferenceMetaData original)
    {
-      super.merge(merged, original);
-      if (type != null)
-         merged.setType(type);
+      super.merge(override, original);
+      if (override != null && override.type != null)
+         setType(override.type);
       else if (original.type != null)
-         merged.setType(original.type);
-      if (usage != null)
-         merged.setMessageDestinationUsage(usage);
+         setType(original.type);
+      if (override != null && usage != null)
+         setMessageDestinationUsage(override.usage);
       else if (original.usage != null)
-         merged.setMessageDestinationUsage(original.usage);
-      if (link != null)
-         merged.setLink(link);
+         setMessageDestinationUsage(original.usage);
+      if (override != null && link != null)
+         setLink(override.link);
       else if (original.link != null)
-         merged.setLink(original.link);
+         setLink(original.link);
    }
 }

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/MessageDestinationsMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/MessageDestinationsMetaData.java	2007-10-22 20:36:35 UTC (rev 66336)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/MessageDestinationsMetaData.java	2007-10-22 20:38:01 UTC (rev 66337)
@@ -41,4 +41,20 @@
    {
       super("message destination name");
    }
+
+   public void merge(MessageDestinationsMetaData merged, MessageDestinationsMetaData original)
+   {
+      if(original == null || original.size() == 0)
+         merged.addAll(this);
+      else
+      {
+         for(MessageDestinationMetaData md : this)
+         {
+            MessageDestinationMetaData mergedMD = new MessageDestinationMetaData();
+            MessageDestinationMetaData mdOrig = original.get(md.getMessageDestinationName());
+            if(mdOrig != null)
+               md.merge(mergedMD, mdOrig);
+         }
+      }
+   }
 }

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/ResourceEnvironmentReferenceMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/ResourceEnvironmentReferenceMetaData.java	2007-10-22 20:36:35 UTC (rev 66336)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/ResourceEnvironmentReferenceMetaData.java	2007-10-22 20:38:01 UTC (rev 66337)
@@ -101,22 +101,22 @@
    public ResourceEnvironmentReferenceMetaData merge(ResourceEnvironmentReferenceMetaData original)
    {
       ResourceEnvironmentReferenceMetaData merged = new ResourceEnvironmentReferenceMetaData();
-      merge(merged, original);
+      merged.merge(this, original);
       return merged;
    }
    
    /**
-    * Merge
+    * Merge the contents of override with original into this.
     * 
-    * @param merged the data to merge into
+    * @param override data which overrides original
     * @param original the original data
     */
-   public void merge(ResourceEnvironmentReferenceMetaData merged, ResourceEnvironmentReferenceMetaData original)
+   public void merge(ResourceEnvironmentReferenceMetaData override, ResourceEnvironmentReferenceMetaData original)
    {
-      super.merge(merged, original);
-      if (type != null)
-         merged.setType(type);
-      else if (original.type != null)
-         merged.setType(original.type);
+      super.merge(override, original);
+      if (override != null && override.type != null)
+         setType(override.type);
+      else if (original != null && original.type != null)
+         setType(original.type);
    }
 }

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/ResourceInjectionMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/ResourceInjectionMetaData.java	2007-10-22 20:36:35 UTC (rev 66336)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/ResourceInjectionMetaData.java	2007-10-22 20:38:01 UTC (rev 66337)
@@ -168,29 +168,27 @@
    }
    
    /**
-    * Merge
+    * Merge the contents of override with original into this.
     * 
-    * @param merged the data to merge into
+    * @param override data which overrides original
     * @param original the original data
-    * @throws IllegalArgumentException for a null merged or original
-    * @throws IllegalStateException if neither have a name
     */
-   public void merge(ResourceInjectionMetaData merged, ResourceInjectionMetaData original)
+   public void merge(ResourceInjectionMetaData override, ResourceInjectionMetaData original)
    {
-      super.merge(merged, original);
-      if (mappedName != null)
-         merged.setMappedName(mappedName);
+      super.merge(override, original);
+      if (override != null && override.mappedName != null)
+         setMappedName(override.mappedName);
       else if (original.mappedName != null)
-         merged.setMappedName(original.mappedName);
-      if (ignoreDependency != null)
-         merged.setIgnoreDependency(ignoreDependency);
+         setMappedName(original.mappedName);
+      if (override != null && override.ignoreDependency != null)
+         setIgnoreDependency(override.ignoreDependency);
       else if (original.ignoreDependency != null)
-         merged.setIgnoreDependency(original.ignoreDependency);
+         setIgnoreDependency(original.ignoreDependency);
       
       // TODO proper merge
-      if (injectionTargets != null)
-         merged.setInjectionTargets(injectionTargets);
+      if (override != null && override.injectionTargets != null)
+         setInjectionTargets(override.injectionTargets);
       else if (original.injectionTargets != null)
-         merged.setInjectionTargets(original.injectionTargets);
+         setInjectionTargets(original.injectionTargets);
    }
 }

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/ResourceReferenceMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/ResourceReferenceMetaData.java	2007-10-22 20:36:35 UTC (rev 66336)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/ResourceReferenceMetaData.java	2007-10-22 20:38:01 UTC (rev 66337)
@@ -184,35 +184,35 @@
    public ResourceReferenceMetaData merge(ResourceReferenceMetaData original)
    {
       ResourceReferenceMetaData merged = new ResourceReferenceMetaData();
-      merge(merged, original);
+      merged.merge(this, original);
       return merged;
    }
    
    /**
-    * Merge
+    * Merge the contents of override with original into this.
     * 
-    * @param merged the data to merge into
+    * @param override data which overrides original
     * @param original the original data
     */
-   public void merge(ResourceReferenceMetaData merged, ResourceReferenceMetaData original)
+   public void merge(ResourceReferenceMetaData override, ResourceReferenceMetaData original)
    {
-      super.merge(merged, original);
-      if (type != null)
-         merged.setType(type);
+      super.merge(override, original);
+      if (override != null && override.type != null)
+         setType(override.type);
       else if (original.type != null)
-         merged.setType(original.type);
-      if (resourceName != null)
-         merged.setResourceName(resourceName);
+         setType(original.type);
+      if (override != null && override.resourceName != null)
+         setResourceName(override.resourceName);
       else if(original.resourceName != null)
-         merged.setResourceName(original.resourceName);
-      if (authority != null)
-         merged.setResAuth(authority);
+         setResourceName(original.resourceName);
+      if (override != null && override.authority != null)
+         setResAuth(override.authority);
       else if (original.authority != null)
-         merged.setResAuth(original.authority);
-      if (sharingScope != null)
-         merged.setResSharingScope(sharingScope);
+         setResAuth(original.authority);
+      if (override != null && override.sharingScope != null)
+         setResSharingScope(override.sharingScope);
       else if (original.sharingScope != null)
-         merged.setResSharingScope(original.sharingScope);
+         setResSharingScope(original.sharingScope);
    }
 
    /**

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/ServiceReferenceMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/ServiceReferenceMetaData.java	2007-10-22 20:36:35 UTC (rev 66336)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/ServiceReferenceMetaData.java	2007-10-22 20:38:01 UTC (rev 66337)
@@ -77,51 +77,51 @@
    public ServiceReferenceMetaData merge(ServiceReferenceMetaData original)
    {
       ServiceReferenceMetaData merged = new ServiceReferenceMetaData();
-      merge(merged, original);
+      merged.merge(this, original);
       return merged;
    }
 
    /**
-    * Merge
+    * Merge the contents of override with original into this.
     * 
-    * @param merged the data to merge into
+    * @param override data which overrides original
     * @param original the original data
     */
-   public void merge(ServiceReferenceMetaData merged, ServiceReferenceMetaData original)
+   public void merge(ServiceReferenceMetaData override, ServiceReferenceMetaData original)
    {
-      super.merge(merged, original);
-      if (serviceInterface != null)
-         merged.setServiceInterface(serviceInterface);
+      super.merge(override, original);
+      if (override != null && override.serviceInterface != null)
+         setServiceInterface(override.serviceInterface);
       else if (original.serviceInterface != null)
-         merged.setServiceInterface(original.serviceInterface);
-      if(serviceRefType != null)
-         merged.setServiceRefType(serviceRefType);
+         setServiceInterface(original.serviceInterface);
+      if(override != null && override.serviceRefType != null)
+         setServiceRefType(override.serviceRefType);
       else if (original.serviceRefType != null)
-         merged.setServiceRefType(original.serviceRefType);
-      if(wsdlFile != null)
-         merged.setWsdlFile(wsdlFile);
+         setServiceRefType(original.serviceRefType);
+      if(override != null && override.wsdlFile != null)
+         setWsdlFile(override.wsdlFile);
       else if (original.wsdlFile != null)
-         merged.setWsdlFile(original.wsdlFile);
-      if(jaxrpcMappingFile != null)
-         merged.setJaxrpcMappingFile(jaxrpcMappingFile);
+         setWsdlFile(original.wsdlFile);
+      if(override != null && override.jaxrpcMappingFile != null)
+         setJaxrpcMappingFile(override.jaxrpcMappingFile);
       else if (original.jaxrpcMappingFile != null)
-         merged.setJaxrpcMappingFile(original.jaxrpcMappingFile);
-      if(serviceQname != null)
-         merged.setServiceQname(serviceQname);
+         setJaxrpcMappingFile(original.jaxrpcMappingFile);
+      if(override != null && override.serviceQname != null)
+         setServiceQname(override.serviceQname);
       else if (original.serviceQname != null)
-         merged.setServiceQname(original.serviceQname);
-      if(portComponentRef != null)
-         merged.setPortComponentRef(portComponentRef);
+         setServiceQname(original.serviceQname);
+      if(override != null && override.portComponentRef != null)
+         setPortComponentRef(override.portComponentRef);
       else if (original.portComponentRef != null)
-         merged.setPortComponentRef(original.portComponentRef);
-      if(handlers != null)
-         merged.setHandlers(handlers);
+         setPortComponentRef(original.portComponentRef);
+      if(override != null && override.handlers != null)
+         setHandlers(override.handlers);
       else if (original.handlers != null)
-         merged.setHandlers(original.handlers);
-      if(handlerChains != null)
-         merged.setHandlerChains(handlerChains);
+         setHandlers(original.handlers);
+      if(override != null && override.handlerChains != null)
+         setHandlerChains(override.handlerChains);
       else if (original.handlers != null)
-         merged.setHandlerChains(original.handlerChains);
+         setHandlerChains(original.handlerChains);
    }
 
    /**

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/support/IdMetaDataImpl.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/support/IdMetaDataImpl.java	2007-10-22 20:36:35 UTC (rev 66336)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/support/IdMetaDataImpl.java	2007-10-22 20:38:01 UTC (rev 66337)
@@ -74,22 +74,17 @@
    }
 
    /**
-    * Merge the contents of this with original to merged.
+    * Merge the contents of override with original into this.
     * 
-    * @param merged the data to merge into
+    * @param override data which overrides original
     * @param original the original data
-    * @throws IllegalArgumentException for a null merged or original
     */
-   public void merge(IdMetaDataImpl merged, IdMetaDataImpl original)
+   public void merge(IdMetaDataImpl override, IdMetaDataImpl original)
    {
-      if (merged == null)
-         throw new IllegalArgumentException("Null merged");
-      if (original == null)
-         throw new IllegalArgumentException("Null original");
-      if (id != null)
-         merged.setId(id);
-      else if (original.id != null)
-         merged.setId(original.id);
+      if (override != null && override.id != null)
+         setId(override.id);
+      else if (original != null && original.id != null)
+         setId(original.id);
    }
 
    @Override

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/support/NamedMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/support/NamedMetaData.java	2007-10-22 20:36:35 UTC (rev 66336)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/support/NamedMetaData.java	2007-10-22 20:38:01 UTC (rev 66337)
@@ -95,21 +95,21 @@
    }
    
    /**
-    * Merge
+    * Merge override + original into this
     * 
-    * @param merged the data to merge into
+    * @param override data which overrides original
     * @param original the original data
     * @throws IllegalArgumentException for a null merged or original
     * @throws IllegalStateException if neither have a name
     */
-   public void merge(NamedMetaData merged, NamedMetaData original)
+   public void merge(NamedMetaData override, NamedMetaData original)
    {
-      super.merge(merged, original);
-      if (name != null)
-         merged.setName(name);
+      super.merge(override, original);
+      if (override.name != null)
+         setName(override.name);
       else if (original.name != null)
-         merged.setName(original.name);
+         setName(original.name);
       else
-         throw new IllegalStateException("Neither the merged metadata " + merged + " or the original " + original + " have a name.");
+         throw new IllegalStateException("Neither the override metadata " + override + " or the original " + original + " have a name.");
    }
 }

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/support/ResourceInjectionMetaDataWithDescriptions.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/support/ResourceInjectionMetaDataWithDescriptions.java	2007-10-22 20:36:35 UTC (rev 66336)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/support/ResourceInjectionMetaDataWithDescriptions.java	2007-10-22 20:38:01 UTC (rev 66337)
@@ -65,12 +65,17 @@
       this.descriptions = descriptions;
    }
    
-   public void merge(ResourceInjectionMetaDataWithDescriptions merged, ResourceInjectionMetaDataWithDescriptions original)
+   /**
+    * Merge override + original into this.
+    * @param override
+    * @param original
+    */
+   public void merge(ResourceInjectionMetaDataWithDescriptions override, ResourceInjectionMetaDataWithDescriptions original)
    {
-      super.merge(merged, original);
-      if(descriptions != null)
-         merged.setDescriptions(descriptions);
+      super.merge(override, original);
+      if(override.descriptions != null)
+         setDescriptions(override.descriptions);
       else if(original.descriptions != null)
-         merged.setDescriptions(original.descriptions);
+         setDescriptions(original.descriptions);
    }
 }




More information about the jboss-cvs-commits mailing list