[jboss-cvs] JBossAS SVN: r66522 - in projects/metadata/trunk/src: main/java/org/jboss/metadata/ejb/jboss and 7 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Sun Oct 28 16:33:49 EDT 2007


Author: scott.stark at jboss.org
Date: 2007-10-28 16:33:49 -0400 (Sun, 28 Oct 2007)
New Revision: 66522

Added:
   projects/metadata/trunk/src/main/java/org/jboss/metadata/web/jboss/JBossServletMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/web/jboss/JBossServletsMetaData.java
   projects/metadata/trunk/src/test/resources/org/jboss/test/metadata/web/JBossWebApp24_testRunAsPrincipal.xml
   projects/metadata/trunk/src/test/resources/org/jboss/test/metadata/web/WebApp24_testRunAsPrincipal.xml
Modified:
   projects/metadata/trunk/src/main/java/org/jboss/metadata/client/jboss/JBossClientMetaData.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/JBossEnvironmentRefsGroupMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/jboss/JBossRemoteEnvironmentRefsGroupMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/jboss/JBossServiceReferencesMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/jboss/RunAsIdentityMetaData.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/EJBLocalReferencesMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/EJBReferencesMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/EnvironmentRefsGroupMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/MessageDestinationReferencesMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/PersistenceContextReferenceMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/PersistenceContextReferencesMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/RemoteEnvironmentRefsGroupMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/SecurityRoleMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/SecurityRoleRefMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/SecurityRoleRefsMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/SecurityRolesMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/merge/MergeUtil.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/web/jboss/JBossWebMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/web/spec/ServletMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/web/spec/WebMetaData.java
   projects/metadata/trunk/src/test/java/org/jboss/test/metadata/web/JBossWebApp24UnitTestCase.java
   projects/metadata/trunk/src/test/java/org/jboss/test/metadata/web/TomcatDeployerUnitTestCase.java
Log:
Add jboss servlet override, drop the WebMetaData override, and correct the run-as identity notion

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/client/jboss/JBossClientMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/client/jboss/JBossClientMetaData.java	2007-10-28 20:12:14 UTC (rev 66521)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/client/jboss/JBossClientMetaData.java	2007-10-28 20:33:49 UTC (rev 66522)
@@ -340,7 +340,7 @@
 
       if(jndiEnvironmentRefsGroup == null)
          jndiEnvironmentRefsGroup = new JBossEnvironmentRefsGroupMetaData();
-      jndiEnvironmentRefsGroup.merge(jbossEnv, specEnv, false);
+      jndiEnvironmentRefsGroup.merge(jbossEnv, specEnv, "jboss-client.xml", "application-client.xml", false);
 
       // Get the merged resource-env-refs
       ResourceEnvironmentReferencesMetaData resEnvRefs = jndiEnvironmentRefsGroup.getResourceEnvironmentReferences();

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-28 20:12:14 UTC (rev 66521)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossEnterpriseBeanMetaData.java	2007-10-28 20:33:49 UTC (rev 66522)
@@ -259,11 +259,15 @@
    }
    
    @XmlElement(type=JBossEnvironmentRefsGroupMetaData.class)
-   public void setJndiEnvironmentRefsGroup(Environment jndiEnvironmentRefsGroup)
+   public void setJndiEnvironmentRefsGroup(Environment env)
    {
-      if(this.jndiEnvironmentRefsGroup != null)
-         throw new IllegalArgumentException("jndiEnvironmentRefsGroup already set");
-      this.jndiEnvironmentRefsGroup = (JBossEnvironmentRefsGroupMetaData) jndiEnvironmentRefsGroup;
+      if (env == null)
+         throw new IllegalArgumentException("Null jndiEnvironmentRefsGroup");
+      JBossEnvironmentRefsGroupMetaData jenv = (JBossEnvironmentRefsGroupMetaData) env;
+      if(jndiEnvironmentRefsGroup != null)
+         jndiEnvironmentRefsGroup.merge(jenv, null, null, "jboss.xml", "ejb-jar.xml", false);
+      else
+         jndiEnvironmentRefsGroup = jenv;
    }
 
    /**
@@ -1365,7 +1369,8 @@
    {
       this.merge(override, original, "jboss.xml", "ejb-jar.xml", true);
    }
-   public void merge(JBossEnterpriseBeanMetaData override, EnterpriseBeanMetaData original, String overridenFile, String overrideFile, boolean mustOverride)
+   public void merge(JBossEnterpriseBeanMetaData override, EnterpriseBeanMetaData original,
+         String overrideFile, String overridenFile, boolean mustOverride)
    {
       super.merge(override, original);
       if(override != null && override.getEjbClass() != null)

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-28 20:12:14 UTC (rev 66521)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossEnvironmentRefsGroupMetaData.java	2007-10-28 20:33:49 UTC (rev 66522)
@@ -29,17 +29,11 @@
 import org.jboss.metadata.javaee.jboss.JBossServiceReferencesMetaData;
 import org.jboss.metadata.javaee.spec.EJBLocalReferenceMetaData;
 import org.jboss.metadata.javaee.spec.EJBLocalReferencesMetaData;
-import org.jboss.metadata.javaee.spec.EJBReferencesMetaData;
 import org.jboss.metadata.javaee.spec.Environment;
-import org.jboss.metadata.javaee.spec.EnvironmentEntriesMetaData;
 import org.jboss.metadata.javaee.spec.EnvironmentRefsGroupMetaData;
-import org.jboss.metadata.javaee.spec.LifecycleCallbacksMetaData;
-import org.jboss.metadata.javaee.spec.MessageDestinationReferencesMetaData;
 import org.jboss.metadata.javaee.spec.PersistenceContextReferenceMetaData;
 import org.jboss.metadata.javaee.spec.PersistenceContextReferencesMetaData;
-import org.jboss.metadata.javaee.spec.PersistenceUnitReferencesMetaData;
 import org.jboss.metadata.javaee.spec.RemoteEnvironmentRefsGroupMetaData;
-import org.jboss.metadata.javaee.spec.ResourceEnvironmentReferencesMetaData;
 import org.jboss.metadata.javaee.spec.ResourceReferenceMetaData;
 import org.jboss.metadata.javaee.spec.ResourceReferencesMetaData;
 import org.jboss.metadata.javaee.spec.ServiceReferencesMetaData;
@@ -73,11 +67,6 @@
    /** The persistence context reference */
    private PersistenceContextReferencesMetaData persistenceContextRefs;
 
-   /** The security identity
-   // This is only here because historically this was mixed in the environment xml
-   private SecurityIdentityMetaData securityIdentity;
-   */
-   
    /**
     * Merge an environment
     * 
@@ -90,7 +79,7 @@
    public static JBossEnvironmentRefsGroupMetaData mergeNew(JBossEnvironmentRefsGroupMetaData jbossEnvironmentRefsGroup,
             EnvironmentRefsGroupMetaData environmentRefsGroup,
             ResourceManagersMetaData resourceMgrs,
-            String overridenFile, String overrideFile, boolean mustOverride)
+            String overrideFile, String overridenFile, boolean mustOverride)
    {
       JBossEnvironmentRefsGroupMetaData merged = new JBossEnvironmentRefsGroupMetaData();
       
@@ -99,21 +88,22 @@
       return merged;
    }
 
-
    public EJBLocalReferenceMetaData getEjbLocalReferenceByName(String name)
    {
-      // TODO Auto-generated method stub
-      return null;
+      EJBLocalReferenceMetaData ref = null;
+      if(this.ejbLocalReferences != null)
+         ref = ejbLocalReferences.get(name);
+      return ref;
    }
 
-
    public PersistenceContextReferenceMetaData getPersistenceContextReferenceByName(String name)
    {
-      // TODO Auto-generated method stub
-      return null;
+      PersistenceContextReferenceMetaData ref = null;
+      if(this.persistenceContextRefs != null)
+         ref = persistenceContextRefs.get(name);
+      return ref;
    }
 
-
    public ServiceReferencesMetaData getServiceReferences()
    {
       return serviceReferences;
@@ -160,80 +150,45 @@
     * @param overrideFile the override file
     * @return the merged environment
     */
-   public void merge(JBossEnvironmentRefsGroupMetaData jbossEnvironmentRefsGroup,
-         Environment environmentRefsGroup,
-            ResourceManagersMetaData resourceMgrs,
-            String overridenFile, String overrideFile, boolean mustOverride)
+   public void merge(JBossEnvironmentRefsGroupMetaData jbossEnv,
+         Environment specEnv,
+         ResourceManagersMetaData resourceMgrs,
+         String overrideFile, String overridenFile, boolean mustOverride)
    {
-      if (jbossEnvironmentRefsGroup == null && environmentRefsGroup == null)
+      if (jbossEnv == null && specEnv == null)
          return;
 
-      EnvironmentEntriesMetaData envEntries = null;
-      EJBReferencesMetaData ejbRefs = null;
-      EJBReferencesMetaData jbossEjbRefs = null;
+      super.merge(jbossEnv, specEnv, overridenFile, overrideFile, mustOverride);
+
       EJBLocalReferencesMetaData ejbLocalRefs = null;
       EJBLocalReferencesMetaData jbossEjbLocalRefs = null;
-      ResourceReferencesMetaData resRefs = null;
-      ResourceReferencesMetaData jbossResRefs = null;
-      ResourceEnvironmentReferencesMetaData resEnvRefs = null;
-      ResourceEnvironmentReferencesMetaData jbossResEnvRefs = null;
-      ServiceReferencesMetaData serviceRefs = null;
-      JBossServiceReferencesMetaData jbossServiceRefs = null;      
-      MessageDestinationReferencesMetaData messageDestinationRefs = null;
-      MessageDestinationReferencesMetaData jbossMessageDestinationRefs = null;
-      PersistenceContextReferencesMetaData persistenceContextRefs = null;
-      PersistenceUnitReferencesMetaData persistenceUnitRefs = null;
-      LifecycleCallbacksMetaData postConstructs = null;
-      LifecycleCallbacksMetaData preDestroys = null;
-      
-      if (environmentRefsGroup != null)
+      PersistenceContextReferencesMetaData specPersistenceContextRefs = null;
+      PersistenceContextReferencesMetaData jbossPersistenceContextRefs = null;
+
+      if (specEnv != null)
       {
-         envEntries = environmentRefsGroup.getEnvironmentEntries();
-         ejbRefs = environmentRefsGroup.getEjbReferences();
-         ejbLocalRefs = environmentRefsGroup.getEjbLocalReferences();
-         serviceRefs = environmentRefsGroup.getServiceReferences();
-         resRefs = environmentRefsGroup.getResourceReferences();
-         resEnvRefs = environmentRefsGroup.getResourceEnvironmentReferences();
-         messageDestinationRefs = environmentRefsGroup.getMessageDestinationReferences();
-         persistenceContextRefs = environmentRefsGroup.getPersistenceContextRefs();
-         persistenceUnitRefs = environmentRefsGroup.getPersistenceUnitRefs();
-         postConstructs = environmentRefsGroup.getPostConstructs();
-         preDestroys = environmentRefsGroup.getPreDestroys();
+         ejbLocalRefs = specEnv.getEjbLocalReferences();
+         specPersistenceContextRefs = specEnv.getPersistenceContextRefs();
       }
       
-      if (jbossEnvironmentRefsGroup != null)
+      if (jbossEnv != null)
       {
-         jbossEjbRefs = jbossEnvironmentRefsGroup.getEjbReferences();
-         jbossEjbLocalRefs = jbossEnvironmentRefsGroup.getEjbLocalReferences();
-         jbossServiceRefs = jbossEnvironmentRefsGroup.serviceReferences;
-         jbossResRefs = jbossEnvironmentRefsGroup.getResourceReferences();
-         jbossResEnvRefs = jbossEnvironmentRefsGroup.getResourceEnvironmentReferences();
-         jbossMessageDestinationRefs = jbossEnvironmentRefsGroup.getMessageDestinationReferences();
+         jbossEjbLocalRefs = jbossEnv.getEjbLocalReferences();
+         jbossPersistenceContextRefs = jbossEnv.getPersistenceContextRefs();
       }
       else
       {
          // Use the merge target for the static merge methods
-         jbossEjbRefs = this.getEjbReferences();
          jbossEjbLocalRefs = this.getEjbLocalReferences();
-         jbossServiceRefs = this.serviceReferences;
-         jbossResRefs = this.getResourceReferences();
-         jbossResEnvRefs = this.getResourceEnvironmentReferences();
-         jbossMessageDestinationRefs = this.getMessageDestinationReferences();
+         jbossPersistenceContextRefs = getPersistenceContextRefs();
       }
-      
-      EJBReferencesMetaData mergedEjbRefs = EJBReferencesMetaData.merge(jbossEjbRefs, ejbRefs, overridenFile, overrideFile);
-      if (mergedEjbRefs != null)
-         this.setEjbReferences(mergedEjbRefs);
-      
+
       EJBLocalReferencesMetaData mergedEjbLocalRefs = EJBLocalReferencesMetaData.merge(jbossEjbLocalRefs, ejbLocalRefs, overridenFile, overrideFile);
       if (mergedEjbLocalRefs != null)
          this.setEjbLocalReferences(mergedEjbLocalRefs);
       
-      JBossServiceReferencesMetaData mergedServiceRefs = JBossServiceReferencesMetaData.merge(jbossServiceRefs, serviceRefs, overridenFile, overrideFile);
-      if (mergedServiceRefs != null)
-         this.setServiceReferences(mergedServiceRefs);
-
       // Need to set the jndi name from resource mgr if referenced
+      ResourceReferencesMetaData jbossResRefs = getResourceReferences();
       if(resourceMgrs != null && jbossResRefs != null)
       {
          for(ResourceReferenceMetaData ref : jbossResRefs)
@@ -248,31 +203,11 @@
             }
          }
       }
-      ResourceReferencesMetaData mergedResRefs = ResourceReferencesMetaData.merge(jbossResRefs, resRefs, overridenFile, overrideFile, mustOverride);
-      if (mergedResRefs != null)
-         this.setResourceReferences(mergedResRefs);
 
-      ResourceEnvironmentReferencesMetaData mergedResEnvRefs = ResourceEnvironmentReferencesMetaData.merge(jbossResEnvRefs, resEnvRefs, overridenFile, overrideFile);
-      if (mergedResEnvRefs != null)
-         this.setResourceEnvironmentReferences(mergedResEnvRefs);
-
-      MessageDestinationReferencesMetaData mergedMessageDestinationRefs = MessageDestinationReferencesMetaData.merge(jbossMessageDestinationRefs, messageDestinationRefs, overridenFile, overrideFile);
-      if (mergedMessageDestinationRefs != null)
-         this.setMessageDestinationReferences(mergedMessageDestinationRefs);
+      PersistenceContextReferencesMetaData mergedPcRefs = PersistenceContextReferencesMetaData.merge(jbossPersistenceContextRefs,
+            specPersistenceContextRefs, overridenFile, overrideFile);
+      if (mergedPcRefs != null)
+         this.setPersistenceContextRefs(mergedPcRefs);
       
-      if (envEntries != null)
-         this.setEnvironmentEntries(envEntries);
-      
-      if (persistenceContextRefs != null)
-         this.setPersistenceContextRefs(persistenceContextRefs);
-      
-      if (persistenceUnitRefs != null)
-         this.setPersistenceUnitRefs(persistenceUnitRefs);
-      
-      if (postConstructs != null)
-         this.setPostConstructs(postConstructs);
-      
-      if (preDestroys != null)
-         this.setPreDestroys(preDestroys);
    }
 }

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/jboss/JBossRemoteEnvironmentRefsGroupMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/jboss/JBossRemoteEnvironmentRefsGroupMetaData.java	2007-10-28 20:12:14 UTC (rev 66521)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/jboss/JBossRemoteEnvironmentRefsGroupMetaData.java	2007-10-28 20:33:49 UTC (rev 66522)
@@ -100,7 +100,7 @@
          jbossMessageDestinationRefs = jbossEnvironmentRefsGroup.getMessageDestinationReferences();
       }
       
-      EJBReferencesMetaData mergedEjbRefs = EJBReferencesMetaData.merge(jbossEjbRefs, ejbRefs, overridenFile, overrideFile);
+      EJBReferencesMetaData mergedEjbRefs = EJBReferencesMetaData.merge(jbossEjbRefs, ejbRefs, overridenFile, overrideFile, mustOverride);
       if (mergedEjbRefs != null)
          merged.setEjbReferences(mergedEjbRefs);
       
@@ -116,7 +116,7 @@
       if (mergedResEnvRefs != null)
          merged.setResourceEnvironmentReferences(mergedResEnvRefs);
 
-      MessageDestinationReferencesMetaData mergedMessageDestinationRefs = MessageDestinationReferencesMetaData.merge(jbossMessageDestinationRefs, messageDestinationRefs, overridenFile, overrideFile);
+      MessageDestinationReferencesMetaData mergedMessageDestinationRefs = MessageDestinationReferencesMetaData.merge(jbossMessageDestinationRefs, messageDestinationRefs, overridenFile, overrideFile, mustOverride);
       if (mergedMessageDestinationRefs != null)
          merged.setMessageDestinationReferences(mergedMessageDestinationRefs);
       

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/jboss/JBossServiceReferencesMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/jboss/JBossServiceReferencesMetaData.java	2007-10-28 20:12:14 UTC (rev 66521)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/jboss/JBossServiceReferencesMetaData.java	2007-10-28 20:33:49 UTC (rev 66522)
@@ -56,7 +56,8 @@
     * @return the merged referencees
     */
    public static JBossServiceReferencesMetaData merge(ServiceReferencesMetaData override,
-         ServiceReferencesMetaData overriden, String overridenFile, String overrideFile)
+         ServiceReferencesMetaData overriden,
+         String overridenFile, String overrideFile)
    {
       if (override == null && overriden == null)
          return null;

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/jboss/RunAsIdentityMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/jboss/RunAsIdentityMetaData.java	2007-10-28 20:12:14 UTC (rev 66521)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/jboss/RunAsIdentityMetaData.java	2007-10-28 20:33:49 UTC (rev 66522)
@@ -39,7 +39,9 @@
 
    /** The name of the run-as principal */
    private String principalName;
-   /** The run-as role names */
+   /** The run-as role name */
+   private String roleName;
+   /** The extra run-as role names */
    private HashSet<String> runAsRoles = new HashSet<String>(); 
 
    private static final String ANOYMOUS_PRINCIPAL = "anonymous";
@@ -51,10 +53,11 @@
    {
       if(principalName == null)
          principalName = ANOYMOUS_PRINCIPAL;
-      this.principalName = principalName;
       if (roleName == null)
          throw new IllegalArgumentException("The run-as identity must have at least one role");
 
+      this.principalName = principalName;
+      this.roleName = roleName;
       runAsRoles.add(roleName);
    }
 
@@ -75,10 +78,14 @@
       }
    }
 
-   public String getName()
+   public String getPrincipalName()
    {
       return principalName;
    }
+   public String getRoleName()
+   {
+      return roleName;
+   }
 
    /**
     Return a set with the configured run-as role
@@ -114,6 +121,6 @@
     */
    public String toString()
    {
-      return "[roles=" + runAsRoles + ",principal=" + getName() + "]";
+      return "[roles=" + runAsRoles + ",principal=" + getPrincipalName() + "]";
    }
 }

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-28 20:12:14 UTC (rev 66521)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/EJBLocalReferenceMetaData.java	2007-10-28 20:33:49 UTC (rev 66522)
@@ -97,13 +97,30 @@
       this.local = local;
    }
 
+   /**
+    * A legacy accessor that delgated to {@link #getMappedName()}
+    * @return
+    */
+   public String getLocalJndiName()
+   {
+      return getMappedName();
+   }
+   /**
+    * Map the legacy local-jndi-name element onto the standard mapped-name
+    * @param name
+    */
+   public void setLocalJndiName(String name)
+   {
+      setMappedName(name);
+   }
+
    public EJBLocalReferenceMetaData merge(EJBLocalReferenceMetaData original)
    {
       EJBLocalReferenceMetaData merged = new EJBLocalReferenceMetaData();
       merged.merge(this, original);
       return merged;
    }
-   
+
    /**
     * Merge the contents of override with original into this.
     * 

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/EJBLocalReferencesMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/EJBLocalReferencesMetaData.java	2007-10-28 20:12:14 UTC (rev 66521)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/EJBLocalReferencesMetaData.java	2007-10-28 20:33:49 UTC (rev 66522)
@@ -44,7 +44,9 @@
     * @param overrideFile the override file
     * @return the merged referencees
     */
-   public static EJBLocalReferencesMetaData merge(EJBLocalReferencesMetaData override, EJBLocalReferencesMetaData overriden, String overridenFile, String overrideFile)
+   public static EJBLocalReferencesMetaData merge(EJBLocalReferencesMetaData override,
+         EJBLocalReferencesMetaData overriden,
+         String overridenFile, String overrideFile)
    {
       if (override == null && overriden == null)
          return null;
@@ -53,7 +55,7 @@
          return overriden;
       
       EJBLocalReferencesMetaData merged = new EJBLocalReferencesMetaData();
-      return JavaEEMetaDataUtil.merge(merged, overriden, override, "ejb-local-ref", overridenFile, overrideFile, true);
+      return JavaEEMetaDataUtil.merge(merged, overriden, override, "ejb-local-ref", overridenFile, overrideFile, false);
    }
 
    /**

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/EJBReferencesMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/EJBReferencesMetaData.java	2007-10-28 20:12:14 UTC (rev 66521)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/EJBReferencesMetaData.java	2007-10-28 20:33:49 UTC (rev 66522)
@@ -44,7 +44,9 @@
     * @param overrideFile the override file
     * @return the merged referencees
     */
-   public static EJBReferencesMetaData merge(EJBReferencesMetaData override, EJBReferencesMetaData overriden, String overridenFile, String overrideFile)
+   public static EJBReferencesMetaData merge(EJBReferencesMetaData override,
+         EJBReferencesMetaData overriden, String overridenFile, String overrideFile,
+         boolean mustOverride)
    {
       if (override == null && overriden == null)
          return null;
@@ -53,7 +55,7 @@
          return overriden;
       
       EJBReferencesMetaData merged = new EJBReferencesMetaData();
-      return JavaEEMetaDataUtil.merge(merged, overriden, override, "ejb-ref", overridenFile, overrideFile, true);
+      return JavaEEMetaDataUtil.merge(merged, overriden, override, "ejb-ref", overridenFile, overrideFile, mustOverride);
    }
    
    /**

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/EnvironmentRefsGroupMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/EnvironmentRefsGroupMetaData.java	2007-10-28 20:12:14 UTC (rev 66521)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/EnvironmentRefsGroupMetaData.java	2007-10-28 20:33:49 UTC (rev 66522)
@@ -25,6 +25,8 @@
 
 import javax.xml.bind.annotation.XmlElement;
 
+import org.jboss.metadata.ejb.jboss.JBossEnvironmentRefsGroupMetaData;
+import org.jboss.metadata.ejb.jboss.ResourceManagersMetaData;
 import org.jboss.metadata.javaee.support.AbstractMappedMetaData;
 import org.jboss.xb.annotations.JBossXmlModelGroup;
 
@@ -39,7 +41,8 @@
       "serviceReferences", "resourceReferences", "resourceEnvironmentReferences",
       "messageDestinationReferences", "persistenceContextRefs", "persistenceUnitRefs",
       "postConstructs", "preDestroys"})
-public class EnvironmentRefsGroupMetaData extends RemoteEnvironmentRefsGroupMetaData implements Serializable, Environment
+public class EnvironmentRefsGroupMetaData extends RemoteEnvironmentRefsGroupMetaData
+   implements Serializable, Environment
 {
    /** The serialVersionUID */
    private static final long serialVersionUID = 1337095770028220349L;
@@ -115,4 +118,39 @@
    {
       return AbstractMappedMetaData.getByName(name, persistenceContextRefs);
    }
+
+   public void merge(Environment jbossEnv, Environment specEnv,
+         String overridenFile, String overrideFile, boolean mustOverride)
+   {
+      super.merge(jbossEnv, specEnv, overrideFile, overridenFile, mustOverride);
+
+      EJBLocalReferencesMetaData ejbLocalRefs = null;
+      EJBLocalReferencesMetaData jbossEjbLocalRefs = null;
+      PersistenceContextReferencesMetaData persistenceContextRefs = null;
+
+      if (specEnv != null)
+      {
+         ejbLocalRefs = specEnv.getEjbLocalReferences();
+         persistenceContextRefs = specEnv.getPersistenceContextRefs();
+      }
+      
+      if (jbossEnv != null)
+      {
+         jbossEjbLocalRefs = jbossEnv.getEjbLocalReferences();
+         persistenceContextRefs = jbossEnv.getPersistenceContextRefs();
+      }
+      else
+      {
+         // Use the merge target for the static merge methods
+         jbossEjbLocalRefs = this.getEjbLocalReferences();
+         persistenceContextRefs = getPersistenceContextRefs();
+      }
+
+      EJBLocalReferencesMetaData mergedEjbLocalRefs = EJBLocalReferencesMetaData.merge(jbossEjbLocalRefs, ejbLocalRefs, overridenFile, overrideFile);
+      if (mergedEjbLocalRefs != null)
+         this.setEjbLocalReferences(mergedEjbLocalRefs);
+
+      if (persistenceContextRefs != null)
+         this.setPersistenceContextRefs(persistenceContextRefs);
+   }
 }

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/MessageDestinationReferencesMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/MessageDestinationReferencesMetaData.java	2007-10-28 20:12:14 UTC (rev 66521)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/MessageDestinationReferencesMetaData.java	2007-10-28 20:33:49 UTC (rev 66522)
@@ -44,7 +44,10 @@
     * @param overrideFile the override file
     * @return the merged referencees
     */
-   public static MessageDestinationReferencesMetaData merge(MessageDestinationReferencesMetaData override, MessageDestinationReferencesMetaData overriden, String overridenFile, String overrideFile)
+   public static MessageDestinationReferencesMetaData merge(MessageDestinationReferencesMetaData override,
+         MessageDestinationReferencesMetaData overriden,
+         String overridenFile, String overrideFile,
+         boolean mustOverride)
    {
       if (override == null && overriden == null)
          return null;
@@ -53,7 +56,7 @@
          return overriden;
       
       MessageDestinationReferencesMetaData merged = new MessageDestinationReferencesMetaData();
-      return JavaEEMetaDataUtil.merge(merged, overriden, override, "message-destination-ref", overridenFile, overrideFile, true);
+      return JavaEEMetaDataUtil.merge(merged, overriden, override, "message-destination-ref", overridenFile, overrideFile, mustOverride);
    }
 
    /**

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/PersistenceContextReferenceMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/PersistenceContextReferenceMetaData.java	2007-10-28 20:12:14 UTC (rev 66521)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/PersistenceContextReferenceMetaData.java	2007-10-28 20:33:49 UTC (rev 66522)
@@ -24,6 +24,7 @@
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 
+import org.jboss.metadata.javaee.support.MergeableMappedMetaData;
 import org.jboss.metadata.javaee.support.ResourceInjectionMetaDataWithDescriptions;
 
 /**
@@ -35,6 +36,7 @@
 //@SchemaType(name="persistence-context-refType", mandatory=false)
 @XmlType(name="persistence-context-refType")
 public class PersistenceContextReferenceMetaData extends ResourceInjectionMetaDataWithDescriptions
+   implements MergeableMappedMetaData<PersistenceContextReferenceMetaData>
 {
    /** The serialVersionUID */
    private static final long serialVersionUID = 994249685587171979L;
@@ -146,4 +148,39 @@
          throw new IllegalArgumentException("Null properties");
       this.properties = properties;
    }
+
+   public PersistenceContextReferenceMetaData merge(PersistenceContextReferenceMetaData original)
+   {
+      PersistenceContextReferenceMetaData merged = new PersistenceContextReferenceMetaData();
+      merged.merge(this, original);
+      return merged;
+   }
+
+   public void merge(PersistenceContextReferenceMetaData override, PersistenceContextReferenceMetaData original)
+   {
+      super.merge(override, original);
+      PersistenceContextReferenceMetaData merged = new PersistenceContextReferenceMetaData();
+      merged.merge(this, original);
+
+      if(override != null && override.persistenceUnitName != null)
+         persistenceUnitName = override.persistenceUnitName;
+      else if(original != null && original.persistenceUnitName != null)
+         persistenceUnitName = original.persistenceUnitName;
+      if(override != null && override.persistenceContextType != null)
+         persistenceContextType = override.persistenceContextType;
+      else if(original != null && original.persistenceContextType != null)
+         persistenceContextType = original.persistenceContextType;
+      if(override != null && override.properties != null)
+      {
+         if(this.properties == null )
+            properties = new PropertiesMetaData();
+         properties.addAll(override.properties);
+      }
+      if(original != null && original.properties != null)
+      {
+         if(this.properties == null )
+            properties = new PropertiesMetaData();
+         properties.addAll(original.properties);
+      }
+   }   
 }

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/PersistenceContextReferencesMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/PersistenceContextReferencesMetaData.java	2007-10-28 20:12:14 UTC (rev 66521)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/PersistenceContextReferencesMetaData.java	2007-10-28 20:33:49 UTC (rev 66522)
@@ -22,6 +22,7 @@
 package org.jboss.metadata.javaee.spec;
 
 import org.jboss.metadata.javaee.support.AbstractMappedMetaData;
+import org.jboss.metadata.javaee.support.JavaEEMetaDataUtil;
 
 /**
  * PersistenceContextReferencesMetaData.
@@ -34,6 +35,20 @@
    /** The serialVersionUID */
    private static final long serialVersionUID = 75353633724235761L;
 
+   public static PersistenceContextReferencesMetaData merge(PersistenceContextReferencesMetaData override,
+         PersistenceContextReferencesMetaData overriden,
+         String overridenFile, String overrideFile)
+   {
+      if (override == null && overriden == null)
+         return null;
+      
+      if (override == null)
+         return overriden;
+      
+      PersistenceContextReferencesMetaData merged = new PersistenceContextReferencesMetaData();
+      return JavaEEMetaDataUtil.merge(merged, overriden, override, "persistence-context-ref", overridenFile, overrideFile, false);
+   }
+
    /**
     * Create a new PersistenceContextReferencesMetaData.
     */

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/RemoteEnvironmentRefsGroupMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/RemoteEnvironmentRefsGroupMetaData.java	2007-10-28 20:12:14 UTC (rev 66521)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/RemoteEnvironmentRefsGroupMetaData.java	2007-10-28 20:33:49 UTC (rev 66522)
@@ -340,9 +340,9 @@
       return AbstractMappedMetaData.getByName(name, srefs);
    }
 
-   public void merge(RemoteEnvironmentRefsGroupMetaData jbossEnv, RemoteEnvironmentRefsGroupMetaData specEnv, boolean mustOverride)
+   public void merge(RemoteEnvironment jbossEnv, RemoteEnvironment specEnv,
+         String overrideFile, String overridenFile, boolean mustOverride)
    {
-      EnvironmentEntriesMetaData envEntries = null;
       EJBReferencesMetaData ejbRefs = null;
       EJBReferencesMetaData jbossEjbRefs = null;
       ServiceReferencesMetaData serviceRefs = null;
@@ -359,7 +359,6 @@
       
       if (specEnv != null)
       {
-         envEntries = specEnv.getEnvironmentEntries();
          ejbRefs = specEnv.getEjbReferences();
          serviceRefs = specEnv.getServiceReferences();
          resRefs = specEnv.getResourceReferences();
@@ -378,29 +377,61 @@
          jbossResEnvRefs = jbossEnv.getResourceEnvironmentReferences();
          jbossMessageDestinationRefs = jbossEnv.getMessageDestinationReferences();
       }
-      
-      EJBReferencesMetaData mergedEjbRefs = EJBReferencesMetaData.merge(jbossEjbRefs, ejbRefs, "", "");
+      else
+      {
+         // Merge into this
+         jbossEjbRefs = getEjbReferences();
+         jbossServiceRefs = getServiceReferences();
+         jbossResRefs = getResourceReferences();
+         jbossResEnvRefs = getResourceEnvironmentReferences();
+         jbossMessageDestinationRefs = getMessageDestinationReferences();
+      }
+
+
+      EJBReferencesMetaData mergedEjbRefs = EJBReferencesMetaData.merge(jbossEjbRefs, ejbRefs, overrideFile, overridenFile, mustOverride);
       if (mergedEjbRefs != null)
          setEjbReferences(mergedEjbRefs);
       
-      ServiceReferencesMetaData mergedServiceRefs = JBossServiceReferencesMetaData.merge(jbossServiceRefs, serviceRefs, "", "");
+      ServiceReferencesMetaData mergedServiceRefs = JBossServiceReferencesMetaData.merge(jbossServiceRefs, serviceRefs, overrideFile, overridenFile);
       if (mergedServiceRefs != null)
          setServiceReferences(mergedServiceRefs);
 
-      ResourceReferencesMetaData mergedResRefs = ResourceReferencesMetaData.merge(jbossResRefs, resRefs, "", "", mustOverride);
+      ResourceReferencesMetaData mergedResRefs = ResourceReferencesMetaData.merge(jbossResRefs, resRefs, overrideFile, overridenFile, mustOverride);
       if (mergedResRefs != null)
          setResourceReferences(mergedResRefs);
 
-      ResourceEnvironmentReferencesMetaData mergedResEnvRefs = ResourceEnvironmentReferencesMetaData.merge(jbossResEnvRefs, resEnvRefs, "", "");
+      ResourceEnvironmentReferencesMetaData mergedResEnvRefs = ResourceEnvironmentReferencesMetaData.merge(jbossResEnvRefs, resEnvRefs, overrideFile, overridenFile);
       if (mergedResEnvRefs != null)
          setResourceEnvironmentReferences(mergedResEnvRefs);
 
-      MessageDestinationReferencesMetaData mergedMessageDestinationRefs = MessageDestinationReferencesMetaData.merge(jbossMessageDestinationRefs, messageDestinationRefs, "", "");
+      MessageDestinationReferencesMetaData mergedMessageDestinationRefs = MessageDestinationReferencesMetaData.merge(jbossMessageDestinationRefs, messageDestinationRefs, "", "", mustOverride);
       if (mergedMessageDestinationRefs != null)
          setMessageDestinationReferences(mergedMessageDestinationRefs);
       
-      if (envEntries != null)
-         setEnvironmentEntries(envEntries);
+      if(specEnv != null)
+      {
+         EnvironmentEntriesMetaData envEntries = specEnv.getEnvironmentEntries();
+         if (envEntries != null)
+         {
+            EnvironmentEntriesMetaData thisEnv = this.getEnvironmentEntries();
+            if(thisEnv != null)
+               thisEnv.addAll(envEntries);
+            else
+               this.setEnvironmentEntries(envEntries);
+         }
+      }
+      if(jbossEnv != null)
+      {
+         EnvironmentEntriesMetaData envEntries = jbossEnv.getEnvironmentEntries();
+         if (envEntries != null)
+         {
+            EnvironmentEntriesMetaData thisEnv = this.getEnvironmentEntries();
+            if(thisEnv != null)
+               thisEnv.addAll(envEntries);
+            else
+               this.setEnvironmentEntries(envEntries);
+         }
+      }
       
       if (persistenceUnitRefs != null)
          setPersistenceUnitRefs(persistenceUnitRefs);

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/SecurityRoleMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/SecurityRoleMetaData.java	2007-10-28 20:12:14 UTC (rev 66521)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/SecurityRoleMetaData.java	2007-10-28 20:33:49 UTC (rev 66522)
@@ -21,6 +21,7 @@
 */
 package org.jboss.metadata.javaee.spec;
 
+import java.util.HashSet;
 import java.util.Set;
 
 import javax.xml.bind.annotation.XmlElement;
@@ -44,7 +45,7 @@
    /** The serialVersionUID */
    private static final long serialVersionUID = -4349954695900237831L;
    
-   /** The prinicpals */
+   /** The prinicpal names that have this role */
    private Set<String> principals;
 
    /**
@@ -119,7 +120,24 @@
 
    public SecurityRoleMetaData merge(SecurityRoleMetaData original)
    {
-      // There is nothing to merge
-      return this;
+      SecurityRoleMetaData merged = new SecurityRoleMetaData();
+      merged.merge(this, original);
+      return merged;
    }
+   public void merge(SecurityRoleMetaData override, SecurityRoleMetaData original)
+   {
+      super.merge(override, original);
+      if(override != null && override.principals != null)
+      {
+         if(principals == null)
+            principals = new HashSet<String>();
+         principals.addAll(override.principals);
+      }
+      if(original != null && original.principals != null)
+      {
+         if(principals == null)
+            principals = new HashSet<String>();
+         principals.addAll(original.principals);
+      }
+   }
 }

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/SecurityRoleRefMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/SecurityRoleRefMetaData.java	2007-10-28 20:12:14 UTC (rev 66521)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/SecurityRoleRefMetaData.java	2007-10-28 20:33:49 UTC (rev 66522)
@@ -23,6 +23,7 @@
 
 import javax.xml.bind.annotation.XmlType;
 
+import org.jboss.metadata.javaee.support.MergeableMappedMetaData;
 import org.jboss.metadata.javaee.support.NamedMetaDataWithDescriptions;
 
 /**
@@ -32,7 +33,9 @@
  * @version $Revision: 1.1 $
  */
 @XmlType(name="security-role-refType")
-public class SecurityRoleRefMetaData extends NamedMetaDataWithDescriptions
+public class SecurityRoleRefMetaData
+   extends NamedMetaDataWithDescriptions
+   implements MergeableMappedMetaData<SecurityRoleRefMetaData>
 {
    /** The serialVersionUID */
    private static final long serialVersionUID = -8092072767419265555L;
@@ -91,4 +94,20 @@
    {
       setName(roleName);
    }
+
+   public SecurityRoleRefMetaData merge(SecurityRoleRefMetaData original)
+   {
+      SecurityRoleRefMetaData merged = new SecurityRoleRefMetaData();
+      merged.merge(this, original);
+      return merged;
+   }
+   public void merge(SecurityRoleRefMetaData override, SecurityRoleRefMetaData original)
+   {
+      super.merge(override, original);
+      if(override != null && override.roleLink != null)
+         setRoleLink(override.roleLink);
+      else if(original != null && original.roleLink != null)
+         setRoleLink(original.roleLink);
+   }
+   
 }

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/SecurityRoleRefsMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/SecurityRoleRefsMetaData.java	2007-10-28 20:12:14 UTC (rev 66521)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/SecurityRoleRefsMetaData.java	2007-10-28 20:33:49 UTC (rev 66522)
@@ -21,24 +21,26 @@
 */
 package org.jboss.metadata.javaee.spec;
 
-import org.jboss.metadata.javaee.support.NonNullLinkedHashSet;
+import org.jboss.metadata.javaee.support.AbstractMappedMetaData;
 
 /**
  * SecurityRoleRefsMetaData.
  * 
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @author Scott.Stark at jboss.org
  * @version $Revision: 1.1 $
  */
-public class SecurityRoleRefsMetaData extends NonNullLinkedHashSet<SecurityRoleRefMetaData>
+public class SecurityRoleRefsMetaData
+   extends AbstractMappedMetaData<SecurityRoleRefMetaData>
 {
    /** The serialVersionUID */
-   private static final long serialVersionUID = 1775636729892021076L;
+   private static final long serialVersionUID = 1;
 
    /**
     * Create a new SecurityRoleRefsMetaData.
     */
    public SecurityRoleRefsMetaData()
    {
-      // For serialization
+      super("role name for security role ref");
    }
 }

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/SecurityRolesMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/SecurityRolesMetaData.java	2007-10-28 20:12:14 UTC (rev 66521)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/SecurityRolesMetaData.java	2007-10-28 20:33:49 UTC (rev 66522)
@@ -98,20 +98,31 @@
    public void merge(IdMetaDataImpl override, IdMetaDataImpl original)
    {
       super.merge(override, original);
-      SecurityRolesMetaData sr0 = (SecurityRolesMetaData) override;
-      SecurityRolesMetaData sr1 = (SecurityRolesMetaData) original;
-      if(sr0 != null)
+      SecurityRolesMetaData roles1 = (SecurityRolesMetaData) override;
+      SecurityRolesMetaData roles0 = (SecurityRolesMetaData) original;
+      if(roles0 != null)
       {
-         this.addAll(sr0);
+         for(SecurityRoleMetaData sr : roles0)
+         {
+            SecurityRoleMetaData to = this.get(sr.getRoleName());
+            if(to != null)
+            {
+               to.merge(sr, null);
+            }
+            else
+            {
+               this.add(sr);
+            }
+         }
       }
-      if(sr1 != null)
+      if(roles1 != null)
       {
-         for(SecurityRoleMetaData sr : sr1)
+         for(SecurityRoleMetaData sr : roles1)
          {
             SecurityRoleMetaData to = this.get(sr.getRoleName());
             if(to != null)
             {
-               to.merge(sr);
+               to.merge(sr, null);
             }
             else
             {

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/merge/MergeUtil.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/merge/MergeUtil.java	2007-10-28 20:12:14 UTC (rev 66521)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/merge/MergeUtil.java	2007-10-28 20:33:49 UTC (rev 66522)
@@ -93,7 +93,7 @@
          jbossMessageDestinationRefs = jbossEnvironmentRefsGroup.getMessageDestinationReferences();
       }
       
-      EJBReferencesMetaData mergedEjbRefs = EJBReferencesMetaData.merge(jbossEjbRefs, ejbRefs, overridenFile, overrideFile);
+      EJBReferencesMetaData mergedEjbRefs = EJBReferencesMetaData.merge(jbossEjbRefs, ejbRefs, overridenFile, overrideFile, mustOverride);
       if (mergedEjbRefs != null)
          merged.setEjbReferences(mergedEjbRefs);
       
@@ -109,7 +109,7 @@
       if (mergedResEnvRefs != null)
          merged.setResourceEnvironmentReferences(mergedResEnvRefs);
 
-      MessageDestinationReferencesMetaData mergedMessageDestinationRefs = MessageDestinationReferencesMetaData.merge(jbossMessageDestinationRefs, messageDestinationRefs, overridenFile, overrideFile);
+      MessageDestinationReferencesMetaData mergedMessageDestinationRefs = MessageDestinationReferencesMetaData.merge(jbossMessageDestinationRefs, messageDestinationRefs, overridenFile, overrideFile, mustOverride);
       if (mergedMessageDestinationRefs != null)
          merged.setMessageDestinationReferences(mergedMessageDestinationRefs);
       

Added: projects/metadata/trunk/src/main/java/org/jboss/metadata/web/jboss/JBossServletMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/web/jboss/JBossServletMetaData.java	                        (rev 0)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/web/jboss/JBossServletMetaData.java	2007-10-28 20:33:49 UTC (rev 66522)
@@ -0,0 +1,60 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2007, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.metadata.web.jboss;
+
+import org.jboss.metadata.web.spec.ServletMetaData;
+
+/**
+ * jboss-web/servlet metadata
+ * 
+ * @author Scott.Stark at jboss.org
+ * @version $Revision$
+ */
+public class JBossServletMetaData extends ServletMetaData
+{
+   private static final long serialVersionUID = 1;
+
+   private String runAsPrincipal;
+
+   public String getRunAsPrincipal()
+   {
+      return runAsPrincipal;
+   }
+
+   public void setRunAsPrincipal(String runAsPrincipal)
+   {
+      this.runAsPrincipal = runAsPrincipal;
+   }
+
+   public JBossServletMetaData merge(ServletMetaData original)
+   {
+      JBossServletMetaData merged = new JBossServletMetaData();
+      merged.merge(this, original);
+      return merged;
+   }
+   public void merge(JBossServletMetaData override, ServletMetaData original)
+   {
+      super.merge(override, original);
+      if(override != null && override.runAsPrincipal != null)
+         setRunAsPrincipal(override.runAsPrincipal);
+   }
+}


Property changes on: projects/metadata/trunk/src/main/java/org/jboss/metadata/web/jboss/JBossServletMetaData.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + native

Added: projects/metadata/trunk/src/main/java/org/jboss/metadata/web/jboss/JBossServletsMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/web/jboss/JBossServletsMetaData.java	                        (rev 0)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/web/jboss/JBossServletsMetaData.java	2007-10-28 20:33:49 UTC (rev 66522)
@@ -0,0 +1,82 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2007, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.metadata.web.jboss;
+
+import org.jboss.metadata.javaee.support.AbstractMappedMetaData;
+import org.jboss.metadata.web.spec.ServletMetaData;
+import org.jboss.metadata.web.spec.ServletsMetaData;
+
+/**
+ * jboss-web/serlvet collection
+ * 
+ * @author Scott.Stark at jboss.org
+ * @version $Revision$
+ */
+public class JBossServletsMetaData
+   extends AbstractMappedMetaData<JBossServletMetaData>
+{
+   private static final long serialVersionUID = 1;
+
+   public static JBossServletsMetaData merge(JBossServletsMetaData override,
+         ServletsMetaData original)
+   {
+      JBossServletsMetaData merged = new JBossServletsMetaData();
+      if (override == null && original == null)
+         return merged;
+      
+      for(ServletMetaData smd : original)
+      {
+         String key = smd.getKey();
+         if(override != null && override.containsKey(key))
+         {
+            JBossServletMetaData overrideSMD = override.get(key);
+            JBossServletMetaData jbs = overrideSMD.merge(smd);
+            merged.add(jbs);
+         }
+         else
+         {
+            JBossServletMetaData jbs = new JBossServletMetaData();
+            jbs.merge(null, smd);
+            merged.add(jbs);
+         }
+      }
+      
+      // Process the remaining overrides
+      if(override != null)
+      {
+         for(JBossServletMetaData jbs : override)
+         {
+            String key = jbs.getKey();
+            if(merged.containsKey(key))
+               continue;
+            merged.add(jbs);
+         }
+      }
+
+      return merged;
+   }
+
+   public JBossServletsMetaData()
+   {
+      super("jboss-web app servlets");
+   }
+}


Property changes on: projects/metadata/trunk/src/main/java/org/jboss/metadata/web/jboss/JBossServletsMetaData.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + native

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/web/jboss/JBossWebMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/web/jboss/JBossWebMetaData.java	2007-10-28 20:12:14 UTC (rev 66521)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/web/jboss/JBossWebMetaData.java	2007-10-28 20:33:49 UTC (rev 66522)
@@ -21,7 +21,6 @@
  */
 package org.jboss.metadata.web.jboss;
 
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -33,11 +32,17 @@
 
 import org.jboss.metadata.common.jboss.WebserviceDescriptionsMetaData;
 import org.jboss.metadata.ejb.jboss.JBossEnvironmentRefsGroupMetaData;
-import org.jboss.metadata.ejb.spec.SecurityIdentityMetaData;
+import org.jboss.metadata.javaee.jboss.RunAsIdentityMetaData;
+import org.jboss.metadata.javaee.spec.EJBLocalReferenceMetaData;
 import org.jboss.metadata.javaee.spec.EJBLocalReferencesMetaData;
+import org.jboss.metadata.javaee.spec.EJBReferenceMetaData;
 import org.jboss.metadata.javaee.spec.EJBReferencesMetaData;
+import org.jboss.metadata.javaee.spec.EmptyMetaData;
+import org.jboss.metadata.javaee.spec.Environment;
 import org.jboss.metadata.javaee.spec.EnvironmentEntriesMetaData;
 import org.jboss.metadata.javaee.spec.EnvironmentEntryMetaData;
+import org.jboss.metadata.javaee.spec.JavaEEMetaDataConstants;
+import org.jboss.metadata.javaee.spec.ParamValueMetaData;
 import org.jboss.metadata.javaee.spec.ServiceReferenceMetaData;
 import org.jboss.metadata.javaee.spec.ServiceReferencesMetaData;
 import org.jboss.metadata.javaee.spec.LifecycleCallbacksMetaData;
@@ -58,22 +63,52 @@
 import org.jboss.metadata.javaee.spec.SecurityRoleRefsMetaData;
 import org.jboss.metadata.javaee.spec.SecurityRolesMetaData;
 import org.jboss.metadata.javaee.support.AbstractMappedMetaData;
-import org.jboss.metadata.javaee.support.IdMetaDataImplWithOverride;
+import org.jboss.metadata.javaee.support.IdMetaDataImplWithDescriptionGroup;
+import org.jboss.metadata.web.spec.ErrorPageMetaData;
+import org.jboss.metadata.web.spec.FilterMappingMetaData;
+import org.jboss.metadata.web.spec.FiltersMetaData;
+import org.jboss.metadata.web.spec.JspConfigMetaData;
+import org.jboss.metadata.web.spec.ListenerMetaData;
+import org.jboss.metadata.web.spec.LocaleEncodingsMetaData;
+import org.jboss.metadata.web.spec.LoginConfigMetaData;
+import org.jboss.metadata.web.spec.MimeMappingMetaData;
 import org.jboss.metadata.web.spec.SecurityConstraintMetaData;
 import org.jboss.metadata.web.spec.ServletMappingMetaData;
 import org.jboss.metadata.web.spec.ServletMetaData;
 import org.jboss.metadata.web.spec.ServletsMetaData;
+import org.jboss.metadata.web.spec.SessionConfigMetaData;
+import org.jboss.metadata.web.spec.Web25MetaData;
 import org.jboss.metadata.web.spec.WebMetaData;
+import org.jboss.metadata.web.spec.WelcomeFileListMetaData;
 
 /**
+ * The combined web.xml/jboss-web.xml metadata
  * @author Scott.Stark at jboss.org
  * @version $Revision$
  */
-public class JBossWebMetaData extends IdMetaDataImplWithOverride<WebMetaData>
+public class JBossWebMetaData extends IdMetaDataImplWithDescriptionGroup
 {
    private static final long serialVersionUID = 1;
 
-   /** DTD information */
+   // Spec information
+   private String servletVersion;
+   private EmptyMetaData distributable;
+   private boolean metadataComplete;
+   private List<ParamValueMetaData> contextParams;
+   private SessionConfigMetaData sessionConfig;
+   private FiltersMetaData filters;
+   private List<FilterMappingMetaData> filterMappings;
+   private List<ErrorPageMetaData> errorPages;
+   private List<JspConfigMetaData> jspConfig;
+   private List<ListenerMetaData> listeners;
+   private List<LoginConfigMetaData> loginConfig;
+   private List<MimeMappingMetaData> mimeMappings;
+   private List<ServletMappingMetaData> servletMappings;
+   private List<SecurityConstraintMetaData> securityContraints;
+   private WelcomeFileListMetaData welcomeFileList;
+   private LocaleEncodingsMetaData localEncodings;
+
+   // JBoss extended information
    private String dtdPublicId;
    private String dtdSystemId;
    private String version;
@@ -83,30 +118,28 @@
    private String jaccContextID;
    /** The loader repository */
    private ClassLoadingMetaData classLoading;
-   private ServletsMetaData servlets = new ServletsMetaData();
    /** A list of extra dependencies to wait on */
    private List<String> depends;
    /** */
-   private Map<String, SecurityRoleMetaData> runAsIdentity = new HashMap<String, SecurityRoleMetaData>();
+   private Map<String, RunAsIdentityMetaData> runAsIdentity = new HashMap<String, RunAsIdentityMetaData>();
    private SecurityRolesMetaData securityRoles = new SecurityRolesMetaData();
+   /** The servlets */
+   private JBossServletsMetaData servlets = new JBossServletsMetaData();
    /** The message destinations */
    private MessageDestinationsMetaData messageDestinations = new MessageDestinationsMetaData();
    /** The environment */
    private JBossEnvironmentRefsGroupMetaData jndiEnvironmentRefsGroup;
-   /** The merged environment */
-   private transient JBossEnvironmentRefsGroupMetaData mergedEnvironment;
+   /** The web app virtual host list */
    private List<String> virtualHosts;
    private boolean flushOnSessionInvalidation;
    private boolean useSessionCookies;
    private ReplicationConfig replicationConfig;
    private PassivationConfig passivationConfig;
    private WebserviceDescriptionsMetaData webserviceDescriptions = new WebserviceDescriptionsMetaData();
-   /** The optional JBossWS config-name */
+   /** The optional JBossWS config-name, should it be here? */
    private String configName;
-   /** The optional JBossWS config-file */
+   /** The optional JBossWS config-file, should it be here? */
    private String configFile;
-   /** The security identity */
-   private SecurityIdentityMetaData securityIdentity;
 
    /** The web context class loader used to create the java:comp context */
    @Deprecated
@@ -171,14 +204,24 @@
       // Set the version based on the public id
       if (dtdPublicId != null && dtdPublicId.contains("3.0"))
          setVersion("3.0");
-      if (dtdPublicId != null && dtdPublicId.contains("3.2"))
+      else if (dtdPublicId != null && dtdPublicId.contains("3.2"))
          setVersion("3.2");
-      if (dtdPublicId != null && dtdPublicId.contains("4.0"))
+      else if (dtdPublicId != null && dtdPublicId.contains("2.4"))
          setVersion("4.0");
-      if (dtdPublicId != null && dtdPublicId.contains("4.2"))
+      else if (dtdPublicId != null && dtdPublicId.contains("4.2"))
          setVersion("4.2");
-      if (dtdPublicId != null && dtdPublicId.contains("5.0"))
+      else if (dtdPublicId != null && dtdPublicId.contains("5.0"))
          setVersion("5.0");
+      else if(dtdSystemId != null && dtdSystemId.contains("3_0"))
+         setVersion("3.0");
+      else if(dtdSystemId != null && dtdSystemId.contains("3_2"))
+         setVersion("3.2");
+      else if(dtdSystemId != null && dtdSystemId.contains("4_0"))
+         setVersion("4.0");
+      else if(dtdSystemId != null && dtdSystemId.contains("4_2"))
+         setVersion("4.2");
+      else if(dtdSystemId != null && dtdSystemId.contains("5_0"))
+         setVersion("5.0");
    }
    /**
     * Get the DTD public id if one was seen
@@ -207,7 +250,338 @@
    {
       this.version = version;
    }
+   public String getServletVersion()
+   {
+      return servletVersion;
+   }
+   public void setServletVersion(String servletVersion)
+   {
+      this.servletVersion = servletVersion;
+   }
 
+
+   /**
+    * Is this a servlet 2.3 version application
+    * @return true if this is a javaee 2.3 version application
+    */
+   @XmlTransient
+   public boolean is23()
+   {
+      return servletVersion != null && servletVersion.equals(JavaEEMetaDataConstants.J2EE_13_WEB); 
+   }
+   @XmlTransient
+   public boolean is24()
+   {
+      return servletVersion != null && servletVersion.equals("2.4");
+   }
+   @XmlTransient
+   public boolean is25()
+   {
+      return servletVersion != null && servletVersion.equals("2.5");
+   }
+
+   
+   public boolean isMetadataComplete()
+   {
+      return metadataComplete;
+   }
+   public void setMetadataComplete(boolean metadataComplete)
+   {
+      this.metadataComplete = metadataComplete;
+   }
+
+   public EmptyMetaData getDistributable()
+   {
+      return distributable;
+   }
+   public void setDistributable(EmptyMetaData distributable)
+   {
+      this.distributable = distributable;
+   }
+   public SessionConfigMetaData getSessionConfig()
+   {
+      return sessionConfig;
+   }
+   public void setSessionConfig(SessionConfigMetaData sessionConfig)
+   {
+      this.sessionConfig = sessionConfig;
+   }
+   public List<ParamValueMetaData> getContextParams()
+   {
+      return contextParams;
+   }
+   @XmlElement(name="context-param")
+   public void setContextParams(List<ParamValueMetaData> params)
+   {
+      this.contextParams = params;
+   }
+
+   public FiltersMetaData getFilters()
+   {
+      return filters;
+   }
+   @XmlElement(name="filter")
+   public void setFilters(FiltersMetaData filters)
+   {
+      this.filters = filters;
+   }
+
+   public List<FilterMappingMetaData> getFilterMappings()
+   {
+      return filterMappings;
+   }
+   @XmlElement(name="filter-mapping")
+   public void setFilterMappings(List<FilterMappingMetaData> filterMappings)
+   {
+      this.filterMappings = filterMappings;
+   }
+
+   public List<ErrorPageMetaData> getErrorPages()
+   {
+      return errorPages;
+   }
+   @XmlElement(name="error-page")
+   public void setErrorPages(List<ErrorPageMetaData> errorPages)
+   {
+      this.errorPages = errorPages;
+   }
+
+   public List<JspConfigMetaData> getJspConfig()
+   {
+      return jspConfig;
+   }
+   public void setJspConfig(List<JspConfigMetaData> jspConfig)
+   {
+      this.jspConfig = jspConfig;
+   }
+
+   public List<ListenerMetaData> getListeners()
+   {
+      return listeners;
+   }
+   @XmlElement(name="listener")
+   public void setListeners(List<ListenerMetaData> listeners)
+   {
+      this.listeners = listeners;
+   }
+
+   public LocaleEncodingsMetaData getLocalEncodings()
+   {
+      return localEncodings;
+   }
+   @XmlElement(name="locale-encoding-mapping-list")
+   public void setLocalEncodings(LocaleEncodingsMetaData localEncodings)
+   {
+      this.localEncodings = localEncodings;
+   }
+
+   public List<LoginConfigMetaData> getLoginConfig()
+   {
+      return loginConfig;
+   }
+   public void setLoginConfig(List<LoginConfigMetaData> loginConfig)
+   {
+      this.loginConfig = loginConfig;
+   }
+
+   public List<MimeMappingMetaData> getMimeMappings()
+   {
+      return mimeMappings;
+   }
+   @XmlElement(name="mime-mapping")
+   public void setMimeMappings(List<MimeMappingMetaData> mimeMappings)
+   {
+      this.mimeMappings = mimeMappings;
+   }
+
+   public JBossServletMetaData getServletByName(String name)
+   {
+      JBossServletMetaData servlet = null;
+      if(servlets != null)
+         servlet = servlets.get(name);
+      return servlet;
+   }
+   public JBossServletsMetaData getServlets()
+   {
+      return servlets;
+   }
+   @XmlElement(name="servlet")
+   public void setServlets(JBossServletsMetaData servlets)
+   {
+      this.servlets = servlets;
+   }
+
+   public List<ServletMappingMetaData> getServletMappings()
+   {
+      return servletMappings;
+   }
+   @XmlElement(name="servlet-mapping")
+   public void setServletMappings(List<ServletMappingMetaData> servletMappings)
+   {
+      this.servletMappings = servletMappings;
+   }
+
+   public List<SecurityConstraintMetaData> getSecurityContraints()
+   {
+      return securityContraints;
+   }
+   @XmlElement(name="security-constraint")
+   public void setSecurityContraints(List<SecurityConstraintMetaData> securityContraints)
+   {
+      this.securityContraints = securityContraints;
+   }
+
+   public SecurityRolesMetaData getSecurityRoles()
+   {
+      return securityRoles;
+   }
+   @XmlElement(name="security-role")
+   public void setSecurityRoles(SecurityRolesMetaData securityRoles)
+   {
+      this.securityRoles = securityRoles;
+   }
+
+   public WelcomeFileListMetaData getWelcomeFileList()
+   {
+      return welcomeFileList;
+   }
+   public void setWelcomeFileList(WelcomeFileListMetaData welcomeFileList)
+   {
+      this.welcomeFileList = welcomeFileList;
+   }
+
+   public EJBLocalReferenceMetaData getEjbLocalReferenceByName(String name)
+   {
+      return AbstractMappedMetaData.getByName(name, getEjbLocalReferences());
+   }
+
+   public EJBLocalReferencesMetaData getEjbLocalReferences()
+   {
+      if (jndiEnvironmentRefsGroup != null)
+         return jndiEnvironmentRefsGroup.getEjbLocalReferences();
+      return null;
+   }
+
+   public EJBReferenceMetaData getEjbReferenceByName(String name)
+   {
+      return AbstractMappedMetaData.getByName(name, getEjbReferences());
+   }
+
+   public EJBReferencesMetaData getEjbReferences()
+   {
+      if (jndiEnvironmentRefsGroup != null)
+         return jndiEnvironmentRefsGroup.getEjbReferences();
+      return null;
+   }
+
+   public EnvironmentEntriesMetaData getEnvironmentEntries()
+   {
+      if (jndiEnvironmentRefsGroup != null)
+         return jndiEnvironmentRefsGroup.getEnvironmentEntries();
+      return null;
+   }
+
+   public EnvironmentEntryMetaData getEnvironmentEntryByName(String name)
+   {
+      return AbstractMappedMetaData.getByName(name, getEnvironmentEntries());
+   }
+
+   public MessageDestinationReferenceMetaData getMessageDestinationReferenceByName(String name)
+   {
+      return AbstractMappedMetaData.getByName(name, getMessageDestinationReferences());
+   }
+
+   public MessageDestinationReferencesMetaData getMessageDestinationReferences()
+   {
+      if (jndiEnvironmentRefsGroup != null)
+         return jndiEnvironmentRefsGroup.getMessageDestinationReferences();
+      return null;
+   }
+
+   public PersistenceContextReferenceMetaData getPersistenceContextReferenceByName(String name)
+   {
+      return AbstractMappedMetaData.getByName(name, getPersistenceContextRefs());
+   }
+
+   public PersistenceContextReferencesMetaData getPersistenceContextRefs()
+   {
+      if (jndiEnvironmentRefsGroup != null)
+         return jndiEnvironmentRefsGroup.getPersistenceContextRefs();
+      return null;
+   }
+
+   public PersistenceUnitReferenceMetaData getPersistenceUnitReferenceByName(String name)
+   {
+      return AbstractMappedMetaData.getByName(name, getPersistenceUnitRefs());
+   }
+
+   public PersistenceUnitReferencesMetaData getPersistenceUnitRefs()
+   {
+      if (jndiEnvironmentRefsGroup != null)
+         return jndiEnvironmentRefsGroup.getPersistenceUnitRefs();
+      return null;
+   }
+
+   public LifecycleCallbacksMetaData getPostConstructs()
+   {
+      if (jndiEnvironmentRefsGroup != null)
+         return jndiEnvironmentRefsGroup.getPostConstructs();
+      return null;
+   }
+
+   public LifecycleCallbacksMetaData getPreDestroys()
+   {
+      if (jndiEnvironmentRefsGroup != null)
+         return jndiEnvironmentRefsGroup.getPreDestroys();
+      return null;
+   }
+
+   public ResourceEnvironmentReferenceMetaData getResourceEnvironmentReferenceByName(String name)
+   {
+      return AbstractMappedMetaData.getByName(name, getResourceEnvironmentReferences());
+   }
+
+   public ResourceEnvironmentReferencesMetaData getResourceEnvironmentReferences()
+   {
+      if (jndiEnvironmentRefsGroup != null)
+         return jndiEnvironmentRefsGroup.getResourceEnvironmentReferences();
+      return null;
+   }
+
+   public ResourceReferenceMetaData getResourceReferenceByName(String name)
+   {
+      return AbstractMappedMetaData.getByName(name, getResourceReferences());
+   }
+
+   public ResourceReferencesMetaData getResourceReferences()
+   {
+      if (jndiEnvironmentRefsGroup != null)
+         return jndiEnvironmentRefsGroup.getResourceReferences();
+      return null;
+   }
+
+   public ServiceReferenceMetaData getServiceReferenceByName(String name)
+   {
+      return AbstractMappedMetaData.getByName(name, getServiceReferences());
+   }
+
+   public ServiceReferencesMetaData getServiceReferences()
+   {
+      if (jndiEnvironmentRefsGroup != null)
+         return jndiEnvironmentRefsGroup.getServiceReferences();
+      return null;
+   }
+
+   public MessageDestinationsMetaData getMessageDestinations()
+   {
+      return messageDestinations;
+   }
+   @XmlElement(name="message-destination")
+   public void setMessageDestinations(MessageDestinationsMetaData messageDestinations)
+   {
+      this.messageDestinations = messageDestinations;
+   }
+
    public String getAlternativeDD()
    {
       return alternativeDD;
@@ -301,14 +675,6 @@
    {
       this.securityDomain = securityDomain;
    }
-   public SecurityRolesMetaData getSecurityRoles()
-   {
-      return securityRoles;
-   }
-   public void setSecurityRoles(SecurityRolesMetaData securityRoles)
-   {
-      this.securityRoles = securityRoles;
-   }
 
    public HashMap getArbitraryMetadata()
    {
@@ -375,16 +741,6 @@
       this.replicationConfig = replicationConfig;
    }
 
-   public ServletsMetaData getServlets()
-   {
-      return servlets;
-   }
-   @XmlElement(name="servlet")
-   public void setServlets(ServletsMetaData servlets)
-   {
-      this.servlets = servlets;
-   }
-
    public boolean isUseSessionCookies()
    {
       return useSessionCookies;
@@ -424,15 +780,6 @@
       this.webserviceDescriptions = webserviceDescriptions;
    }
 
-   @XmlTransient
-   public boolean getDistributable()
-   {
-      boolean distributable = false;
-      if (this.getOverridenMetaData() != null)
-         distributable = getOverridenMetaData().getDistributable() != null;
-      return distributable;
-   }
-
    /**
     * Get the security-role names from the web.xml descriptor
     * @return Set<String> of the security-role names from the web.xml
@@ -451,10 +798,13 @@
    public SecurityRoleRefsMetaData getSecurityRoleRefs(String servletName)
    {
       SecurityRoleRefsMetaData refs = null;
-      ServletMetaData servlet = getMergedServlets().get(servletName);
-      if (servlet != null)
+      if(getServlets() != null)
       {
-         refs = servlet.getSecurityRoleRefs();
+         ServletMetaData servlet = getServlets().get(servletName);
+         if (servlet != null)
+         {
+            refs = servlet.getSecurityRoleRefs();
+         }
       }
       return refs;
    }
@@ -468,6 +818,7 @@
          String rolename = srm.getRoleName();
          if(principalRolesMap == null)
             principalRolesMap = new HashMap<String, Set<String>>();
+         if(srm.getPrincipals() != null)
          for(String pr : srm.getPrincipals())
          {
             Set<String> roleset = (Set<String>)principalRolesMap.get(pr);
@@ -486,7 +837,7 @@
     * 
     * @return the jndiEnvironmentRefsGroup.
     */
-   public JBossEnvironmentRefsGroupMetaData getJbossJndiEnvironmentRefsGroup()
+   public Environment getJndiEnvironmentRefsGroup()
    {
       return jndiEnvironmentRefsGroup;
    }
@@ -497,226 +848,36 @@
     * @param jndiEnvironmentRefsGroup the jndiEnvironmentRefsGroup.
     * @throws IllegalArgumentException for a null jndiEnvironmentRefsGroup
     */
-   public void setJbossJndiEnvironmentRefsGroup(JBossEnvironmentRefsGroupMetaData jndiEnvironmentRefsGroup)
+   @XmlElement(type=JBossEnvironmentRefsGroupMetaData.class)
+   public void setJndiEnvironmentRefsGroup(Environment env)
    {
-      if (jndiEnvironmentRefsGroup == null)
+      if (env == null)
          throw new IllegalArgumentException("Null jndiEnvironmentRefsGroup");
-      this.jndiEnvironmentRefsGroup = jndiEnvironmentRefsGroup;
+      JBossEnvironmentRefsGroupMetaData jenv = (JBossEnvironmentRefsGroupMetaData) env;
+      if(jndiEnvironmentRefsGroup != null)
+         jndiEnvironmentRefsGroup.merge(jenv, null, null, "jboss-web.xml", "web.xml", false);
+      else
+         jndiEnvironmentRefsGroup = jenv;
    }
 
-   /**
-    * Get the mergedEnvironment.
-    * TODO
-    * 
-    * @return the mergedEnvironment.
-    */
    @XmlTransient
-   public JBossEnvironmentRefsGroupMetaData getMergedEnvironment()
-   {
-      if (mergedEnvironment != null)
-         return mergedEnvironment;
-      
-      try
-      {
-         mergedEnvironment = JBossEnvironmentRefsGroupMetaData.mergeNew(jndiEnvironmentRefsGroup,
-               this.getOverridenMetaData().getJndiEnvironmentRefsGroup(),
-               // jboss-web does not use resource-managers
-               null,
-               "web.xml", "jboss-web.xml", true);
-      }
-      catch (Exception e)
-      {
-         throw new RuntimeException("Error merging jndi environment for " + getId(), e);
-      }
-      return mergedEnvironment;
-   }
-   /**
-    * TODO
-    * @return
-    */
-   @XmlTransient
-   public ServletsMetaData getMergedServlets()
-   {
-      WebMetaData wmd = getOverridenMetaData();
-      ServletsMetaData smd = wmd.getServlets();
-      if(smd == null)
-         smd = new ServletsMetaData();
-      return smd;
-   }
-
-   @XmlTransient
-   public List<ServletMappingMetaData> getServletMappings()
-   {
-      WebMetaData wmd = getOverridenMetaData();
-      List<ServletMappingMetaData> smd = wmd.getServletMappings();
-      if(smd == null)
-         smd = Collections.emptyList();
-      return smd;
-   }
-
-   @XmlTransient
-   public EnvironmentEntriesMetaData getEnvironmentEntries()
-   {
-      return getMergedEnvironment().getEnvironmentEntries();
-   }
-
-   @XmlTransient
-   public EnvironmentEntryMetaData getEnvironmentEntryByName(String name)
-   {
-      return AbstractMappedMetaData.getByName(name, getEnvironmentEntries());
-   }
-
-   @XmlTransient
-   public EJBLocalReferencesMetaData getEjbLocalReferences()
-   {
-      return getMergedEnvironment().getEjbLocalReferences();
-   }
-
-   @XmlTransient
-   public EJBReferencesMetaData getEjbReferences()
-   {
-      return getMergedEnvironment().getEjbReferences();
-   }
-
-   /**
-    * Get the messageDestinations.
-    * 
-    * @return the messageDestinations.
-    */
-   public MessageDestinationsMetaData getMessageDestinations()
-   {
-      return messageDestinations;
-   }
-   @XmlTransient
    public MessageDestinationMetaData getMessageDestination(String name)
    {
       return messageDestinations.get(name);
    }
 
    /**
-    * Set the messageDestinations.
-    * 
-    * @param messageDestinations the messageDestinations.
-    * @throws IllegalArgumentException for a null messageDestinations
-    */
-   @XmlElement(name="message-destination")
-   public void setMessageDestinations(MessageDestinationsMetaData messageDestinations)
-   {
-      if (messageDestinations == null)
-         throw new IllegalArgumentException("Null messageDestinations");
-      this.messageDestinations = messageDestinations;
-   }
-
-   @XmlTransient
-   public MessageDestinationReferenceMetaData getMessageDestinationReferenceByName(String name)
-   {
-      return AbstractMappedMetaData.getByName(name, getMessageDestinationReferences());
-   }
-
-   @XmlTransient
-   public MessageDestinationReferencesMetaData getMessageDestinationReferences()
-   {
-      return getMergedEnvironment().getMessageDestinationReferences();
-   }
-
-   @XmlTransient
-   public PersistenceContextReferenceMetaData getPersistenceContextReferenceByName(String name)
-   {
-      return AbstractMappedMetaData.getByName(name, getPersistenceContextRefs());
-   }
-
-   @XmlTransient
-   public PersistenceContextReferencesMetaData getPersistenceContextRefs()
-   {
-      return getMergedEnvironment().getPersistenceContextRefs();
-   }
-
-   @XmlTransient
-   public PersistenceUnitReferenceMetaData getPersistenceUnitReferenceByName(String name)
-   {
-      return AbstractMappedMetaData.getByName(name, getPersistenceUnitRefs());
-   }
-
-   @XmlTransient
-   public PersistenceUnitReferencesMetaData getPersistenceUnitRefs()
-   {
-      return getMergedEnvironment().getPersistenceUnitRefs();
-   }
-
-   @XmlTransient
-   public LifecycleCallbacksMetaData getPostConstructs()
-   {
-      return getMergedEnvironment().getPostConstructs();
-   }
-
-   @XmlTransient
-   public LifecycleCallbacksMetaData getPreDestroys()
-   {
-      return getMergedEnvironment().getPreDestroys();
-   }
-
-   @XmlTransient
-   public ResourceEnvironmentReferenceMetaData getResourceEnvironmentReferenceByName(String name)
-   {
-      return AbstractMappedMetaData.getByName(name, getResourceEnvironmentReferences());
-   }
-
-   @XmlTransient
-   public ResourceEnvironmentReferencesMetaData getResourceEnvironmentReferences()
-   {
-      return getMergedEnvironment().getResourceEnvironmentReferences();
-   }
-
-   @XmlTransient
-   public ResourceReferenceMetaData getResourceReferenceByName(String name)
-   {
-      return AbstractMappedMetaData.getByName(name, getResourceReferences());
-   }
-
-   @XmlTransient
-   public ResourceReferencesMetaData getResourceReferences()
-   {
-      return getMergedEnvironment().getResourceReferences();
-   }
-
-   @XmlTransient
-   public ServiceReferenceMetaData getServiceReferenceByName(String name)
-   {
-      return AbstractMappedMetaData.getByName(name, getServiceReferences());
-   }
-
-   @XmlTransient
-   public ServiceReferencesMetaData getServiceReferences()
-   {
-      return getMergedEnvironment().getServiceReferences();
-   }
-
-   /**
-    * Get the security identity
-    * 
-    * @return the security identity
-    */
-   public SecurityIdentityMetaData getSecurityIdentity()
-   {
-      return securityIdentity;
-   }
-   public void setSecurityIdentity(SecurityIdentityMetaData securityIdentity)
-   {
-      this.securityIdentity = securityIdentity;
-   }
-
-   /**
     * Access the RunAsIdentity associated with the given servlet
     * @param servletName - the servlet-name from the web.xml
     * @return RunAsIdentity for the servet if one exists, null otherwise
     */
    @XmlTransient
-   public SecurityRoleMetaData getRunAsIdentity(String servletName)
+   public RunAsIdentityMetaData getRunAsIdentity(String servletName)
    {
-      SecurityRoleMetaData srmd = runAsIdentity.get(servletName);
-      if (srmd == null)
+      RunAsIdentityMetaData identity = runAsIdentity.get(servletName);
+      if (identity == null)
       {
-         ServletsMetaData servlets = getMergedServlets();
+         JBossServletsMetaData servlets = getServlets();
          if(servlets != null)
          {
             ServletMetaData servlet = servlets.get(servletName);
@@ -729,42 +890,273 @@
                   if (runAs != null)
                   {
                      String roleName = runAs.getRoleName();
-                     srmd = new SecurityRoleMetaData();
-                     srmd.setName(roleName);
-                     runAsIdentity.put(servletName, srmd);
+                     identity = new RunAsIdentityMetaData(roleName, null);
+                     runAsIdentity.put(servletName, identity);
                   }
                }
             }
          }
       }
-      return srmd;
+      return identity;
    }
 
-   @XmlTransient
-   public List<SecurityConstraintMetaData> getSecurityContraints()
-   {
-      return getOverridenMetaData().getSecurityContraints();
-   }
-
    /**
     *
     * @return servlet/run-as <String servlet-name, SecurityRoleMetaData>
     */
-   public Map<String, SecurityRoleMetaData> getRunAsIdentity()
+   public Map<String, RunAsIdentityMetaData> getRunAsIdentity()
    {
       return runAsIdentity;
    }
 
    /** The jboss-web.xml servlet/run-as <String servlet-name, SecurityRoleMetaData>
     */
-   public void setRunAsIdentity(Map<String, SecurityRoleMetaData> runAsIdentity)
+   public void setRunAsIdentity(Map<String, RunAsIdentityMetaData> runAsIdentity)
    {
       this.runAsIdentity.clear();
       this.runAsIdentity.putAll(runAsIdentity);
    }
 
+   
    public void mergeSecurityRoles(SecurityRolesMetaData roles)
    {
+      if(this.securityRoles == null)
+         securityRoles = roles;
+      else
+         securityRoles.merge(roles, null);
+   }
+   public void merge(JBossWebMetaData override, WebMetaData original)
+   {
+      this.merge(override, original, "jboss-web.xml", "web.xml", false);
+   }
+   public void merge(JBossWebMetaData override, WebMetaData original,
+         String overrideFile, String overridenFile, boolean mustOverride)
+   {
+      super.merge(override, original);
+
+      if(override != null && override.servletVersion!= null)
+         setServletVersion(override.servletVersion);
+      else if(original != null && original.getVersion() != null)
+         setServletVersion(original.getVersion());
+
+      if(override != null && override.distributable!= null)
+         setDistributable(override.distributable);
+      else if(original != null && original.getDistributable() != null)
+         setDistributable(original.getDistributable());
+
+      if(override != null && override.metadataComplete != false)
+         setMetadataComplete(override.metadataComplete);
+      else if(original != null && (original instanceof Web25MetaData) )
+      {
+         Web25MetaData web25MD = (Web25MetaData) original;
+         setMetadataComplete(web25MD.isMetadataComplete());
+      }
+
+      if(override != null && override.contextParams!= null)
+         setContextParams(override.contextParams);
+      else if(original != null && original.getContextParams() != null)
+         setContextParams(original.getContextParams());
       
+      if(override != null && override.sessionConfig!= null)
+         setSessionConfig(override.sessionConfig);
+      else if(original != null && original.getSessionConfig() != null)
+         setSessionConfig(original.getSessionConfig());
+      
+      if(override != null && override.filters!= null)
+         setFilters(override.filters);
+      else if(original != null && original.getFilters() != null)
+         setFilters(original.getFilters());
+      
+      if(override != null && override.filterMappings!= null)
+         setFilterMappings(override.filterMappings);
+      else if(original != null && original.getFilterMappings() != null)
+         setFilterMappings(original.getFilterMappings());
+      
+      if(override != null && override.errorPages!= null)
+         setErrorPages(override.errorPages);
+      else if(original != null && original.getErrorPages() != null)
+         setErrorPages(original.getErrorPages());
+      
+      if(override != null && override.jspConfig!= null)
+         setJspConfig(override.jspConfig);
+      else if(original != null && original.getJspConfig() != null)
+         setJspConfig(original.getJspConfig());
+      
+      if(override != null && override.listeners!= null)
+         setListeners(override.listeners);
+      else if(original != null && original.getListeners() != null)
+         setListeners(original.getListeners());
+      
+      if(override != null && override.loginConfig!= null)
+         setLoginConfig(override.loginConfig);
+      else if(original != null && original.getLoginConfig() != null)
+         setLoginConfig(original.getLoginConfig());
+      
+      if(override != null && override.mimeMappings!= null)
+         setMimeMappings(override.mimeMappings);
+      else if(original != null && original.getMimeMappings() != null)
+         setMimeMappings(original.getMimeMappings());
+      
+      if(override != null && override.servletMappings!= null)
+         setServletMappings(override.servletMappings);
+      else if(original != null && original.getServletMappings() != null)
+         setServletMappings(original.getServletMappings());
+      
+      if(override != null && override.securityContraints!= null)
+         setSecurityContraints(override.securityContraints);
+      else if(original != null && original.getSecurityContraints() != null)
+         setSecurityContraints(original.getSecurityContraints());
+      
+      if(override != null && override.welcomeFileList!= null)
+         setWelcomeFileList(override.welcomeFileList);
+      else if(original != null && original.getWelcomeFileList() != null)
+         setWelcomeFileList(original.getWelcomeFileList());
+      
+      if(override != null && override.localEncodings!= null)
+         setLocalEncodings(override.localEncodings);
+      else if(original != null && original.getLocalEncodings() != null)
+         setLocalEncodings(original.getLocalEncodings());
+      
+      if(override != null && override.dtdPublicId != null)
+         this.dtdPublicId = override.dtdPublicId;
+      
+      if(override != null && override.dtdSystemId != null)
+         this.dtdSystemId = override.dtdSystemId;
+      
+      if(override != null && override.version!= null)
+         setVersion(override.version);
+      else if(original != null && original.getVersion() != null)
+         setVersion(original.getVersion());
+      
+      if(override != null && override.contextRoot!= null)
+         setContextRoot(override.contextRoot);
+      
+      if(override != null && override.alternativeDD!= null)
+         setAlternativeDD(override.alternativeDD);
+      
+      if(override != null && override.securityDomain!= null)
+         setSecurityDomain(override.securityDomain);
+      
+      if(override != null && override.jaccContextID!= null)
+         setJaccContextID(override.jaccContextID);
+      
+      if(override != null && override.classLoading!= null)
+         setClassLoading(override.classLoading);
+      
+      if(override != null && override.depends!= null)
+         setDepends(override.depends);
+      
+      if(override != null && override.runAsIdentity!= null)
+         setRunAsIdentity(override.runAsIdentity);
+
+      if(securityRoles == null)
+         securityRoles = new SecurityRolesMetaData();
+      SecurityRolesMetaData overrideRoles = null;
+      SecurityRolesMetaData originalRoles = null;
+      if(override != null)
+         overrideRoles = override.getSecurityRoles();
+      if(original != null)
+         originalRoles = original.getSecurityRoles();
+      securityRoles.merge(overrideRoles, originalRoles);
+
+      JBossServletsMetaData soverride = null;
+      ServletsMetaData soriginal = null;
+      if(override != null)
+         soverride = override.getServlets();
+      if(original != null)
+         soriginal = original.getServlets();
+      servlets = JBossServletsMetaData.merge(soverride, soriginal);
+
+      MessageDestinationsMetaData overrideMsgDests = null;
+      MessageDestinationsMetaData originalMsgDests = null;
+      if(override != null && override.messageDestinations!= null)
+         overrideMsgDests = override.messageDestinations;
+      if(original != null && original.getMessageDestinations() != null)
+         originalMsgDests = original.getMessageDestinations();
+      this.messageDestinations = MessageDestinationsMetaData.merge(overrideMsgDests,
+            originalMsgDests, overridenFile, overrideFile);
+
+      if(this.jndiEnvironmentRefsGroup == null)
+         jndiEnvironmentRefsGroup = new JBossEnvironmentRefsGroupMetaData();
+      Environment env = null;
+      JBossEnvironmentRefsGroupMetaData jenv = null;
+      if( override != null )
+         jenv = override.jndiEnvironmentRefsGroup;
+      if(original != null)
+         env = original.getJndiEnvironmentRefsGroup();
+      jndiEnvironmentRefsGroup.merge(jenv, env, null, overrideFile, overridenFile, mustOverride);
+
+      if(override != null && override.virtualHosts!= null)
+         setVirtualHosts(override.virtualHosts);
+      
+      if(override != null && override.flushOnSessionInvalidation)
+         setFlushOnSessionInvalidation(override.flushOnSessionInvalidation);
+      
+      if(override != null && override.useSessionCookies)
+         setUseSessionCookies(override.useSessionCookies);
+      
+      if(override != null && override.replicationConfig!= null)
+         setReplicationConfig(override.replicationConfig);
+      
+      if(override != null && override.passivationConfig!= null)
+         setPassivationConfig(override.passivationConfig);
+      
+      if(override != null && override.webserviceDescriptions!= null)
+         setWebserviceDescriptions(override.webserviceDescriptions);
+      
+      if(override != null && override.configName!= null)
+         setConfigName(override.configName);
+      
+      if(override != null && override.configFile!= null)
+         setConfigFile(override.configFile);
+      
+      if(override != null && override.arbitraryMetadata!= null)
+         setArbitraryMetadata(override.arbitraryMetadata);
+      
+      if(override != null && override.invalidateSessionPolicy >= 0)
+         setInvalidateSessionPolicy(override.invalidateSessionPolicy);
+      
+      if(override != null && override.replicationGranularity >= 0)
+         setReplicationGranularity(override.replicationGranularity);
+      
+      if(override != null && override.replicationFieldBatchMode)
+         setReplicationFieldBatchMode(override.replicationFieldBatchMode);
+      
+      if(override != null && override.maxActiveSessions != -1)
+         setMaxActiveSession(override.maxActiveSessions);
+      
+      if(override != null && override.sessionCookies != -1)
+         setSessionCookies(override.sessionCookies);
+
+      // Update run-as indentity for a run-as-principal
+      if(servlets != null)
+      {
+         for(JBossServletMetaData servlet : servlets)
+         {
+            String servletName = servlet.getServletName();
+            String principalName = servlet.getRunAsPrincipal();
+            // Get the web.xml run-as primary role
+            String webXmlRunAs = null;
+            if(servlet.getRunAs() != null)
+               webXmlRunAs = servlet.getRunAs().getRoleName();
+            if (principalName != null)
+            {
+               // Update the run-as indentity to use the principal name
+               if (webXmlRunAs == null)
+               {
+                  throw new IllegalStateException("run-as-principal: " + principalName + " found in jboss-web.xml but there was no run-as in web.xml");
+               }
+               // See if there are any additional roles for this principal
+               Set<String> extraRoles = securityRoles.getSecurityRoleNamesByPrincipal(principalName);
+               RunAsIdentityMetaData runAsId = new RunAsIdentityMetaData(webXmlRunAs, principalName, extraRoles);
+               runAsIdentity.put(servletName, runAsId);
+            }
+            else if (webXmlRunAs != null)
+            {
+               RunAsIdentityMetaData runAsId = new RunAsIdentityMetaData(webXmlRunAs, null);
+               runAsIdentity.put(servletName, runAsId);
+            }
+         }
+      }
    }
 }

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/web/spec/ServletMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/web/spec/ServletMetaData.java	2007-10-28 20:12:14 UTC (rev 66521)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/web/spec/ServletMetaData.java	2007-10-28 20:33:49 UTC (rev 66522)
@@ -28,6 +28,7 @@
 import org.jboss.metadata.javaee.spec.ParamValueMetaData;
 import org.jboss.metadata.javaee.spec.RunAsMetaData;
 import org.jboss.metadata.javaee.spec.SecurityRoleRefsMetaData;
+import org.jboss.metadata.javaee.support.MergeableMetaData;
 import org.jboss.metadata.javaee.support.NamedMetaDataWithDescriptionGroup;
 
 /**
@@ -37,6 +38,7 @@
  * @version $Revision$
  */
 public class ServletMetaData extends NamedMetaDataWithDescriptionGroup
+   implements MergeableMetaData<ServletMetaData>
 {
    private static final long serialVersionUID = 1;
 
@@ -109,6 +111,41 @@
       this.securityRoleRefs = securityRoleRefs;
    }
 
+   public ServletMetaData merge(ServletMetaData original)
+   {
+      ServletMetaData merged = new ServletMetaData();
+      merged.merge(this, original);
+      return merged;
+   }
+   public void merge(ServletMetaData override, ServletMetaData original)
+   {
+      super.merge(override, original);
+      if(override != null && override.servletClass != null)
+         setServletClass(override.servletClass);
+      else if(original != null && original.servletClass != null)
+         setServletClass(original.servletClass);
+      if(override != null && override.jspFile != null)
+         setJspFile(override.jspFile);
+      else if(original != null && original.jspFile != null)
+         setJspFile(original.jspFile);
+      if(override != null && override.initParam != null)
+         setInitParam(override.initParam);
+      else if(original != null && original.initParam != null)
+         setInitParam(original.initParam);
+      if(override != null && override.loadOnStartup > 0)
+         setLoadOnStartup(override.loadOnStartup);
+      else if(original != null && original.loadOnStartup > 0)
+         setLoadOnStartup(original.loadOnStartup);
+      if(override != null && override.runAs != null)
+         setRunAs(override.runAs);
+      else if(original != null && original.runAs != null)
+         setRunAs(original.runAs);
+      if(override != null && override.securityRoleRefs != null)
+         setSecurityRoleRefs(override.securityRoleRefs);
+      else if(original != null && original.securityRoleRefs != null)
+         setSecurityRoleRefs(original.securityRoleRefs);
+   }
+
    public String toString()
    {
       StringBuilder tmp = new StringBuilder("ServletMetaData(id=");

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/web/spec/WebMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/web/spec/WebMetaData.java	2007-10-28 20:12:14 UTC (rev 66521)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/web/spec/WebMetaData.java	2007-10-28 20:33:49 UTC (rev 66522)
@@ -322,11 +322,14 @@
     * @param jndiEnvironmentRefsGroup the jndiEnvironmentRefsGroup.
     * @throws IllegalArgumentException for a null jndiEnvironmentRefsGroup
     */
-   public void setJndiEnvironmentRefsGroup(EnvironmentRefsGroupMetaData jndiEnvironmentRefsGroup)
+   public void setJndiEnvironmentRefsGroup(EnvironmentRefsGroupMetaData env)
    {
-      if (jndiEnvironmentRefsGroup == null)
+      if (env == null)
          throw new IllegalArgumentException("Null jndiEnvironmentRefsGroup");
-      this.jndiEnvironmentRefsGroup = jndiEnvironmentRefsGroup;
+      if(jndiEnvironmentRefsGroup != null)
+         jndiEnvironmentRefsGroup.merge(env, null, "jboss-web.xml", "web.xml", false);
+      else
+         this.jndiEnvironmentRefsGroup = env;
    }
 
    public EJBLocalReferenceMetaData getEjbLocalReferenceByName(String name)

Modified: projects/metadata/trunk/src/test/java/org/jboss/test/metadata/web/JBossWebApp24UnitTestCase.java
===================================================================
--- projects/metadata/trunk/src/test/java/org/jboss/test/metadata/web/JBossWebApp24UnitTestCase.java	2007-10-28 20:12:14 UTC (rev 66521)
+++ projects/metadata/trunk/src/test/java/org/jboss/test/metadata/web/JBossWebApp24UnitTestCase.java	2007-10-28 20:33:49 UTC (rev 66522)
@@ -21,11 +21,37 @@
  */
 package org.jboss.test.metadata.web;
 
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.jboss.annotation.javaee.Descriptions;
 import org.jboss.metadata.common.jboss.LoaderRepositoryMetaData;
+import org.jboss.metadata.javaee.jboss.RunAsIdentityMetaData;
+import org.jboss.metadata.javaee.spec.EJBLocalReferenceMetaData;
+import org.jboss.metadata.javaee.spec.EJBReferenceMetaData;
+import org.jboss.metadata.javaee.spec.EJBReferenceType;
+import org.jboss.metadata.javaee.spec.EnvironmentEntryMetaData;
+import org.jboss.metadata.javaee.spec.MessageDestinationMetaData;
+import org.jboss.metadata.javaee.spec.MessageDestinationReferenceMetaData;
+import org.jboss.metadata.javaee.spec.MessageDestinationUsageType;
+import org.jboss.metadata.javaee.spec.ParamValueMetaData;
+import org.jboss.metadata.javaee.spec.ResourceAuthorityType;
+import org.jboss.metadata.javaee.spec.ResourceEnvironmentReferenceMetaData;
+import org.jboss.metadata.javaee.spec.ResourceReferenceMetaData;
+import org.jboss.metadata.javaee.spec.RunAsMetaData;
+import org.jboss.metadata.javaee.spec.SecurityRoleMetaData;
+import org.jboss.metadata.javaee.spec.SecurityRoleRefMetaData;
+import org.jboss.metadata.javaee.spec.SecurityRoleRefsMetaData;
+import org.jboss.metadata.javaee.spec.SecurityRolesMetaData;
 import org.jboss.metadata.web.jboss.ClassLoadingMetaData;
 import org.jboss.metadata.web.jboss.JBoss50DTDWebMetaData;
+import org.jboss.metadata.web.jboss.JBossServletMetaData;
 import org.jboss.metadata.web.jboss.JBossWebMetaData;
+import org.jboss.metadata.web.spec.Web24MetaData;
+import org.jboss.metadata.web.spec.WebMetaData;
 import org.jboss.test.metadata.javaee.AbstractJavaEEEverythingTest;
+import org.jboss.xb.binding.sunday.unmarshalling.DefaultSchemaResolver;
 import org.jboss.xb.binding.sunday.unmarshalling.SchemaBindingResolver;
 
 
@@ -39,7 +65,11 @@
 {
    public static SchemaBindingResolver initResolver()
    {
-      return schemaResolverForClass(JBoss50DTDWebMetaData.class);
+      DefaultSchemaResolver resolver = new DefaultSchemaResolver();
+      resolver.addClassBindingForLocation("web-app_2_4.xsd", Web24MetaData.class);
+      resolver.addClassBindingForLocation("jboss-web_4_0.dtd", JBoss50DTDWebMetaData.class);
+      resolver.addClassBindingForLocation("jboss-web_4_2.dtd", JBoss50DTDWebMetaData.class);
+      return resolver;
    }
 
    public JBossWebApp24UnitTestCase(String name)
@@ -58,9 +88,288 @@
       assertNotNull(loaderRepository);
       assertEquals("jbossws.jbws1581:domain=jaxws-jbws1581.war", loaderRepository.getName());
    }
-   
+
+   public void testRunAsPrincipal()
+      throws Exception
+   {
+      JBossWebMetaData jbossWeb = unmarshal();
+      assertEquals("4.0", jbossWeb.getVersion());
+      assertEquals("java:/jaas/jbosstest-web", jbossWeb.getSecurityDomain());
+      ResourceReferenceMetaData dsRef = jbossWeb.getResourceReferenceByName("jdbc/DefaultDS");
+      assertEquals("java:/DefaultDS", dsRef.getMappedName());
+   }
+   public void testMergedRunAsPrincipal()
+      throws Exception
+   {
+      WebMetaData webMD = unmarshal("WebApp24_testRunAsPrincipal.xml", WebMetaData.class, null);
+      JBossWebMetaData jbossWebMD = unmarshal("JBossWebApp24_testRunAsPrincipal.xml", JBossWebMetaData.class, null);
+      JBossWebMetaData jbossWeb = new JBossWebMetaData();
+      jbossWeb.merge(jbossWebMD, webMD);
+
+      assertEquals("4.0", jbossWeb.getVersion());
+      assertEquals("java:/jaas/jbosstest-web", jbossWeb.getSecurityDomain());
+      assertEquals(5, jbossWeb.getResourceReferences().size());
+      // jdbc/DefaultDS
+      ResourceReferenceMetaData dsRef = jbossWeb.getResourceReferenceByName("jdbc/DefaultDS");
+      assertEquals("jdbc/DefaultDS", dsRef.getResourceRefName());
+      assertEquals("The default DS", dsRef.getDescriptions().value()[0].value());
+      assertEquals("java:/DefaultDS", dsRef.getMappedName());
+      assertEquals("javax.sql.DataSource", dsRef.getType());
+      assertEquals(ResourceAuthorityType.Container, dsRef.getResAuth());
+      // mail/DefaultMail
+      ResourceReferenceMetaData mailRef = jbossWeb.getResourceReferenceByName("mail/DefaultMail");
+      assertEquals("mail/DefaultMail", mailRef.getResourceRefName());
+      assertEquals("Default Mail", mailRef.getDescriptions().value()[0].value());
+      assertEquals("java:/Mail", mailRef.getMappedName());
+      assertEquals("javax.mail.Session", mailRef.getType());
+      assertEquals(ResourceAuthorityType.Container, mailRef.getResAuth());
+      // url/JBossHome
+      ResourceReferenceMetaData jbossUrlRef = jbossWeb.getResourceReferenceByName("url/JBossHome");
+      assertEquals("url/JBossHome", jbossUrlRef.getResourceRefName());
+      assertEquals("JBoss Home Page", jbossUrlRef.getDescriptions().value()[0].value());
+      assertEquals("http://www.jboss.org", jbossUrlRef.getResUrl());
+      assertEquals("java.net.URL", jbossUrlRef.getType());
+      assertEquals(ResourceAuthorityType.Container, jbossUrlRef.getResAuth());
+      // url/IndirectURL
+      ResourceReferenceMetaData indirectUrlRef = jbossWeb.getResourceReferenceByName("url/IndirectURL");
+      assertEquals("url/IndirectURL", indirectUrlRef.getResourceRefName());
+      assertEquals("SomeWebSite HomePage", indirectUrlRef.getDescriptions().value()[0].value());
+      assertEquals("java:SomeWebSite", indirectUrlRef.getMappedName());
+      assertEquals("java.net.URL", indirectUrlRef.getType());
+      assertEquals(ResourceAuthorityType.Container, indirectUrlRef.getResAuth());
+
+      assertEquals(2, jbossWeb.getResourceEnvironmentReferences().size());
+      ResourceEnvironmentReferenceMetaData resenv1 = jbossWeb.getResourceEnvironmentReferenceByName("res1/aQueue");
+      assertEquals("resenv1", resenv1.getId());
+      assertEquals("res1/aQueue", resenv1.getResourceEnvRefName());
+      assertEquals("A 1st test of the resource-env-ref tag", resenv1.getDescriptions().value()[0].value());
+      assertEquals("javax.jms.Queue", resenv1.getType());
+      assertEquals("queue/mdbtest", resenv1.getJndiName());
+      assertEquals("queue/mdbtest", resenv1.getMappedName());
+      ResourceEnvironmentReferenceMetaData resenv2 = jbossWeb.getResourceEnvironmentReferenceByName("res2/aQueue");
+      assertEquals("resenv2", resenv2.getId());
+      assertEquals("res2/aQueue", resenv2.getResourceEnvRefName());
+      assertEquals("A 2nd test of the resource-env-ref tag", resenv2.getDescriptions().value()[0].value());
+      assertEquals("javax.jms.Queue", resenv2.getType());
+      assertEquals("queue/mdbtest", resenv2.getJndiName());
+      assertEquals("queue/mdbtest", resenv2.getMappedName());
+
+      SecurityRolesMetaData secRoles = jbossWeb.getSecurityRoles();
+      assertEquals(6, secRoles.size());
+      SecurityRoleMetaData role1 = secRoles.get("AuthorizedUser");
+      assertNotNull(role1);
+      assertEquals("security-role1", role1.getId());
+      assertEquals("AuthorizedUser", role1.getRoleName());
+      assertEquals("An AuthorizedUser is one with a valid username and password", getDescription(role1.getDescriptions()));
+      assertEquals(null, role1.getPrincipals());
+      SecurityRoleMetaData role2 = secRoles.get("ServletUserRole");
+      assertEquals("security-role2", role2.getId());
+      assertEquals("ServletUserRole", role2.getRoleName());
+      assertEquals("A role used by the UserInRoleServlet", getDescription(role2.getDescriptions()));
+      assertEquals(null, role2.getPrincipals());
+      SecurityRoleMetaData role3 = secRoles.get("InternalUser");
+      assertEquals("security-role3", role3.getId());
+      assertEquals("InternalUser", role3.getRoleName());
+      assertEquals("InternalUser is private app role", getDescription(role3.getDescriptions()));
+      assertEquals(null, role3.getPrincipals());
+      SecurityRoleMetaData role4 = secRoles.get("ExtraRole1");
+      assertEquals("security-role4", role4.getId());
+      assertEquals("ExtraRole1", role4.getRoleName());
+      assertEquals("ExtraRole1 is an extra role added to a run-as principal", getDescription(role4.getDescriptions()));
+      assertEquals(set("UnsecureRunAsServletWithPrincipalNameAndRolesPrincipal"), role4.getPrincipals());
+      SecurityRoleMetaData role5 = secRoles.get("ExtraRole2");
+      assertEquals("security-role5", role5.getId());
+      assertEquals("ExtraRole2", role5.getRoleName());
+      assertEquals("ExtraRole2 is an extra role added to a run-as principal", getDescription(role5.getDescriptions()));
+      assertEquals(set("ExtraRole2Principal1", "ExtraRole2Principal2"), role5.getPrincipals());
+      SecurityRoleMetaData role6 = secRoles.get("NonExistentRole");
+      assertEquals("security-role6", role6.getId());
+      assertEquals("NonExistentRole", role6.getRoleName());
+      assertEquals("Role that does not exist", getDescription(role6.getDescriptions()));
+      assertEquals(null, role6.getPrincipals());
+
+      assertEquals(7, jbossWeb.getEnvironmentEntries().size());
+      EnvironmentEntryMetaData env1 = jbossWeb.getEnvironmentEntryByName("Ints/i0");
+      assertEquals("Ints/i0", env1.getEnvEntryName());
+      assertEquals("java.lang.Integer", env1.getType());
+      assertEquals("0", env1.getValue());
+      EnvironmentEntryMetaData env7 = jbossWeb.getEnvironmentEntryByName("ejb/catalog/CatalogDAOClass");
+      assertEquals("env7", env7.getId());
+      assertEquals("ejb/catalog/CatalogDAOClass", env7.getEnvEntryName());
+      assertEquals("An entry with a class name", getDescription(env7.getDescriptions()));
+      assertEquals("java.lang.String", env7.getType());
+      assertEquals("com.sun.model.dao.CatalogDAOImpl", env7.getValue());
+
+      assertEquals(13, jbossWeb.getEjbReferences().size());
+      // ejb/bean0
+      EJBReferenceMetaData ejb1 = jbossWeb.getEjbReferenceByName("ejb/bean0");
+      assertEquals("ejb1", ejb1.getId());
+      assertEquals("ejb/bean0", ejb1.getEjbRefName());
+      assertEquals(EJBReferenceType.Session, ejb1.getEjbRefType());
+      assertEquals("org.jboss.test.web.interfaces.StatelessSessionHome", ejb1.getHome());
+      assertEquals("org.jboss.test.web.interfaces.StatelessSession", ejb1.getRemote());
+      assertEquals("ENCBean0", ejb1.getLink());
+      assertEquals(null, ejb1.getJndiName());
+      // ejb/bean1
+      EJBReferenceMetaData ejb4 = jbossWeb.getEjbReferenceByName("ejb/bean3");
+      assertEquals("ejb4", ejb4.getId());
+      assertEquals("ejb/bean3", ejb4.getEjbRefName());
+      assertEquals(EJBReferenceType.Session, ejb4.getEjbRefType());
+      assertEquals("org.jboss.test.web.interfaces.StatelessSessionHome", ejb4.getHome());
+      assertEquals("org.jboss.test.web.interfaces.StatelessSession", ejb4.getRemote());
+      assertEquals(null, ejb4.getLink());
+      assertEquals("jbosstest/ejbs/UnsecuredEJB", ejb4.getJndiName());
+      assertEquals("jbosstest/ejbs/UnsecuredEJB", ejb4.getMappedName());
+      jbossWeb.getEjbReferenceByName("ejb/RelativeBean");
+
+      assertEquals(8, jbossWeb.getEjbLocalReferences().size());
+      EJBLocalReferenceMetaData local3 = jbossWeb.getEjbLocalReferenceByName("ejb/local/bean3");
+      assertEquals("local3", local3.getId());
+      assertEquals("ejb/local/bean3", local3.getEjbRefName());
+      assertEquals(EJBReferenceType.Session, local3.getEjbRefType());
+      assertEquals("org.jboss.test.web.interfaces.StatelessSessionLocalHome", local3.getLocalHome());
+      assertEquals("org.jboss.test.web.interfaces.StatelessSessionLocal", local3.getLocal());
+      assertEquals(null, local3.getLink());
+      assertEquals("jbosstest/ejbs/local/ENCBean1", local3.getJndiName());
+      assertEquals("jbosstest/ejbs/local/ENCBean1", local3.getMappedName());
+      // ejb/UnsecureRunAsServletWithPrincipalNameAndRolesTarget
+      EJBLocalReferenceMetaData local8 = jbossWeb.getEjbLocalReferenceByName("ejb/UnsecureRunAsServletWithPrincipalNameAndRolesTarget");
+      assertEquals("local8", local8.getId());
+      assertEquals("ejb/UnsecureRunAsServletWithPrincipalNameAndRolesTarget", local8.getEjbRefName());
+      assertEquals(EJBReferenceType.Session, local8.getEjbRefType());
+      assertEquals("org.jboss.test.web.interfaces.RunAsTargetLocalHome", local8.getLocalHome());
+      assertEquals("org.jboss.test.web.interfaces.RunAsTargetLocal", local8.getLocal());
+      assertEquals("UnsecureRunAsServletWithPrincipalNameAndRolesTarget", local8.getLink());
+      assertEquals(null, local8.getJndiName());
+
+      // mdr/ConsumesLink
+      assertEquals(3, jbossWeb.getMessageDestinationReferences().size());
+      MessageDestinationReferenceMetaData mref1 = jbossWeb.getMessageDestinationReferenceByName("mdr/ConsumesLink");
+      assertEquals("msgref1", mref1.getId());
+      assertEquals("mdr/ConsumesLink", mref1.getMessageDestinationRefName());
+      assertEquals("javax.jms.Queue", mref1.getType());
+      assertEquals(MessageDestinationUsageType.Consumes, mref1.getMessageDestinationUsage());
+      assertEquals("TestQueue", mref1.getLink());
+      // mdr/ConsumesProducesJNDIName
+      MessageDestinationReferenceMetaData mref3 = jbossWeb.getMessageDestinationReferenceByName("mdr/ConsumesProducesJNDIName");
+      assertEquals("msgref3", mref3.getId());
+      assertEquals("mdr/ConsumesProducesJNDIName", mref3.getMessageDestinationRefName());
+      assertEquals("javax.jms.Queue", mref3.getType());
+      assertEquals(MessageDestinationUsageType.ConsumesProduces, mref3.getMessageDestinationUsage());
+      assertEquals(null, mref3.getLink());
+      assertEquals("queue/A", mref3.getJndiName());
+      assertEquals("queue/A", mref3.getMappedName());
+
+      assertEquals(2, jbossWeb.getMessageDestinations().size());
+      MessageDestinationMetaData msgdest1 = jbossWeb.getMessageDestination("TestQueue");
+      assertEquals("msgdest1", msgdest1.getId());
+      assertEquals("A TestQueue destination", msgdest1.getDescriptionGroup().getDescription());
+      assertEquals("TestQueue", msgdest1.getMessageDestinationName());
+      assertEquals("queue/testQueue", msgdest1.getJndiName());
+      assertEquals("queue/testQueue", msgdest1.getMappedName());
+      MessageDestinationMetaData msgdest2 = jbossWeb.getMessageDestination("TestTopic");
+      assertEquals("msgdest2", msgdest2.getId());
+      assertEquals("A TestTopic destination", msgdest2.getDescriptionGroup().getDescription());
+      assertEquals("TestTopic", msgdest2.getMessageDestinationName());
+      assertEquals("topic/testTopic", msgdest2.getJndiName());
+      assertEquals("topic/testTopic", msgdest2.getMappedName());
+
+      // servlets
+      assertEquals(30, jbossWeb.getServlets().size());
+      JBossServletMetaData servlet1 = jbossWeb.getServletByName("APIServlet");
+      assertNotNull(servlet1);
+      assertEquals("servlet1", servlet1.getId());
+      assertEquals("org.jboss.test.web.servlets.APIServlet", servlet1.getServletClass());
+      JBossServletMetaData servlet2 = jbossWeb.getServletByName("ClasspathServlet");
+      assertNotNull(servlet2);
+      assertEquals("servlet2", servlet2.getId());
+      assertEquals("org.jboss.test.web.servlets.ClasspathServlet", servlet2.getServletClass());
+      assertEquals(1, servlet2.getLoadOnStartup());
+      // servlet10
+      JBossServletMetaData servlet10 = jbossWeb.getServletByName("EJBOnStartupServlet");
+      assertNotNull(servlet10);
+      assertEquals("servlet10", servlet10.getId());
+      assertEquals("EJBOnStartupServlet", servlet10.getServletName());
+      assertEquals("org.jboss.test.web.servlets.EJBOnStartupServlet", servlet10.getServletClass());
+      assertEquals(1, servlet10.getLoadOnStartup());
+      List<ParamValueMetaData> s10params = servlet10.getInitParam();
+      assertEquals(1, s10params.size());
+      ParamValueMetaData s10p0 = s10params.get(0);
+      assertEquals("failOnError", s10p0.getParamName());
+      assertEquals("false", s10p0.getParamValue());
+      // servlet19
+      JBossServletMetaData servlet19 = jbossWeb.getServletByName("UnsecureRunAsServletWithPrincipalNameAndRoles");
+      assertNotNull(servlet19);
+      assertEquals("servlet19", servlet19.getId());
+      assertEquals("UnsecureRunAsServletWithPrincipalNameAndRoles", servlet19.getServletName());
+      assertEquals("org.jboss.test.web.servlets.UnsecureRunAsServlet", servlet19.getServletClass());
+      List<ParamValueMetaData> s19params = servlet19.getInitParam();
+      assertEquals(1, s19params.size());
+      ParamValueMetaData s19p0 = s19params.get(0);
+      assertEquals("ejbName", s19p0.getParamName());
+      assertEquals("ejb/UnsecureRunAsServletWithPrincipalNameAndRolesTarget", s19p0.getParamValue());
+      RunAsMetaData s19RunAs = servlet19.getRunAs();
+      assertEquals("Assume an InternalUser role to access a private EJB", getDescription(s19RunAs.getDescriptions()));
+      assertEquals("InternalUser", s19RunAs.getRoleName());
+      assertEquals("UnsecureRunAsServletWithPrincipalNameAndRolesPrincipal", servlet19.getRunAsPrincipal());
+      RunAsIdentityMetaData s19RunAsID = jbossWeb.getRunAsIdentity("UnsecureRunAsServletWithPrincipalNameAndRoles");
+      assertEquals("UnsecureRunAsServletWithPrincipalNameAndRolesPrincipal", s19RunAsID.getPrincipalName());
+      Set<String> s19RunAsPrincipalRoles = jbossWeb.getSecurityRoles().getSecurityRoleNamesByPrincipal("UnsecureRunAsServletWithPrincipalNameAndRolesPrincipal");
+      assertEquals(set("ExtraRole1"), s19RunAsPrincipalRoles);
+      assertEquals(set("ExtraRole1", "InternalUser"), s19RunAsID.getRunAsRoles());
+      assertEquals(true, s19RunAsID.doesUserHaveRole("ExtraRole1"));
+      assertEquals(true, s19RunAsID.doesUserHaveRole("InternalUser"));
+      // servlet20
+      JBossServletMetaData servlet20 = jbossWeb.getServletByName("UnsecureRunAsJsp");
+      assertNotNull(servlet20);
+      assertEquals("servlet20", servlet20.getId());
+      assertEquals("UnsecureRunAsJsp", servlet20.getServletName());
+      assertEquals(null, servlet20.getServletClass());
+      assertEquals("/runAs.jsp", servlet20.getJspFile());
+      RunAsMetaData s20RunAs = servlet20.getRunAs();
+      assertEquals("Assume an InternalUser role to access a private EJB", getDescription(s19RunAs.getDescriptions()));
+      assertEquals("InternalUser", s20RunAs.getRoleName());
+      assertEquals(null, servlet20.getRunAsPrincipal());
+      RunAsIdentityMetaData s20RunAsID = jbossWeb.getRunAsIdentity("UnsecureRunAsJsp");
+      assertEquals("anonymous", s20RunAsID.getPrincipalName());
+      assertEquals(set("InternalUser"), s20RunAsID.getRunAsRoles());
+      assertEquals(true, s20RunAsID.doesUserHaveRole("InternalUser"));
+      // servlet27
+      JBossServletMetaData servlet27 = jbossWeb.getServletByName("UserInRoleServlet");
+      assertEquals("servlet27", servlet27.getId());
+      assertEquals("UserInRoleServlet", servlet27.getServletName());
+      assertEquals("org.jboss.test.web.servlets.UserInRoleServlet", servlet27.getServletClass());
+      List<ParamValueMetaData> s27params = servlet27.getInitParam();
+      assertEquals(2, s27params.size());
+      ParamValueMetaData s27p0 = s27params.get(0);
+      assertEquals("expectedUserRoles", s27p0.getParamName());
+      assertEquals("AuthorizedUser,ServletUser", s27p0.getParamValue());
+      ParamValueMetaData s27p1 = s27params.get(1);
+      assertEquals("unexpectedUserRoles", s27p1.getParamName());
+      assertEquals("Anonymous", s27p1.getParamValue());
+      SecurityRoleRefsMetaData s27RoleRefs = servlet27.getSecurityRoleRefs();
+      assertEquals(1, s27RoleRefs.size());
+      SecurityRoleRefMetaData s27ServletUser = s27RoleRefs.get("ServletUser");
+      assertEquals("ServletUser", s27ServletUser.getRoleName());
+      assertEquals("ServletUserRole", s27ServletUser.getRoleLink());
+   }
+
    protected JBossWebMetaData unmarshal() throws Exception
    {
-      return unmarshal(JBoss50DTDWebMetaData.class);
+      return unmarshal(JBossWebMetaData.class);
    }
+   protected String getDescription(Descriptions descriptions)
+   {
+      String desc = null;
+      if(descriptions != null)
+         desc = descriptions.value()[0].value();
+      return desc;
+   }
+   protected Set<String> set(String...strings)
+   {
+      HashSet<String> set = new HashSet<String>();
+      for(String s : strings)
+         set.add(s);
+      return set;
+   }
 }

Modified: projects/metadata/trunk/src/test/java/org/jboss/test/metadata/web/TomcatDeployerUnitTestCase.java
===================================================================
--- projects/metadata/trunk/src/test/java/org/jboss/test/metadata/web/TomcatDeployerUnitTestCase.java	2007-10-28 20:12:14 UTC (rev 66521)
+++ projects/metadata/trunk/src/test/java/org/jboss/test/metadata/web/TomcatDeployerUnitTestCase.java	2007-10-28 20:33:49 UTC (rev 66522)
@@ -54,8 +54,7 @@
 
    public void testConfweb23() throws Exception
    {
-      JBossWebMetaData jwebApp = unmarshal(Web23MetaData.class);
-      WebMetaData webApp = jwebApp.getOverridenMetaData();
+      JBossWebMetaData webApp = unmarshal(Web23MetaData.class);
       DescriptionGroupMetaData dg = webApp.getDescriptionGroup();
       assertNotNull(dg);
       assertEquals("TomcatDeployer_confweb.xml", dg.getDescription());
@@ -64,8 +63,7 @@
    }
    public void testConfweb24() throws Exception
    {
-      JBossWebMetaData jwebApp = unmarshal(Web24MetaData.class);
-      WebMetaData webApp = jwebApp.getOverridenMetaData();
+      JBossWebMetaData webApp = unmarshal(Web24MetaData.class);
       DescriptionGroupMetaData dg = webApp.getDescriptionGroup();
       assertNotNull(dg);
       assertEquals("TomcatDeployer_confweb.xml", dg.getDescription());
@@ -74,8 +72,7 @@
    }
    public void testConfweb25() throws Exception
    {
-      JBossWebMetaData jwebApp = unmarshal(Web25MetaData.class);
-      WebMetaData webApp = jwebApp.getOverridenMetaData();
+      JBossWebMetaData webApp = unmarshal(Web25MetaData.class);
       DescriptionGroupMetaData dg = webApp.getDescriptionGroup();
       assertNotNull(dg);
       assertEquals("TomcatDeployer_confweb.xml", dg.getDescription());
@@ -91,6 +88,7 @@
       name = name.substring(0, end) + "_" + super.getName() + ".xml";
       return unmarshal(name, clazz);
    }
+
    protected JBossWebMetaData unmarshal(String name, Class clazz)
       throws Exception
    {
@@ -102,7 +100,7 @@
       SchemaBinding schema = JBossXBBuilder.build(clazz);
       WebMetaData confWebMD = (WebMetaData) unmarshaller.unmarshal(webXml.toString(), schema);
       JBoss50WebMetaData sharedMetaData = new JBoss50WebMetaData();
-      sharedMetaData.setOverridenMetaData(confWebMD);
+      sharedMetaData.merge(null, confWebMD);
 
       return sharedMetaData;
    }

Added: projects/metadata/trunk/src/test/resources/org/jboss/test/metadata/web/JBossWebApp24_testRunAsPrincipal.xml
===================================================================
--- projects/metadata/trunk/src/test/resources/org/jboss/test/metadata/web/JBossWebApp24_testRunAsPrincipal.xml	                        (rev 0)
+++ projects/metadata/trunk/src/test/resources/org/jboss/test/metadata/web/JBossWebApp24_testRunAsPrincipal.xml	2007-10-28 20:33:49 UTC (rev 66522)
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE jboss-web PUBLIC
+   "-//JBoss//DTD Web Application 2.4//EN"
+   "http://www.jboss.org/j2ee/dtd/jboss-web_4_0.dtd">
+   
+<jboss-web>
+   <security-domain>java:/jaas/jbosstest-web</security-domain>
+
+    <resource-env-ref>
+        <resource-env-ref-name>res1/aQueue</resource-env-ref-name>
+        <jndi-name>queue/mdbtest</jndi-name>
+    </resource-env-ref>
+    <resource-env-ref>
+        <resource-env-ref-name>res2/aQueue</resource-env-ref-name>
+        <jndi-name>queue/mdbtest</jndi-name>
+    </resource-env-ref>
+    
+   <resource-ref>
+       <res-ref-name>jdbc/DefaultDS</res-ref-name>
+       <jndi-name>java:/DefaultDS</jndi-name>
+   </resource-ref>
+   <resource-ref>
+       <res-ref-name>mail/DefaultMail</res-ref-name>
+       <jndi-name>java:/Mail</jndi-name>
+   </resource-ref>
+   <resource-ref>
+       <res-ref-name>jms/QueFactory</res-ref-name>
+       <jndi-name>ConnectionFactory</jndi-name>
+   </resource-ref>
+   <resource-ref>
+       <res-ref-name>url/JBossHome</res-ref-name>
+       <res-url>http://www.jboss.org</res-url>
+   </resource-ref>
+   <resource-ref>
+       <res-ref-name>url/IndirectURL</res-ref-name>
+       <jndi-name>java:SomeWebSite</jndi-name>
+   </resource-ref>
+
+   <security-role>
+       <role-name>ExtraRole1</role-name>
+       <principal-name>UnsecureRunAsServletWithPrincipalNameAndRolesPrincipal</principal-name>
+   </security-role>
+   <security-role>
+       <role-name>ExtraRole2</role-name>
+       <principal-name>ExtraRole2Principal1</principal-name>
+       <principal-name>ExtraRole2Principal2</principal-name>
+   </security-role>
+   
+   <ejb-ref>
+       <ejb-ref-name>ejb/bean3</ejb-ref-name>
+       <jndi-name>jbosstest/ejbs/UnsecuredEJB</jndi-name>
+   </ejb-ref>
+   
+   <ejb-local-ref>
+       <ejb-ref-name>ejb/local/bean3</ejb-ref-name>
+       <local-jndi-name>jbosstest/ejbs/local/ENCBean1</local-jndi-name>
+   </ejb-local-ref>
+   
+   <message-destination-ref>
+       <message-destination-ref-name>mdr/ConsumesProducesJNDIName</message-destination-ref-name>
+       <jndi-name>queue/A</jndi-name>
+   </message-destination-ref>
+   
+   <message-destination>
+       <message-destination-name>TestQueue</message-destination-name>
+       <jndi-name>queue/testQueue</jndi-name>
+   </message-destination>
+   <message-destination>
+       <message-destination-name>TestTopic</message-destination-name>
+       <jndi-name>topic/testTopic</jndi-name>
+   </message-destination>
+   
+   <servlet>
+       <servlet-name>UnsecureRunAsServletWithPrincipalName</servlet-name>
+       <run-as-principal>UnsecureRunAsServletWithPrincipalNamePrincipal</run-as-principal>
+   </servlet>
+   <servlet>
+       <servlet-name>UnsecureRunAsServletWithPrincipalNameAndRoles</servlet-name>
+       <run-as-principal>UnsecureRunAsServletWithPrincipalNameAndRolesPrincipal</run-as-principal>
+   </servlet>
+   
+</jboss-web>


Property changes on: projects/metadata/trunk/src/test/resources/org/jboss/test/metadata/web/JBossWebApp24_testRunAsPrincipal.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + native

Added: projects/metadata/trunk/src/test/resources/org/jboss/test/metadata/web/WebApp24_testRunAsPrincipal.xml
===================================================================
--- projects/metadata/trunk/src/test/resources/org/jboss/test/metadata/web/WebApp24_testRunAsPrincipal.xml	                        (rev 0)
+++ projects/metadata/trunk/src/test/resources/org/jboss/test/metadata/web/WebApp24_testRunAsPrincipal.xml	2007-10-28 20:33:49 UTC (rev 66522)
@@ -0,0 +1,674 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<web-app version="2.4"
+   xmlns="http://java.sun.com/xml/ns/j2ee"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
+   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
+
+   <description>The WebApp Integration Tests Descriptor</description>
+
+   <filter>
+      <description>A filter that validates that is sees the authenticated subject</description>
+      <filter-name>SubjectFilter</filter-name>
+      <filter-class>org.jboss.test.web.servlets.SubjectFilter</filter-class>
+   </filter>
+
+   <filter-mapping>
+      <filter-name>SubjectFilter</filter-name>
+      <servlet-name>SubjectServlet</servlet-name>
+   </filter-mapping>
+
+   <listener>
+      <listener-class>org.jboss.test.web.servlets.TestSessionListener</listener-class>
+   </listener>
+   <listener>
+      <listener-class>org.jboss.test.web.servlets.TestContextListener</listener-class>
+   </listener>
+   <!-- ### Servlets -->
+   <servlet id="servlet1">
+      <servlet-name>APIServlet</servlet-name>
+      <servlet-class>org.jboss.test.web.servlets.APIServlet</servlet-class>
+   </servlet>
+   <servlet id="servlet2">
+      <servlet-name>ClasspathServlet</servlet-name>
+      <servlet-class>org.jboss.test.web.servlets.ClasspathServlet</servlet-class>
+      <load-on-startup>1</load-on-startup>
+   </servlet>
+   <servlet id="servlet3">
+      <servlet-name>ENCServlet</servlet-name>
+      <servlet-class>org.jboss.test.web.servlets.ENCServlet</servlet-class>
+   </servlet>
+   <servlet id="servlet4">
+      <servlet-name>EJBServlet</servlet-name>
+      <servlet-class>org.jboss.test.web.servlets.EJBServlet</servlet-class>
+   </servlet>
+   <servlet id="servlet5">
+      <servlet-name>EntityServlet</servlet-name>
+      <servlet-class>org.jboss.test.web.servlets.EntityServlet</servlet-class>
+   </servlet>
+   <servlet id="servlet6">
+      <servlet-name>SecuredEntityFacadeServlet</servlet-name>
+      <servlet-class>org.jboss.test.web.servlets.EntityFacadeServlet</servlet-class>
+   </servlet>
+   <servlet id="servlet7">
+      <servlet-name>StatefulSessionServlet</servlet-name>
+      <servlet-class>org.jboss.test.web.servlets.StatefulSessionServlet</servlet-class>
+   </servlet>
+   <servlet id="servlet8">
+      <servlet-name>UserTransactionServlet</servlet-name>
+      <servlet-class>org.jboss.test.web.servlets.UserTransactionServlet</servlet-class>
+   </servlet>
+   <servlet id="servlet9">
+      <servlet-name>ClientLoginServlet</servlet-name>
+      <servlet-class>org.jboss.test.web.servlets.ClientLoginServlet</servlet-class>
+   </servlet>
+   <servlet id="servlet10">
+      <servlet-name>EJBOnStartupServlet</servlet-name>
+      <servlet-class>org.jboss.test.web.servlets.EJBOnStartupServlet</servlet-class>
+      <init-param>
+         <param-name>failOnError</param-name>
+         <param-value>false</param-value>
+      </init-param>
+      <load-on-startup>1</load-on-startup>
+   </servlet>
+   <servlet id="servlet11">
+      <servlet-name>DebugServlet</servlet-name>
+      <servlet-class>org.jboss.test.web.servlets.DebugServlet</servlet-class>
+   </servlet>
+   <servlet id="servlet12">
+      <servlet-name>IncludeServlet</servlet-name>
+      <servlet-class>org.jboss.test.web.servlets.IncludeServlet</servlet-class>
+   </servlet>
+   <servlet id="servlet13">
+      <servlet-name>SecureIncludeServlet</servlet-name>
+      <servlet-class>org.jboss.test.web.servlets.IncludeServlet</servlet-class>
+   </servlet>
+   <servlet id="servlet14">
+      <servlet-name>SecureServlet</servlet-name>
+      <servlet-class>org.jboss.test.web.servlets.SecureServlet</servlet-class>
+   </servlet>
+   <servlet id="servlet15">
+      <servlet-name>SecureEJBServlet</servlet-name>
+      <servlet-class>org.jboss.test.web.servlets.SecureEJBServlet</servlet-class>
+   </servlet>
+   <servlet id="servlet16">
+      <servlet-name>UnsecureEJBServlet</servlet-name>
+      <servlet-class>org.jboss.test.web.servlets.UnsecureEJBServlet</servlet-class>
+   </servlet>
+   <servlet id="servlet17">
+      <servlet-name>UnsecureRunAsServlet</servlet-name>
+      <servlet-class>org.jboss.test.web.servlets.UnsecureEJBServlet</servlet-class>
+      <run-as>
+         <description>Assume an InternalUser role to access a private EJB</description>
+         <role-name>InternalUser</role-name>
+      </run-as>
+   </servlet>
+   <servlet id="servlet18">
+      <servlet-name>UnsecureRunAsServletWithPrincipalName</servlet-name>
+      <servlet-class>org.jboss.test.web.servlets.UnsecureRunAsServlet</servlet-class>
+      <init-param>
+         <param-name>ejbName</param-name>
+         <param-value>ejb/UnsecureRunAsServletWithPrincipalNameTarget</param-value>
+      </init-param>
+      <run-as>
+         <description>Assume an InternalUser role to access a private EJB</description>
+         <role-name>InternalUser</role-name>
+      </run-as>
+   </servlet>
+   <servlet id="servlet19">
+      <servlet-name>UnsecureRunAsServletWithPrincipalNameAndRoles</servlet-name>
+      <servlet-class>org.jboss.test.web.servlets.UnsecureRunAsServlet</servlet-class>
+      <init-param>
+         <param-name>ejbName</param-name>
+         <param-value>ejb/UnsecureRunAsServletWithPrincipalNameAndRolesTarget</param-value>
+      </init-param>
+      <run-as>
+         <description>Assume an InternalUser role to access a private EJB</description>
+         <role-name>InternalUser</role-name>
+      </run-as>
+   </servlet>
+   <servlet id="servlet20">
+      <servlet-name>UnsecureRunAsJsp</servlet-name>
+      <jsp-file>/runAs.jsp</jsp-file>
+      <run-as>
+         <description>Assume an InternalUser role to access a private EJB</description>
+         <role-name>InternalUser</role-name>
+      </run-as>
+   </servlet>
+   <servlet id="servlet21">
+      <servlet-name>SecureEJBServletMT</servlet-name>
+      <servlet-class>org.jboss.test.web.servlets.SecureEJBServletMT</servlet-class>
+   </servlet>
+   <servlet id="servlet22">
+      <servlet-name>SpeedServlet</servlet-name>
+      <servlet-class>org.jboss.test.web.servlets.SpeedServlet</servlet-class>
+   </servlet>
+   <servlet id="servlet23">
+      <servlet-name>snoop</servlet-name>
+      <jsp-file>/snoop.jsp</jsp-file>
+   </servlet>
+   <servlet id="servlet24">
+      <servlet-name>classpath</servlet-name>
+      <jsp-file>/classpath.jsp</jsp-file>
+   </servlet>
+   <servlet id="servlet25">
+      <servlet-name>restricted/include_ejb.jsp</servlet-name>
+      <jsp-file>/restricted/include_ejb.jsp</jsp-file>
+   </servlet>
+   <servlet id="servlet26">
+      <servlet-name>restricted/ejb.jsp</servlet-name>
+      <jsp-file>/restricted/ejb.jsp</jsp-file>
+   </servlet>
+   <servlet id="servlet27">
+      <servlet-name>UserInRoleServlet</servlet-name>
+      <servlet-class>org.jboss.test.web.servlets.UserInRoleServlet</servlet-class>
+      <init-param>
+         <param-name>expectedUserRoles</param-name>
+         <param-value>AuthorizedUser,ServletUser</param-value>
+      </init-param>
+      <init-param>
+         <param-name>unexpectedUserRoles</param-name>
+         <param-value>Anonymous</param-value>
+      </init-param>
+      <security-role-ref>
+         <description>A mapping for the ServletUser role</description>
+         <role-name>ServletUser</role-name>
+         <role-link>ServletUserRole</role-link>
+      </security-role-ref>
+   </servlet>
+   <servlet id="servlet28">
+      <description>A servlet that validates that is sees the authenticated subject</description>
+      <servlet-name>SubjectServlet</servlet-name>
+      <servlet-class>org.jboss.test.web.servlets.SubjectServlet</servlet-class>
+   </servlet>
+
+   <servlet id="servlet29">
+      <description>The legacy invoker servlet</description>
+      <servlet-name>invoker</servlet-name>
+      <servlet-class>org.apache.catalina.servlets.InvokerServlet</servlet-class>
+   </servlet>
+
+   <servlet id="servlet30">
+      <servlet-name>SimpleServlet</servlet-name>
+      <servlet-class>org.jboss.test.web.servlets.lib.SimpleServlet</servlet-class>
+   </servlet>
+   
+   <!-- The servlet and jsp page mappings -->
+   <servlet-mapping id="servlet-mapping1">
+      <servlet-name>APIServlet</servlet-name>
+      <url-pattern>/APIServlet</url-pattern>
+   </servlet-mapping>
+   <servlet-mapping id="servlet-mapping2">
+      <servlet-name>ClasspathServlet</servlet-name>
+      <url-pattern>/ClasspathServlet</url-pattern>
+   </servlet-mapping>
+   <servlet-mapping id="servlet-mapping3">
+      <servlet-name>ENCServlet</servlet-name>
+      <url-pattern>/ENCServlet</url-pattern>
+   </servlet-mapping>
+   <servlet-mapping id="servlet-mapping4">
+      <servlet-name>DebugServlet</servlet-name>
+      <url-pattern>/DebugServlet</url-pattern>
+   </servlet-mapping>
+   <servlet-mapping id="servlet-mapping5">
+      <servlet-name>EJBServlet</servlet-name>
+      <url-pattern>/EJBServlet</url-pattern>
+   </servlet-mapping>
+   <servlet-mapping id="servlet-mapping6">
+      <servlet-name>EntityServlet</servlet-name>
+      <url-pattern>/EntityServlet</url-pattern>
+   </servlet-mapping>
+   <servlet-mapping id="servlet-mapping7">
+      <servlet-name>SecuredEntityFacadeServlet</servlet-name>
+      <url-pattern>/restricted/SecuredEntityFacadeServlet</url-pattern>
+   </servlet-mapping>
+   <servlet-mapping id="servlet-mapping8">
+      <servlet-name>StatefulSessionServlet</servlet-name>
+      <url-pattern>/StatefulSessionServlet</url-pattern>
+   </servlet-mapping>
+   <servlet-mapping id="servlet-mapping9">
+      <servlet-name>UserTransactionServlet</servlet-name>
+      <url-pattern>/UserTransactionServlet</url-pattern>
+   </servlet-mapping>
+   <servlet-mapping id="servlet-mapping10">
+      <servlet-name>EJBOnStartupServlet</servlet-name>
+      <url-pattern>/EJBOnStartupServlet</url-pattern>
+   </servlet-mapping>
+   <servlet-mapping id="servlet-mapping11">
+      <servlet-name>ClientLoginServlet</servlet-name>
+      <url-pattern>/ClientLoginServlet</url-pattern>
+   </servlet-mapping>
+   <servlet-mapping id="servlet-mapping12">
+      <servlet-name>IncludeServlet</servlet-name>
+      <url-pattern>/IncludeServlet</url-pattern>
+   </servlet-mapping>
+   <servlet-mapping id="servlet-mapping13">
+      <servlet-name>SecureIncludeServlet</servlet-name>
+      <url-pattern>/restricted/IncludeServlet</url-pattern>
+   </servlet-mapping>
+   <servlet-mapping id="servlet-mapping14">
+      <servlet-name>SecureServlet</servlet-name>
+      <url-pattern>/restricted/SecureServlet</url-pattern>
+   </servlet-mapping>
+   <servlet-mapping id="servlet-mapping15">
+      <servlet-name>SecureServlet</servlet-name>
+      <url-pattern>/restricted2/SecureServlet</url-pattern>
+   </servlet-mapping>
+   <servlet-mapping id="servlet-mapping16">
+      <servlet-name>SecureServlet</servlet-name>
+      <url-pattern>/restricted3/SecureServlet</url-pattern>
+   </servlet-mapping>
+   <servlet-mapping id="servlet-mapping17">
+      <servlet-name>SecureEJBServlet</servlet-name>
+      <url-pattern>/restricted/SecureEJBAccess</url-pattern>
+   </servlet-mapping>
+   <servlet-mapping id="servlet-mapping18">
+      <servlet-name>UnsecureEJBServlet</servlet-name>
+      <url-pattern>/UnsecureEJBAccess</url-pattern>
+   </servlet-mapping>
+   <servlet-mapping id="servlet-mapping19">
+      <servlet-name>UnsecureRunAsServlet</servlet-name>
+      <url-pattern>/UnsecureRunAsServlet</url-pattern>
+   </servlet-mapping>
+   <servlet-mapping id="servlet-mapping20">
+      <servlet-name>SecureEJBServletMT</servlet-name>
+      <url-pattern>/restricted/SecureEJBAccessMT</url-pattern>
+   </servlet-mapping>
+   <servlet-mapping id="servlet-mapping21">
+      <servlet-name>SpeedServlet</servlet-name>
+      <url-pattern>/SpeedServlet</url-pattern>
+   </servlet-mapping>
+   <servlet-mapping id="servlet-mapping22">
+      <servlet-name>UserInRoleServlet</servlet-name>
+      <url-pattern>/restricted/UserInRoleServlet</url-pattern>
+   </servlet-mapping>
+   <servlet-mapping id="servlet-mapping23">
+      <servlet-name>SubjectServlet</servlet-name>
+      <url-pattern>/restricted/SubjectServlet</url-pattern>
+   </servlet-mapping>
+   <servlet-mapping id="servlet-mapping24">
+      <servlet-name>snoop</servlet-name>
+      <url-pattern>*.snp</url-pattern>
+   </servlet-mapping>
+   <servlet-mapping id="servlet-mapping25">
+      <servlet-name>snoop</servlet-name>
+      <url-pattern>/test-jsp-mapping</url-pattern>
+   </servlet-mapping>
+   <servlet-mapping id="servlet-mapping26">
+      <servlet-name>UnsecureRunAsServletWithPrincipalName</servlet-name>
+      <url-pattern>/UnsecureRunAsServletWithPrincipalName</url-pattern>
+   </servlet-mapping>
+   <servlet-mapping id="servlet-mapping27">
+      <servlet-name>UnsecureRunAsServletWithPrincipalNameAndRoles</servlet-name>
+      <url-pattern>/UnsecureRunAsServletWithPrincipalNameAndRoles</url-pattern>
+   </servlet-mapping>
+   <servlet-mapping id="servlet-mapping28">
+      <servlet-name>UnsecureRunAsJsp</servlet-name>
+      <url-pattern>/runAs.jsp</url-pattern>
+   </servlet-mapping>
+   <servlet-mapping id="servlet-mapping29">
+      <servlet-name>invoker</servlet-name>
+      <url-pattern>/servlet/*</url-pattern> 
+   </servlet-mapping>
+   <servlet-mapping id="servlet-mapping30">
+      <servlet-name>SimpleServlet</servlet-name>
+      <url-pattern>/SimpleServlet</url-pattern>
+   </servlet-mapping>
+
+   <!-- The Welcome File List -->
+   <welcome-file-list>
+      <welcome-file>index.html</welcome-file>
+   </welcome-file-list>
+
+   <!-- ### Resources -->
+   <!-- JDBC DataSources (java:comp/env/jdbc) -->
+   <resource-ref>
+      <description>The default DS</description>
+      <res-ref-name>jdbc/DefaultDS</res-ref-name>
+      <res-type>javax.sql.DataSource</res-type>
+      <res-auth>Container</res-auth>
+   </resource-ref>
+   <!-- JavaMail Connection Factories (java:comp/env/mail) -->
+   <resource-ref>
+      <description>Default Mail</description>
+      <res-ref-name>mail/DefaultMail</res-ref-name>
+      <res-type>javax.mail.Session</res-type>
+      <res-auth>Container</res-auth>
+   </resource-ref>
+   <!-- JMS Connection Factories (java:comp/env/jms) -->
+   <resource-ref>
+      <description>Default QueueFactory</description>
+      <res-ref-name>jms/QueFactory</res-ref-name>
+      <res-type>javax.jms.QueueConnectionFactory</res-type>
+      <res-auth>Container</res-auth>
+   </resource-ref>
+   <!-- URL Connection Factories (java:comp/env/url) -->
+   <resource-ref>
+      <description>JBoss Home Page</description>
+      <res-ref-name>url/JBossHome</res-ref-name>
+      <res-type>java.net.URL</res-type>
+      <res-auth>Container</res-auth>
+   </resource-ref>
+   <resource-ref>
+      <description>SomeWebSite HomePage</description>
+      <res-ref-name>url/IndirectURL</res-ref-name>
+      <res-type>java.net.URL</res-type>
+      <res-auth>Container</res-auth>
+   </resource-ref>
+
+   <resource-env-ref id="resenv1">
+      <description>A 1st test of the resource-env-ref tag</description>
+      <resource-env-ref-name>res1/aQueue</resource-env-ref-name>
+      <resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>
+   </resource-env-ref>
+   <resource-env-ref id="resenv2">
+      <description>A 2nd test of the resource-env-ref tag</description>
+      <resource-env-ref-name>res2/aQueue</resource-env-ref-name>
+      <resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>
+   </resource-env-ref>
+   
+   <!-- ### Security -->
+   <security-constraint>
+      <web-resource-collection>
+         <web-resource-name>Restricted</web-resource-name>
+         <description>Declarative security tests</description>
+         <url-pattern>/restricted/*</url-pattern>
+         <http-method>HEAD</http-method>
+         <http-method>GET</http-method>
+         <http-method>POST</http-method>
+         <http-method>PUT</http-method>
+         <http-method>DELETE</http-method>
+      </web-resource-collection>
+      <auth-constraint>
+         <description>Only authenticated users can access secure content</description>
+         <role-name>AuthorizedUser</role-name>
+      </auth-constraint>
+      <user-data-constraint>
+         <description>no description</description>
+         <transport-guarantee>NONE</transport-guarantee>
+      </user-data-constraint>
+   </security-constraint>
+
+   <security-constraint>
+      <web-resource-collection>
+         <web-resource-name>Restricted</web-resource-name>
+         <description>Declarative security tests with no http methods</description>
+         <url-pattern>/restricted2/*</url-pattern>
+      </web-resource-collection>
+      <auth-constraint>
+         <description>Only authenticated users can access secure content</description>
+         <role-name>AuthorizedUser</role-name>
+      </auth-constraint>
+   </security-constraint>
+
+   <security-constraint>
+      <web-resource-collection>
+         <web-resource-name>Restricted</web-resource-name>
+         <description>Test Unauthorized Access</description>
+         <url-pattern>/restricted3/*</url-pattern>
+      </web-resource-collection>
+      <auth-constraint>
+         <description>Non-existent role used for testing unauthorized access</description>
+         <role-name>NonExistentRole</role-name>
+      </auth-constraint>
+   </security-constraint>
+
+   <login-config>
+      <auth-method>BASIC</auth-method>
+      <realm-name>JBossTest Servlets</realm-name>
+   </login-config>
+
+   <security-role id="security-role1">
+      <description>An AuthorizedUser is one with a valid username and password</description>
+      <role-name>AuthorizedUser</role-name>
+   </security-role>
+   <security-role id="security-role2">
+      <description>A role used by the UserInRoleServlet</description>
+      <role-name>ServletUserRole</role-name>
+   </security-role>
+   <security-role id="security-role3">
+      <description>InternalUser is private app role</description>
+      <role-name>InternalUser</role-name>
+   </security-role>
+   <security-role id="security-role4">
+      <description>ExtraRole1 is an extra role added to a run-as principal</description>
+      <role-name>ExtraRole1</role-name>
+   </security-role>
+   <security-role id="security-role5">
+      <description>ExtraRole2 is an extra role added to a run-as principal</description>
+      <role-name>ExtraRole2</role-name>
+   </security-role>
+   <security-role id="security-role6">
+      <description>Role that does not exist</description>
+      <role-name>NonExistentRole</role-name>
+   </security-role>
+
+   <!-- ### Environment (java:comp/env/ejb) -->
+   <env-entry id="env1">
+      <description>Integer0</description>
+      <env-entry-name>Ints/i0</env-entry-name>
+      <env-entry-type>java.lang.Integer</env-entry-type>
+      <env-entry-value>0</env-entry-value>
+   </env-entry>
+   <env-entry id="env2">
+      <description>Integer1</description>
+      <env-entry-name>Ints/i1</env-entry-name>
+      <env-entry-type>java.lang.Integer</env-entry-type>
+      <env-entry-value>1</env-entry-value>
+   </env-entry>
+   <env-entry id="env3">
+      <description>Float0</description>
+      <env-entry-name>Floats/f0</env-entry-name>
+      <env-entry-type>java.lang.Float</env-entry-type>
+      <env-entry-value>0.0</env-entry-value>
+   </env-entry>
+   <env-entry id="env4">
+      <description>Float1</description>
+      <env-entry-name>Floats/f1</env-entry-name>
+      <env-entry-type>java.lang.Float</env-entry-type>
+      <env-entry-value>1.1</env-entry-value>
+   </env-entry>
+   <env-entry id="env5">
+      <description>String0</description>
+      <env-entry-name>Strings/s0</env-entry-name>
+      <env-entry-type>java.lang.String</env-entry-type>
+      <env-entry-value>String0</env-entry-value>
+   </env-entry>
+   <env-entry id="env6">
+      <description>String1</description>
+      <env-entry-name>Strings/s1</env-entry-name>
+      <env-entry-type>java.lang.String</env-entry-type>
+      <env-entry-value>String1</env-entry-value>
+   </env-entry>
+   <env-entry id="env7">
+      <description>An entry with a class name</description>
+      <env-entry-name>ejb/catalog/CatalogDAOClass</env-entry-name>
+      <env-entry-type>java.lang.String</env-entry-type>
+      <env-entry-value>com.sun.model.dao.CatalogDAOImpl</env-entry-value>
+   </env-entry>
+
+   <!-- ### EJB References (java:comp/env/ejb) -->
+   <!-- An ejb-ref that has no corresponding ejb-ref in jboss-web.xml -->
+   <ejb-ref id="ejb1">
+      <ejb-ref-name>ejb/bean0</ejb-ref-name>
+      <ejb-ref-type>Session</ejb-ref-type>
+      <home>org.jboss.test.web.interfaces.StatelessSessionHome</home>
+      <remote>org.jboss.test.web.interfaces.StatelessSession</remote>
+      <ejb-link>ENCBean0</ejb-link>
+   </ejb-ref>
+   <ejb-ref>
+      <ejb-ref-name>ejb/bean1</ejb-ref-name>
+      <ejb-ref-type>Session</ejb-ref-type>
+      <home>org.jboss.test.web.interfaces.StatelessSessionHome</home>
+      <remote>org.jboss.test.web.interfaces.StatelessSession</remote>
+      <ejb-link>ENCBean1</ejb-link>
+   </ejb-ref>
+   <ejb-ref>
+      <ejb-ref-name>ejb/bean2</ejb-ref-name>
+      <ejb-ref-type>Session</ejb-ref-type>
+      <home>org.jboss.test.web.interfaces.StatelessSessionHome</home>
+      <remote>org.jboss.test.web.interfaces.StatelessSession</remote>
+      <ejb-link>ENCBean1</ejb-link>
+   </ejb-ref>
+   <!-- ejb-ref that needs jboss-web.xml                            -->
+   <ejb-ref id="ejb4">
+      <ejb-ref-name>ejb/bean3</ejb-ref-name>
+      <ejb-ref-type>Session</ejb-ref-type>
+      <home>org.jboss.test.web.interfaces.StatelessSessionHome</home>
+      <remote>org.jboss.test.web.interfaces.StatelessSession</remote>
+   </ejb-ref>
+   <ejb-ref>
+      <ejb-ref-name>ejb/Entity</ejb-ref-name>
+      <ejb-ref-type>Entity</ejb-ref-type>
+      <home>org.jboss.test.web.interfaces.EntityHome</home>
+      <remote>org.jboss.test.web.interfaces.Entity</remote>
+      <ejb-link>Entity</ejb-link>
+   </ejb-ref>
+   <ejb-ref>
+      <ejb-ref-name>ejb/EntityFacade</ejb-ref-name>
+      <ejb-ref-type>Session</ejb-ref-type>
+      <home>org.jboss.test.web.interfaces.EntityFacadeHome</home>
+      <remote>org.jboss.test.web.interfaces.EntityFacade</remote>
+      <ejb-link>EntityFacade</ejb-link>
+   </ejb-ref>
+   <ejb-ref>
+      <ejb-ref-name>ejb/OptimizedEJB</ejb-ref-name>
+      <ejb-ref-type>Session</ejb-ref-type>
+      <home>org.jboss.test.web.interfaces.StatelessSessionHome</home>
+      <remote>org.jboss.test.web.interfaces.StatelessSession</remote>
+      <ejb-link>OptimizedEJB</ejb-link>
+   </ejb-ref>
+   <ejb-ref>
+      <ejb-ref-name>ejb/NotOptimizedEJB</ejb-ref-name>
+      <ejb-ref-type>Session</ejb-ref-type>
+      <home>org.jboss.test.web.interfaces.StatelessSessionHome</home>
+      <remote>org.jboss.test.web.interfaces.StatelessSession</remote>
+      <ejb-link>NotOptimizedEJB</ejb-link>
+   </ejb-ref>
+   <ejb-ref>
+      <ejb-ref-name>ejb/CtsBmp</ejb-ref-name>
+      <ejb-ref-type>Entity</ejb-ref-type>
+      <home>org.jboss.test.cts.interfaces.CtsBmpHome</home>
+      <remote>org.jboss.test.cts.interfaces.CtsBmp</remote>
+      <ejb-link>BMPBean</ejb-link>
+   </ejb-ref>
+   <ejb-ref>
+      <ejb-ref-name>ejb/SecuredEJB</ejb-ref-name>
+      <ejb-ref-type>Session</ejb-ref-type>
+      <home>org.jboss.test.web.interfaces.StatelessSessionHome</home>
+      <remote>org.jboss.test.web.interfaces.StatelessSession</remote>
+      <ejb-link>SecuredEJB</ejb-link>
+   </ejb-ref>
+   <ejb-ref>
+      <ejb-ref-name>ejb/UnsecuredEJB</ejb-ref-name>
+      <ejb-ref-type>Session</ejb-ref-type>
+      <home>org.jboss.test.web.interfaces.StatelessSessionHome</home>
+      <remote>org.jboss.test.web.interfaces.StatelessSession</remote>
+      <ejb-link>UnsecuredEJB</ejb-link>
+   </ejb-ref>
+   <ejb-ref>
+      <ejb-ref-name>ejb/StatefulEJB</ejb-ref-name>
+      <ejb-ref-type>Session</ejb-ref-type>
+      <home>org.jboss.test.web.interfaces.StatelessSessionHome</home>
+      <remote>org.jboss.test.web.interfaces.StatelessSession</remote>
+      <ejb-link>StatefulEJB</ejb-link>
+   </ejb-ref>
+   <!-- A relative ejb-ref -->
+   <ejb-ref>
+      <ejb-ref-name>ejb/RelativeBean</ejb-ref-name>
+      <ejb-ref-type>Session</ejb-ref-type>
+      <home>org.jboss.test.web.interfaces.StatelessSessionHome</home>
+      <remote>org.jboss.test.web.interfaces.StatelessSession</remote>
+      <ejb-link>websubdir/relative.jar#SessionBean</ejb-link>
+   </ejb-ref>
+
+   <ejb-local-ref id="local1">
+      <ejb-ref-name>ejb/local/bean0</ejb-ref-name>
+      <ejb-ref-type>Session</ejb-ref-type>
+      <local-home>org.jboss.test.web.interfaces.StatelessSessionLocalHome</local-home>
+      <local>org.jboss.test.web.interfaces.StatelessSessionLocal</local>
+      <ejb-link>ENCBean0</ejb-link>
+   </ejb-local-ref>
+   <ejb-local-ref id="local2">
+      <ejb-ref-name>ejb/local/bean1</ejb-ref-name>
+      <ejb-ref-type>Session</ejb-ref-type>
+      <local-home>org.jboss.test.web.interfaces.StatelessSessionLocalHome</local-home>
+      <local>org.jboss.test.web.interfaces.StatelessSessionLocal</local>
+      <ejb-link>ENCBean1</ejb-link>
+   </ejb-local-ref>
+   <!-- ejb-local-ref that needs jboss-web.xml                            -->
+   <ejb-local-ref id="local3">
+      <ejb-ref-name>ejb/local/bean3</ejb-ref-name>
+      <ejb-ref-type>Session</ejb-ref-type>
+      <local-home>org.jboss.test.web.interfaces.StatelessSessionLocalHome</local-home>
+      <local>org.jboss.test.web.interfaces.StatelessSessionLocal</local>
+   </ejb-local-ref>
+
+   <ejb-local-ref id="local4">
+      <ejb-ref-name>ejb/local/OptimizedEJB</ejb-ref-name>
+      <ejb-ref-type>Session</ejb-ref-type>
+      <local-home>org.jboss.test.web.interfaces.StatelessSessionLocalHome</local-home>
+      <local>org.jboss.test.web.interfaces.StatelessSessionLocal</local>
+      <ejb-link>jbosstest-web-ejbs.jar#OptimizedEJB</ejb-link>
+   </ejb-local-ref>
+   <ejb-local-ref id="local5">
+      <ejb-ref-name>ejb/local/SecuredEJB</ejb-ref-name>
+      <ejb-ref-type>Session</ejb-ref-type>
+      <local-home>org.jboss.test.web.interfaces.StatelessSessionLocalHome</local-home>
+      <local>org.jboss.test.web.interfaces.StatelessSessionLocal</local>
+      <ejb-link>SecuredEJB</ejb-link>
+   </ejb-local-ref>
+   <!-- A relative ejb-local-ref -->
+   <ejb-local-ref id="local6">
+      <ejb-ref-name>ejb/local/RelativeBean</ejb-ref-name>
+      <ejb-ref-type>Session</ejb-ref-type>
+      <local-home>org.jboss.test.web.interfaces.StatelessSessionLocalHome</local-home>
+      <local>org.jboss.test.web.interfaces.StatelessSessionLocal</local>
+      <ejb-link>websubdir/relative.jar#SessionBean</ejb-link>
+   </ejb-local-ref>
+   <ejb-local-ref id="local7">
+      <ejb-ref-name>ejb/UnsecureRunAsServletWithPrincipalNameTarget</ejb-ref-name>
+      <ejb-ref-type>Session</ejb-ref-type>
+      <local-home>org.jboss.test.web.interfaces.RunAsTargetLocalHome</local-home>
+      <local>org.jboss.test.web.interfaces.RunAsTargetLocal</local>
+      <ejb-link>UnsecureRunAsServletWithPrincipalNameTarget</ejb-link>
+   </ejb-local-ref>
+   <ejb-local-ref id="local8">
+      <ejb-ref-name>ejb/UnsecureRunAsServletWithPrincipalNameAndRolesTarget</ejb-ref-name>
+      <ejb-ref-type>Session</ejb-ref-type>
+      <local-home>org.jboss.test.web.interfaces.RunAsTargetLocalHome</local-home>
+      <local>org.jboss.test.web.interfaces.RunAsTargetLocal</local>
+      <ejb-link>UnsecureRunAsServletWithPrincipalNameAndRolesTarget</ejb-link>
+   </ejb-local-ref>
+         
+   <message-destination-ref id="msgref1">
+      <description>consumes using a link</description>
+      <message-destination-ref-name>mdr/ConsumesLink</message-destination-ref-name>
+      <message-destination-type>javax.jms.Queue</message-destination-type>
+      <message-destination-usage>Consumes</message-destination-usage>
+      <message-destination-link>TestQueue</message-destination-link>
+   </message-destination-ref>
+   <message-destination-ref id="msgref2">
+      <description>produces using a link</description>
+      <message-destination-ref-name>mdr/ProducesLink</message-destination-ref-name>
+      <message-destination-type>javax.jms.Topic</message-destination-type>
+      <message-destination-usage>Produces</message-destination-usage>
+      <message-destination-link>TestTopic</message-destination-link>
+   </message-destination-ref>
+   <message-destination-ref id="msgref3">
+      <description>consumesproduces using a jndi name</description>
+      <message-destination-ref-name>mdr/ConsumesProducesJNDIName</message-destination-ref-name>
+      <message-destination-type>javax.jms.Queue</message-destination-type>
+      <message-destination-usage>ConsumesProduces</message-destination-usage>
+   </message-destination-ref>
+
+   <message-destination id="msgdest1">
+      <description>A TestQueue destination</description>
+      <message-destination-name>TestQueue</message-destination-name>
+   </message-destination>
+   <message-destination id="msgdest2">
+      <description>A TestTopic destination</description>
+      <message-destination-name>TestTopic</message-destination-name>
+   </message-destination>
+</web-app>


Property changes on: projects/metadata/trunk/src/test/resources/org/jboss/test/metadata/web/WebApp24_testRunAsPrincipal.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + native




More information about the jboss-cvs-commits mailing list