[jboss-cvs] JBossAS SVN: r97075 - in projects/metadata/ejb/trunk: .settings and 15 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Nov 27 04:56:59 EST 2009


Author: wolfc
Date: 2009-11-27 04:56:58 -0500 (Fri, 27 Nov 2009)
New Revision: 97075

Added:
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/AbstractAsyncProcessor.java
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/AsyncClassProcessor.java
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/AsyncMethodProcessor.java
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossSessionBean31MetaData.java
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/AsyncMethodMetaData.java
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/AsyncMethodsMetaData.java
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/EjbJar31MetaData.java
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/SessionBean31MetaData.java
   projects/metadata/ejb/trunk/src/main/resources/schema/ejb-jar_3_1.xsd
   projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/
   projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/
   projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/async/
   projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/async/AsyncMethodBean.java
   projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/async/unit/
   projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/async/unit/AsyncMethodTestCase.java
   projects/metadata/ejb/trunk/src/test/resources/org/jboss/metadata/ejb/
   projects/metadata/ejb/trunk/src/test/resources/org/jboss/metadata/ejb/test/
   projects/metadata/ejb/trunk/src/test/resources/org/jboss/metadata/ejb/test/async/
   projects/metadata/ejb/trunk/src/test/resources/org/jboss/metadata/ejb/test/async/ejb-jar.xml
Modified:
   projects/metadata/ejb/trunk/.classpath
   projects/metadata/ejb/trunk/.settings/org.eclipse.jdt.core.prefs
   projects/metadata/ejb/trunk/pom.xml
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/AbstractSessionBeanProcessor.java
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/AbstractSessionBeanProcessor.java
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/JBoss50Creator.java
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossEnterpriseBeanMetaData.java
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossEnterpriseBeansMetaData.java
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossSessionGenericWrapper.java
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/EnterpriseBeanMetaData.java
   projects/metadata/ejb/trunk/src/test/java/org/jboss/test/metadata/ejb/JBoss50UnitTestCase.java
Log:
JBMETA-226: process async methods

Modified: projects/metadata/ejb/trunk/.classpath
===================================================================
--- projects/metadata/ejb/trunk/.classpath	2009-11-27 07:49:24 UTC (rev 97074)
+++ projects/metadata/ejb/trunk/.classpath	2009-11-27 09:56:58 UTC (rev 97075)
@@ -4,7 +4,7 @@
 	<classpathentry excluding="**" kind="src" output="eclipse-target/classes" path="src/main/resources"/>
 	<classpathentry kind="src" output="eclipse-target/tests-classes" path="src/test/java"/>
 	<classpathentry excluding="**" kind="src" output="eclipse-target/tests-classes" path="src/test/resources"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
 	<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
 	<classpathentry kind="output" path="eclipse-target/classes"/>
 </classpath>

Modified: projects/metadata/ejb/trunk/.settings/org.eclipse.jdt.core.prefs
===================================================================
--- projects/metadata/ejb/trunk/.settings/org.eclipse.jdt.core.prefs	2009-11-27 07:49:24 UTC (rev 97074)
+++ projects/metadata/ejb/trunk/.settings/org.eclipse.jdt.core.prefs	2009-11-27 09:56:58 UTC (rev 97075)
@@ -1,5 +1,5 @@
 #Wed Jun 17 11:18:26 CEST 2009
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
 eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.source=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6

Modified: projects/metadata/ejb/trunk/pom.xml
===================================================================
--- projects/metadata/ejb/trunk/pom.xml	2009-11-27 07:49:24 UTC (rev 97074)
+++ projects/metadata/ejb/trunk/pom.xml	2009-11-27 09:56:58 UTC (rev 97075)
@@ -22,6 +22,14 @@
     <testOutputDirectory>${profile.testOutputDirectory}</testOutputDirectory>
     <plugins>
       <plugin>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <configuration>
+          <source>1.6</source>
+          <target>1.6</target>
+        </configuration>
+      </plugin>
+      
+      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
         <version>2.4.3</version>
@@ -91,7 +99,14 @@
   <!-- Compile Dependencies -->
   <dependencies>
 
+    <!-- FIXME: use org.jboss.javaee:jboss-ejb-api -->
     <dependency>
+      <groupId>org.jboss.ejb3</groupId>
+      <artifactId>jboss-ejb3-api</artifactId>
+      <version>3.1.0-SNAPSHOT</version>
+    </dependency>
+    
+    <dependency>
       <groupId>org.jboss.metadata</groupId>
       <artifactId>jboss-metadata-common</artifactId>
       <version>2.0.0.Alpha</version>

Modified: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/AbstractSessionBeanProcessor.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/AbstractSessionBeanProcessor.java	2009-11-27 07:49:24 UTC (rev 97074)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/AbstractSessionBeanProcessor.java	2009-11-27 09:56:58 UTC (rev 97075)
@@ -30,6 +30,7 @@
 import org.jboss.metadata.annotation.creator.Processor;
 import org.jboss.metadata.annotation.finder.AnnotationFinder;
 import org.jboss.metadata.ejb.spec.EjbJar3xMetaData;
+import org.jboss.metadata.ejb.spec.SessionBean31MetaData;
 import org.jboss.metadata.ejb.spec.SessionBeanMetaData;
 import org.jboss.metadata.javaee.spec.DescriptionGroupMetaData;
 import org.jboss.metadata.javaee.spec.DescriptionImpl;
@@ -64,7 +65,7 @@
    
    protected SessionBeanMetaData create(Class<?> beanClass, String name, String mappedName, String description)
    {
-      SessionBeanMetaData bean = new SessionBeanMetaData();
+      SessionBeanMetaData bean = new SessionBean31MetaData();
       bean.setEjbClass(beanClass.getName());
       String ejbName;
       if(name == null || name.length() == 0)

Added: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/AbstractAsyncProcessor.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/AbstractAsyncProcessor.java	                        (rev 0)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/AbstractAsyncProcessor.java	2009-11-27 09:56:58 UTC (rev 97075)
@@ -0,0 +1,58 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file 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.annotation.creator.ejb.jboss;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+
+import javax.ejb.Asynchronous;
+
+import org.jboss.metadata.annotation.creator.AbstractFinderUser;
+import org.jboss.metadata.annotation.creator.Processor;
+import org.jboss.metadata.annotation.finder.AnnotationFinder;
+import org.jboss.metadata.ejb.jboss.JBossSessionBean31MetaData;
+
+/**
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public abstract class AbstractAsyncProcessor<T extends AnnotatedElement> extends AbstractFinderUser
+   implements Processor<JBossSessionBean31MetaData, T>
+{
+   @SuppressWarnings("unchecked")
+   private static final Collection<Class<? extends Annotation>> annotationTypes = new HashSet<Class<? extends Annotation>>(Arrays.asList(Asynchronous.class));
+   
+   protected AbstractAsyncProcessor(AnnotationFinder<AnnotatedElement> finder)
+   {
+      super(finder);
+   }
+
+   @Override
+   public Collection<Class<? extends Annotation>> getAnnotationTypes()
+   {
+      return annotationTypes;
+   }
+
+}

Modified: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/AbstractSessionBeanProcessor.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/AbstractSessionBeanProcessor.java	2009-11-27 07:49:24 UTC (rev 97074)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/AbstractSessionBeanProcessor.java	2009-11-27 09:56:58 UTC (rev 97075)
@@ -30,6 +30,7 @@
 import org.jboss.metadata.annotation.creator.Processor;
 import org.jboss.metadata.annotation.finder.AnnotationFinder;
 import org.jboss.metadata.ejb.jboss.JBossMetaData;
+import org.jboss.metadata.ejb.jboss.JBossSessionBean31MetaData;
 import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
 import org.jboss.metadata.javaee.spec.DescriptionGroupMetaData;
 import org.jboss.metadata.javaee.spec.DescriptionImpl;
@@ -60,10 +61,12 @@
       addTypeProcessor(new RemoteBindingProcessor(finder));
       addTypeProcessor(new RemoteBindingsProcessor(finder));
       addTypeProcessor(new RemoteHomeBindingProcessor(finder));
+      addTypeProcessor(new AsyncClassProcessor(finder));
 
       addMethodProcessor(new InitProcessor(finder));
       addMethodProcessor(new TimeoutProcessor(finder));
       addMethodProcessor(new AroundInvokeProcessor(finder));
+      addMethodProcessor(new AsyncMethodProcessor(finder));
       
       addTypeProcessor(new JBossCacheConfigProcessor(finder));
       addTypeProcessor(new JBossClusteredProcessor(finder));
@@ -73,7 +76,7 @@
 
    protected JBossSessionBeanMetaData create(Class<?> beanClass, String name, String mappedName, String description)
    {
-      JBossSessionBeanMetaData bean = new JBossSessionBeanMetaData();
+      JBossSessionBeanMetaData bean = new JBossSessionBean31MetaData();
       bean.setEjbClass(beanClass.getName());
       String ejbName;
       if(name == null || name.length() == 0)

Added: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/AsyncClassProcessor.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/AsyncClassProcessor.java	                        (rev 0)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/AsyncClassProcessor.java	2009-11-27 09:56:58 UTC (rev 97075)
@@ -0,0 +1,53 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file 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.annotation.creator.ejb.jboss;
+
+import java.lang.reflect.AnnotatedElement;
+
+import javax.ejb.Asynchronous;
+
+import org.jboss.metadata.annotation.creator.Processor;
+import org.jboss.metadata.annotation.finder.AnnotationFinder;
+import org.jboss.metadata.ejb.jboss.JBossSessionBean31MetaData;
+
+/**
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class AsyncClassProcessor extends AbstractAsyncProcessor<Class<?>>
+   implements Processor<JBossSessionBean31MetaData, Class<?>> // FIXME: because AbstractProcessor.getProcessorMetaDataType doesn't take inheritence into account
+{
+   protected AsyncClassProcessor(AnnotationFinder<AnnotatedElement> finder)
+   {
+      super(finder);
+   }
+
+   @Override
+   public void process(JBossSessionBean31MetaData metaData, Class<?> type)
+   {
+      Asynchronous annotation = finder.getAnnotation(type, Asynchronous.class);
+      if(annotation != null)
+      {
+         throw new RuntimeException("NYI");
+      }
+   }
+}

Added: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/AsyncMethodProcessor.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/AsyncMethodProcessor.java	                        (rev 0)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/AsyncMethodProcessor.java	2009-11-27 09:56:58 UTC (rev 97075)
@@ -0,0 +1,70 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file 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.annotation.creator.ejb.jboss;
+
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Method;
+
+import javax.ejb.Asynchronous;
+
+import org.jboss.metadata.annotation.creator.EjbProcessorUtils;
+import org.jboss.metadata.annotation.creator.Processor;
+import org.jboss.metadata.annotation.finder.AnnotationFinder;
+import org.jboss.metadata.ejb.jboss.JBossSessionBean31MetaData;
+import org.jboss.metadata.ejb.spec.AsyncMethodMetaData;
+import org.jboss.metadata.ejb.spec.AsyncMethodsMetaData;
+import org.jboss.metadata.ejb.spec.MethodParametersMetaData;
+
+/**
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class AsyncMethodProcessor extends AbstractAsyncProcessor<Method>
+   implements Processor<JBossSessionBean31MetaData, Method> // FIXME: because AbstractProcessor.getProcessorMetaDataType doesn't take inheritence into account
+{
+   protected AsyncMethodProcessor(AnnotationFinder<AnnotatedElement> finder)
+   {
+      super(finder);
+   }
+
+   @Override
+   public void process(JBossSessionBean31MetaData metaData, Method method)
+   {
+      Asynchronous asynchronous = finder.getAnnotation(method, Asynchronous.class);
+      if(asynchronous == null)
+         return;
+      
+      AsyncMethodsMetaData asyncMethods = metaData.getAsyncMethods();
+      if(asyncMethods == null)
+      {
+         asyncMethods = new AsyncMethodsMetaData();
+         metaData.setAsyncMethods(asyncMethods);
+      }
+      
+      MethodParametersMetaData methodParameters = EjbProcessorUtils.getMethodParameters(method);
+      AsyncMethodMetaData asyncMethod = new AsyncMethodMetaData();
+      asyncMethod.setMethodName(method.getName());
+      asyncMethod.setMethodParams(methodParameters);
+      
+      asyncMethods.add(asyncMethod);
+   }
+}

Modified: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/JBoss50Creator.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/JBoss50Creator.java	2009-11-27 07:49:24 UTC (rev 97074)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/JBoss50Creator.java	2009-11-27 09:56:58 UTC (rev 97075)
@@ -34,15 +34,12 @@
 import org.jboss.metadata.ejb.jboss.JBoss50MetaData;
 import org.jboss.metadata.ejb.jboss.JBossMessageDrivenBeanMetaData;
 import org.jboss.metadata.ejb.jboss.JBossMetaData;
+import org.jboss.metadata.ejb.jboss.JBossSessionBean31MetaData;
 import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
 import org.jboss.metadata.ejb.spec.EjbJarMetaData;
 import org.jboss.metadata.ejb.spec.EnterpriseBeanMetaData;
 import org.jboss.metadata.ejb.spec.SessionBeanMetaData;
 import org.jboss.metadata.ejb.spec.SessionType;
-import org.jboss.metadata.process.chain.ProcessorChain;
-import org.jboss.metadata.process.chain.ejb.jboss.JBossMetaDataProcessorChain;
-import org.jboss.metadata.process.processor.ejb.jboss.JBossMetaDataValidatorChainProcessor;
-import org.jboss.metadata.process.processor.ejb.jboss.SetDefaultLocalBusinessInterfaceProcessor;
 
 /**
  * A JBoss50Creator.
@@ -145,7 +142,7 @@
                if (bean.isSession())
                {
                   SessionBeanMetaData sb = (SessionBeanMetaData) bean;
-                  JBossSessionBeanMetaData sessionBean = new JBossSessionBeanMetaData();
+                  JBossSessionBeanMetaData sessionBean = new JBossSessionBean31MetaData();
                   sessionBean.setEjbName(sb.getEjbName());
                   sessionBean.setEjbClass(sb.getEjbClass());
 

Modified: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossEnterpriseBeanMetaData.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossEnterpriseBeanMetaData.java	2009-11-27 07:49:24 UTC (rev 97074)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossEnterpriseBeanMetaData.java	2009-11-27 09:56:58 UTC (rev 97075)
@@ -87,8 +87,6 @@
 import org.jboss.metadata.javaee.support.NamedMetaData;
 import org.jboss.metadata.javaee.support.NamedMetaDataWithDescriptionGroup;
 import org.jboss.metadata.javaee.support.NonNullLinkedHashSet;
-import org.jboss.xb.annotations.JBossXmlConstants;
-import org.jboss.xb.annotations.JBossXmlModelGroup;
 
 /**
  * enterprise-bean/{session,entity,message-driven} metadata
@@ -208,7 +206,7 @@
       if(bean instanceof MessageDrivenBeanMetaData)
          jbean = new JBossMessageDrivenBeanMetaData();
       if(bean instanceof SessionBeanMetaData)
-         jbean = new JBossSessionBeanMetaData();
+         jbean = new JBossSessionBean31MetaData();
       return jbean;
    }
 

Modified: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossEnterpriseBeansMetaData.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossEnterpriseBeansMetaData.java	2009-11-27 07:49:24 UTC (rev 97074)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossEnterpriseBeansMetaData.java	2009-11-27 09:56:58 UTC (rev 97075)
@@ -60,7 +60,7 @@
          throw new IllegalArgumentException("Null data");
       JBossEnterpriseBeanMetaData result = null;
       if (data instanceof SessionBeanMetaData)
-         result = new JBossSessionBeanMetaData();
+         result = new JBossSessionBean31MetaData();
       else if (data instanceof EntityBeanMetaData)
          result = new JBossEntityBeanMetaData();
       else if (data instanceof MessageDrivenBeanMetaData)
@@ -144,7 +144,7 @@
                JBossGenericBeanMetaData gejb = (JBossGenericBeanMetaData) jejb;
                if(ejb.isSession())
                {
-                  mergedEJB = new JBossSessionBeanMetaData();
+                  mergedEJB = new JBossSessionBean31MetaData();
                   jejb = new JBossSessionGenericWrapper(gejb);
                }
                else if(ejb.isMessageDriven())

Added: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossSessionBean31MetaData.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossSessionBean31MetaData.java	                        (rev 0)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossSessionBean31MetaData.java	2009-11-27 09:56:58 UTC (rev 97075)
@@ -0,0 +1,84 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file 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.ejb.jboss;
+
+import org.jboss.metadata.common.ejb.ITimeoutTarget;
+import org.jboss.metadata.ejb.spec.AsyncMethodsMetaData;
+import org.jboss.metadata.ejb.spec.EnterpriseBeanMetaData;
+import org.jboss.metadata.ejb.spec.SessionBean31MetaData;
+
+/**
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class JBossSessionBean31MetaData extends JBossSessionBeanMetaData
+   implements ITimeoutTarget // FIXME: AbstractProcessor.processClass doesn't take super interfaces into account
+{
+   private static final long serialVersionUID = 1L;
+
+   private AsyncMethodsMetaData asyncMethods;
+
+   public AsyncMethodsMetaData getAsyncMethods()
+   {
+      return asyncMethods;
+   }
+   
+   public void setAsyncMethods(AsyncMethodsMetaData asyncMethods)
+   {
+      if(asyncMethods == null)
+         throw new IllegalArgumentException("asyncMethods is null");
+      
+      this.asyncMethods = asyncMethods;
+   }
+   
+   private void merge(AsyncMethodsMetaData override, AsyncMethodsMetaData original)
+   {
+      this.asyncMethods = new AsyncMethodsMetaData();
+      if(override != null)
+         asyncMethods.addAll(override);
+      if(original != null)
+         asyncMethods.addAll(original);
+   }
+
+   @Override
+   public void merge(JBossEnterpriseBeanMetaData override, JBossEnterpriseBeanMetaData original)
+   {
+      super.merge(override, original);
+      
+      JBossSessionBean31MetaData joverride = override instanceof JBossGenericBeanMetaData ? null : (JBossSessionBean31MetaData) override;
+      JBossSessionBean31MetaData soriginal = original instanceof JBossGenericBeanMetaData ? null : (JBossSessionBean31MetaData) original;
+      
+      merge(joverride != null ? joverride.asyncMethods : null, soriginal != null ? soriginal.asyncMethods : null);
+   }
+   
+   @Override
+   public void merge(JBossEnterpriseBeanMetaData override, EnterpriseBeanMetaData original, String overridenFile,
+         String overrideFile, boolean mustOverride)
+   {
+      super.merge(override, original, overridenFile, overrideFile, mustOverride);
+      
+      JBossSessionBean31MetaData joverride = (JBossSessionBean31MetaData) override;
+      SessionBean31MetaData soriginal = (SessionBean31MetaData) original;
+      
+      merge(joverride != null ? joverride.asyncMethods : null, soriginal != null ? soriginal.getAsyncMethods() : null);
+   }
+}

Modified: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossSessionGenericWrapper.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossSessionGenericWrapper.java	2009-11-27 07:49:24 UTC (rev 97074)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossSessionGenericWrapper.java	2009-11-27 09:56:58 UTC (rev 97075)
@@ -29,6 +29,7 @@
 import javax.ejb.TransactionManagementType;
 
 import org.jboss.metadata.ejb.jboss.jndipolicy.spi.DefaultJndiBindingPolicy;
+import org.jboss.metadata.ejb.spec.AsyncMethodsMetaData;
 import org.jboss.metadata.ejb.spec.ContainerTransactionsMetaData;
 import org.jboss.metadata.ejb.spec.ExcludeListMetaData;
 import org.jboss.metadata.ejb.spec.MethodInterfaceType;
@@ -70,7 +71,7 @@
  * @author Scott.Stark at jboss.org
  * @version $Revision: 75470 $
  */
-class JBossSessionGenericWrapper extends JBossSessionBeanMetaData
+class JBossSessionGenericWrapper extends JBossSessionBean31MetaData
 {
    private static final long serialVersionUID = 1;
    private JBossGenericBeanMetaData delegate;
@@ -142,6 +143,11 @@
       return delegate.getAopDomainName();
    }
    @Override
+   public AsyncMethodsMetaData getAsyncMethods()
+   {
+      throw new RuntimeException("NYI");
+   }
+   @Override
    public String getConfigurationName()
    {
       return delegate.getConfigurationName();

Added: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/AsyncMethodMetaData.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/AsyncMethodMetaData.java	                        (rev 0)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/AsyncMethodMetaData.java	2009-11-27 09:56:58 UTC (rev 97075)
@@ -0,0 +1,59 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file 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.ejb.spec;
+
+import java.io.Serializable;
+
+import javax.xml.bind.annotation.XmlType;
+
+/**
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+ at XmlType(name="async-methodType", propOrder={"methodName", "methodParams"})
+public class AsyncMethodMetaData implements Serializable
+{
+   private static final long serialVersionUID = 1L;
+   
+   private String methodName;
+   private MethodParametersMetaData methodParams;
+   
+   public String getMethodName()
+   {
+      return methodName;
+   }
+
+   public void setMethodName(String methodName)
+   {
+      this.methodName = methodName;
+   }
+
+   public MethodParametersMetaData getMethodParams()
+   {
+      return methodParams;
+   }
+   
+   public void setMethodParams(MethodParametersMetaData methodParams)
+   {
+      this.methodParams = methodParams;
+   }
+}

Added: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/AsyncMethodsMetaData.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/AsyncMethodsMetaData.java	                        (rev 0)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/AsyncMethodsMetaData.java	2009-11-27 09:56:58 UTC (rev 97075)
@@ -0,0 +1,40 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file 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.ejb.spec;
+
+import java.util.ArrayList;
+
+import org.jboss.metadata.merge.MergeUtil;
+
+/**
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class AsyncMethodsMetaData extends ArrayList<AsyncMethodMetaData>
+{
+   private static final long serialVersionUID = 1L;
+
+   public void merge(AsyncMethodsMetaData override, AsyncMethodsMetaData original)
+   {
+      MergeUtil.merge(this, override, original);
+   }
+}

Added: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/EjbJar31MetaData.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/EjbJar31MetaData.java	                        (rev 0)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/EjbJar31MetaData.java	2009-11-27 09:56:58 UTC (rev 97075)
@@ -0,0 +1,49 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file 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.ejb.spec;
+
+import javax.xml.bind.annotation.XmlNs;
+import javax.xml.bind.annotation.XmlNsForm;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+import org.jboss.metadata.javaee.spec.JavaEEMetaDataConstants;
+import org.jboss.xb.annotations.JBossXmlSchema;
+
+/**
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+ at XmlRootElement(name="ejb-jar", namespace=JavaEEMetaDataConstants.JAVAEE_NS)
+ at JBossXmlSchema(
+      xmlns={@XmlNs(namespaceURI = JavaEEMetaDataConstants.JAVAEE_NS, prefix = "jee")},
+      ignoreUnresolvedFieldOrClass=false,
+      namespace=JavaEEMetaDataConstants.JAVAEE_NS,
+      elementFormDefault=XmlNsForm.QUALIFIED,
+      normalizeSpace=true)
+ at XmlType(name="ejb-jarType",
+      namespace=JavaEEMetaDataConstants.JAVAEE_NS,
+      propOrder={"descriptionGroup", "enterpriseBeans", "interceptors", "relationships", "assemblyDescriptor", "ejbClientJar"})
+public class EjbJar31MetaData extends EjbJar3xMetaData
+{
+   private static final long serialVersionUID = 1L;
+}

Modified: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/EnterpriseBeanMetaData.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/EnterpriseBeanMetaData.java	2009-11-27 07:49:24 UTC (rev 97074)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/EnterpriseBeanMetaData.java	2009-11-27 09:56:58 UTC (rev 97075)
@@ -67,7 +67,7 @@
 @JBossXmlModelGroup(
       kind=JBossXmlConstants.MODEL_GROUP_CHOICE,
       particles={
-            @JBossXmlModelGroup.Particle(element=@XmlElement(name="session"), type=SessionBeanMetaData.class),
+            @JBossXmlModelGroup.Particle(element=@XmlElement(name="session"), type=SessionBean31MetaData.class),
             @JBossXmlModelGroup.Particle(element=@XmlElement(name="entity"), type=EntityBeanMetaData.class),
             @JBossXmlModelGroup.Particle(element=@XmlElement(name="message-driven"), type=MessageDrivenBeanMetaData.class)})
 public abstract class EnterpriseBeanMetaData extends NamedMetaDataWithDescriptionGroup
@@ -113,7 +113,7 @@
       if(bean instanceof MessageDrivenBeanMetaData)
          nbean = new MessageDrivenBeanMetaData();
       if(bean instanceof SessionBeanMetaData)
-         nbean = new SessionBeanMetaData();
+         nbean = new SessionBean31MetaData();
       return nbean;
    }
 

Added: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/SessionBean31MetaData.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/SessionBean31MetaData.java	                        (rev 0)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/SessionBean31MetaData.java	2009-11-27 09:56:58 UTC (rev 97075)
@@ -0,0 +1,74 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file 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.ejb.spec;
+
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+import org.jboss.metadata.common.ejb.ITimeoutTarget;
+import org.jboss.xb.annotations.JBossXmlConstants;
+import org.jboss.xb.annotations.JBossXmlType;
+
+/**
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+ at XmlType(name="session-beanType", propOrder={"descriptionGroup", "ejbName", "mappedName", "home", "remote", "localHome", "local",
+      "businessLocals", "businessRemotes", "serviceEndpoint", "ejbClass", "sessionType", "timeoutMethod", "initMethods", "removeMethods",
+      "asyncMethods",
+      "transactionType", "aroundInvokes", "environmentRefsGroup", "postActivates", "prePassivates", "securityRoleRefs", "securityIdentity"})
+ at JBossXmlType(modelGroup=JBossXmlConstants.MODEL_GROUP_UNORDERED_SEQUENCE)
+public class SessionBean31MetaData extends SessionBeanMetaData
+   implements ITimeoutTarget // FIXME: AbstractProcessor.processClass doesn't take super interfaces into account
+{
+   private static final long serialVersionUID = 1L;
+   
+   private AsyncMethodsMetaData asyncMethods;
+
+   public AsyncMethodsMetaData getAsyncMethods()
+   {
+      return asyncMethods;
+   }
+   
+   @XmlElement(name="async-method", required=false)
+   public void setAsyncMethods(AsyncMethodsMetaData asyncMethods)
+   {
+      if(asyncMethods == null)
+         throw new IllegalArgumentException("asyncMethods is null");
+      
+      this.asyncMethods = asyncMethods;
+   }
+   
+   @Override
+   public void merge(EnterpriseBeanMetaData eoverride, EnterpriseBeanMetaData eoriginal)
+   {
+      super.merge(eoverride, eoriginal);
+      SessionBean31MetaData override = (SessionBean31MetaData) eoverride;
+      SessionBean31MetaData original = (SessionBean31MetaData) eoriginal;
+      if(asyncMethods == null)
+         asyncMethods = new AsyncMethodsMetaData();
+      if(override != null && override.asyncMethods != null)
+         asyncMethods.addAll(override.asyncMethods);
+      if(original != null && original.asyncMethods != null)
+         asyncMethods.addAll(original.asyncMethods);
+   }
+}

Added: projects/metadata/ejb/trunk/src/main/resources/schema/ejb-jar_3_1.xsd
===================================================================
--- projects/metadata/ejb/trunk/src/main/resources/schema/ejb-jar_3_1.xsd	                        (rev 0)
+++ projects/metadata/ejb/trunk/src/main/resources/schema/ejb-jar_3_1.xsd	2009-11-27 09:56:58 UTC (rev 97075)
@@ -0,0 +1,3260 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema"
+            targetNamespace="http://java.sun.com/xml/ns/javaee"
+            xmlns:javaee="http://java.sun.com/xml/ns/javaee"
+            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+            elementFormDefault="qualified"
+            attributeFormDefault="unqualified"
+            version="3.1">
+  <xsd:annotation>
+    <xsd:documentation>
+
+      $Id$
+      
+    </xsd:documentation>
+  </xsd:annotation>
+
+  <xsd:annotation>
+    <xsd:documentation>
+
+      DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+      
+      Copyright 2003-2009 Sun Microsystems, Inc. All rights reserved.
+      
+      The contents of this file are subject to the terms of either the
+      GNU General Public License Version 2 only ("GPL") or the Common
+      Development and Distribution License("CDDL") (collectively, the
+      "License").  You may not use this file except in compliance with
+      the License. You can obtain a copy of the License at
+      https://glassfish.dev.java.net/public/CDDL+GPL.html or
+      glassfish/bootstrap/legal/LICENSE.txt.  See the License for the
+      specific language governing permissions and limitations under the
+      License.
+      
+      When distributing the software, include this License Header
+      Notice in each file and include the License file at
+      glassfish/bootstrap/legal/LICENSE.txt.  Sun designates this
+      particular file as subject to the "Classpath" exception as
+      provided by Sun in the GPL Version 2 section of the License file
+      that accompanied this code.  If applicable, add the following
+      below the License Header, with the fields enclosed by brackets []
+      replaced by your own identifying information:
+      "Portions Copyrighted [year] [name of copyright owner]"
+      
+      Contributor(s):
+      
+      If you wish your version of this file to be governed by only the
+      CDDL or only the GPL Version 2, indicate your decision by adding
+      "[Contributor] elects to include this software in this
+      distribution under the [CDDL or GPL Version 2] license."  If you
+      don't indicate a single choice of license, a recipient has the
+      option to distribute your version of this file under either the
+      CDDL, the GPL Version 2 or to extend the choice of license to its
+      licensees as provided above.  However, if you add GPL Version 2
+      code and therefore, elected the GPL Version 2 license, then the
+      option applies only if the new code is made subject to such
+      option by the copyright holder.
+      
+      
+      Portions Copyrighted 2009 Red Hat
+      
+      Red Hat elects to include this software in this
+      distribution under the GPL Version 2 license.
+    </xsd:documentation>
+  </xsd:annotation>
+
+  <xsd:annotation>
+    <xsd:documentation>
+<![CDATA[[
+      This is the XML Schema for the EJB 3.1 deployment descriptor.
+      
+      All EJB deployment descriptors must indicate
+      the schema by using the Java EE namespace:
+      
+      http://java.sun.com/xml/ns/javaee
+      
+      and by indicating the version of the schema by
+      using the version element as shown below:
+      
+      <ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
+      	  http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
+      version="3.1">
+      ...
+      </ejb-jar>
+      
+      The instance documents may indicate the published version of
+      the schema using the xsi:schemaLocation attribute for the
+      Java EE namespace with the following location:
+      
+      http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd
+      
+]]>
+    </xsd:documentation>
+  </xsd:annotation>
+
+  <xsd:annotation>
+    <xsd:documentation>
+
+      The following conventions apply to all Java EE
+      deployment descriptor elements unless indicated otherwise.
+      
+      - In elements that specify a pathname to a file within the
+      same JAR file, relative filenames (i.e., those not
+      starting with "/") are considered relative to the root of
+      the JAR file's namespace.  Absolute filenames (i.e., those
+      starting with "/") also specify names in the root of the
+      JAR file's namespace.  In general, relative names are
+      preferred.  The exception is .war files where absolute
+      names are preferred for consistency with the Servlet API.
+      
+    </xsd:documentation>
+  </xsd:annotation>
+
+  <xsd:include schemaLocation="javaee_6.xsd"/>
+
+
+<!-- **************************************************** -->
+
+  <xsd:element name="ejb-jar"
+               type="javaee:ejb-jarType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        This is the root of the ejb-jar deployment descriptor.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:key name="ejb-name-key">
+      <xsd:annotation>
+        <xsd:documentation>
+
+          The ejb-name element contains the name of an enterprise
+          bean. The name must be unique within the ejb-jar or
+          .war file.
+          
+        </xsd:documentation>
+      </xsd:annotation>
+      <xsd:selector xpath="javaee:enterprise-beans/*"/>
+      <xsd:field xpath="javaee:ejb-name"/>
+    </xsd:key>
+    <xsd:keyref name="ejb-name-references"
+                refer="javaee:ejb-name-key">
+      <xsd:annotation>
+        <xsd:documentation>
+
+          The keyref indicates the references from
+          relationship-role-source must be to a specific ejb-name
+          defined within the scope of enterprise-beans element. 
+          
+        </xsd:documentation>
+      </xsd:annotation>
+      <xsd:selector xpath=".//javaee:ejb-relationship-role/javaee:relationship-role-source"/>
+      <xsd:field xpath="javaee:ejb-name"/>
+    </xsd:keyref>
+    <xsd:key name="role-name-key">
+      <xsd:annotation>
+        <xsd:documentation>
+
+          A role-name-key is specified to allow the references
+          from the security-role-refs.
+          
+        </xsd:documentation>
+      </xsd:annotation>
+      <xsd:selector xpath="javaee:assembly-descriptor/javaee:security-role"/>
+      <xsd:field xpath="javaee:role-name"/>
+    </xsd:key>
+    <xsd:keyref name="role-name-references"
+                refer="javaee:role-name-key">
+      <xsd:annotation>
+        <xsd:documentation>
+
+          The keyref indicates the references from
+          security-role-ref to a specified role-name.
+          
+        </xsd:documentation>
+      </xsd:annotation>
+      <xsd:selector xpath="javaee:enterprise-beans/*/javaee:security-role-ref"/>
+      <xsd:field xpath="javaee:role-link"/>
+    </xsd:keyref>
+  </xsd:element>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="access-timeoutType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The access-timeoutType represents the maximum amount of
+        time (in a given time unit) that the container should wait for
+        a concurrency lock before throwing a timeout exception to the
+        client.
+        
+        A timeout value of 0 means concurrent access is not permitted.
+        
+        A timeout value of -1 means wait indefinitely to acquire a lock.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="timeout"
+                   type="javaee:xsdIntegerType"/>
+      <xsd:element name="unit"
+                   type="javaee:time-unit-typeType"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="async-methodType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The async-methodType element specifies that a session
+        bean method has asynchronous invocation semantics.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="method-name"
+                   type="javaee:string"/>
+      <xsd:element name="method-params"
+                   type="javaee:method-paramsType"
+                   minOccurs="0"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="activation-configType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The activation-configType defines information about the
+        expected configuration properties of the message-driven bean
+        in its operational environment. This may include information
+        about message acknowledgement, message selector, expected
+        destination type, etc.
+        
+        The configuration information is expressed in terms of
+        name/value configuration properties.
+        
+        The properties that are recognized for a particular
+        message-driven bean are determined by the messaging type.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="description"
+                   type="javaee:descriptionType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="activation-config-property"
+                   type="javaee:activation-config-propertyType"
+                   maxOccurs="unbounded"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="activation-config-propertyType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The activation-config-propertyType contains a name/value
+        configuration property pair for a message-driven bean.
+        
+        The properties that are recognized for a particular
+        message-driven bean are determined by the messaging type.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="activation-config-property-name"
+                   type="javaee:xsdStringType">
+        <xsd:annotation>
+          <xsd:documentation>
+
+            The activation-config-property-name element contains
+            the name for an activation configuration property of
+            a message-driven bean.
+            
+            For JMS message-driven beans, the following property
+            names are recognized: acknowledgeMode,
+            messageSelector, destinationType, subscriptionDurability
+            
+          </xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element name="activation-config-property-value"
+                   type="javaee:xsdStringType">
+        <xsd:annotation>
+          <xsd:documentation>
+
+            The activation-config-property-value element
+            contains the value for an activation configuration
+            property of a message-driven bean.
+            
+          </xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="around-invokeType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The around-invoke type specifies a method on a
+        class to be called during the around invoke portion of an 
+        ejb invocation.  Note that each class may have only one
+        around invoke method and that the method may not be
+        overloaded.
+        
+        If the class element is missing then
+        the class defining the callback is assumed to be the
+        interceptor class or component class in scope at the
+        location in the descriptor in which the around invoke
+        definition appears.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="class"
+                   type="javaee:fully-qualified-classType"
+                   minOccurs="0"/>
+      <xsd:element name="method-name"
+                   type="javaee:java-identifierType"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="around-timeoutType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The around-timeout type specifies a method on a
+        class to be called during the around-timeout portion of
+        a timer timeout callback.  Note that each class may have 
+        only one around-timeout method and that the method may not 
+        be overloaded.
+        
+        If the class element is missing then
+        the class defining the callback is assumed to be the
+        interceptor class or component class in scope at the
+        location in the descriptor in which the around-timeout
+        definition appears.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="class"
+                   type="javaee:fully-qualified-classType"
+                   minOccurs="0"/>
+      <xsd:element name="method-name"
+                   type="javaee:java-identifierType"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="assembly-descriptorType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The assembly-descriptorType defines
+        application-assembly information.
+        
+        The application-assembly information consists of the
+        following parts: the definition of security roles, the
+        definition of method permissions, the definition of
+        transaction attributes for enterprise beans with
+        container-managed transaction demarcation, the definition
+        of interceptor bindings, a list of
+        methods to be excluded from being invoked, and a list of
+        exception types that should be treated as application exceptions.
+        
+        All the parts are optional in the sense that they are
+        omitted if the lists represented by them are empty.
+        
+        Providing an assembly-descriptor in the deployment
+        descriptor is optional for the ejb-jar or .war file producer.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="security-role"
+                   type="javaee:security-roleType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="method-permission"
+                   type="javaee:method-permissionType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="container-transaction"
+                   type="javaee:container-transactionType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="interceptor-binding"
+                   type="javaee:interceptor-bindingType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="message-destination"
+                   type="javaee:message-destinationType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="exclude-list"
+                   type="javaee:exclude-listType"
+                   minOccurs="0"/>
+      <xsd:element name="application-exception"
+                   type="javaee:application-exceptionType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="cmp-fieldType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The cmp-fieldType describes a container-managed field. The
+        cmp-fieldType contains an optional description of the field,
+        and the name of the field.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="description"
+                   type="javaee:descriptionType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="field-name"
+                   type="javaee:java-identifierType">
+        <xsd:annotation>
+          <xsd:documentation>
+
+            The field-name element specifies the name of a
+            container managed field.
+            
+            The name of the cmp-field of an entity bean with
+            cmp-version 2.x must begin with a lowercase
+            letter. This field is accessed by methods whose
+            names consists of the name of the field specified by
+            field-name in which the first letter is uppercased,
+            prefixed by "get" or "set".
+            
+            The name of the cmp-field of an entity bean with
+            cmp-version 1.x must denote a public field of the
+            enterprise bean class or one of its superclasses.
+            
+          </xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="cmp-versionType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The cmp-versionType specifies the version of an entity bean
+        with container-managed persistence. It is used by
+        cmp-version elements.
+        
+        The value must be one of the two following:
+        
+        1.x
+        2.x
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:simpleContent>
+      <xsd:restriction base="javaee:string">
+        <xsd:enumeration value="1.x"/>
+        <xsd:enumeration value="2.x"/>
+      </xsd:restriction>
+    </xsd:simpleContent>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="cmr-fieldType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The cmr-fieldType describes the bean provider's view of
+        a relationship. It consists of an optional description, and
+        the name and the class type of a field in the source of a
+        role of a relationship. The cmr-field-name element
+        corresponds to the name used for the get and set accessor
+        methods for the relationship. The cmr-field-type element is
+        used only for collection-valued cmr-fields. It specifies the
+        type of the collection that is used.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="description"
+                   type="javaee:descriptionType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="cmr-field-name"
+                   type="javaee:string">
+        <xsd:annotation>
+          <xsd:documentation>
+
+            The cmr-field-name element specifies the name of a
+            logical relationship field in the entity bean
+            class. The name of the cmr-field must begin with a
+            lowercase letter. This field is accessed by methods
+            whose names consist of the name of the field
+            specified by cmr-field-name in which the first
+            letter is uppercased, prefixed by "get" or "set".
+            
+          </xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element name="cmr-field-type"
+                   type="javaee:cmr-field-typeType"
+                   minOccurs="0"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="cmr-field-typeType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The cmr-field-type element specifies the class of a
+        collection-valued logical relationship field in the entity
+        bean class. The value of an element using cmr-field-typeType
+        must be either: java.util.Collection or java.util.Set.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:simpleContent>
+      <xsd:restriction base="javaee:string">
+        <xsd:enumeration value="java.util.Collection"/>
+        <xsd:enumeration value="java.util.Set"/>
+      </xsd:restriction>
+    </xsd:simpleContent>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="concurrency-management-typeType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The concurrency-management-typeType specifies the way concurrency
+        is managed for a singleton or stateful session bean.  
+        
+        The concurrency management type must be one of the following:
+        
+        Bean
+        Container
+        
+        Bean managed concurrency can only be specified for a singleton bean.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:simpleContent>
+      <xsd:restriction base="javaee:string">
+        <xsd:enumeration value="Bean"/>
+        <xsd:enumeration value="Container"/>
+      </xsd:restriction>
+    </xsd:simpleContent>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="concurrent-lock-typeType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The concurrent-lock-typeType specifies how the container must
+        manage concurrent access to a method of a Singleton bean 
+        with container-managed concurrency.
+        
+        The container managed concurrency lock type must be one 
+        of the following :
+        
+        Read
+        Write
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:simpleContent>
+      <xsd:restriction base="javaee:string">
+        <xsd:enumeration value="Read"/>
+        <xsd:enumeration value="Write"/>
+      </xsd:restriction>
+    </xsd:simpleContent>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="concurrent-methodType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The concurrent-methodType specifies information about a method
+        of a bean with container managed concurrency.
+        
+        The optional lock element specifies the kind of concurrency 
+        lock asssociated with the method.
+        
+        The optional access-timeout element specifies the amount of
+        time (in a given time unit) the container should wait for a
+        concurrency lock before throwing an exception to the client.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="method"
+                   type="javaee:named-methodType"/>
+      <xsd:element name="lock"
+                   type="javaee:concurrent-lock-typeType"
+                   minOccurs="0"/>
+      <xsd:element name="access-timeout"
+                   type="javaee:access-timeoutType"
+                   minOccurs="0"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="container-transactionType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The container-transactionType specifies how the container
+        must manage transaction scopes for the enterprise bean's
+        method invocations. It defines an optional description, a
+        list of method elements, and a transaction attribute. The
+        transaction attribute is to be applied to all the specified
+        methods.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="description"
+                   type="javaee:descriptionType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="method"
+                   type="javaee:methodType"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="trans-attribute"
+                   type="javaee:trans-attributeType"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="depends-onType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The depends-onType is used to express initialization 
+        ordering dependencies between Singleton components.
+        The depends-onType specifies the names of one or more
+        Singleton beans in the same application as the referring
+        Singleton, each of which must be initialized before
+        the referring bean.  
+        
+        Each dependent bean is expressed using ejb-link syntax.
+        The order in which dependent beans are initialized at 
+        runtime is not guaranteed to match the order in which
+        they are listed.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="ejb-name"
+                   type="javaee:ejb-linkType"
+                   minOccurs="1"
+                   maxOccurs="unbounded"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="ejb-classType">
+    <xsd:annotation>
+      <xsd:documentation>
+<![CDATA[[
+        The ejb-classType contains the fully-qualified name of the
+        enterprise bean's class. It is used by ejb-class elements. 
+        
+        Example:
+        
+        <ejb-class>com.wombat.empl.EmployeeServiceBean</ejb-class>
+        
+]]>
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:simpleContent>
+      <xsd:restriction base="javaee:fully-qualified-classType"/>
+    </xsd:simpleContent>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="ejb-jarType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The ejb-jarType defines the root element of the EJB
+        deployment descriptor. It contains
+        
+        - an optional description of the ejb-jar file
+        - an optional display name
+        - an optional icon that contains a small and a large
+        icon file name
+        - an optional module name. Only applicable to
+        stand-alone ejb-jars or ejb-jars packaged in an ear.
+        Ignored if specified for an ejb-jar.xml within a .war.
+        In that case, standard .war module-name rules apply.
+        - structural information about all included
+        enterprise beans that is not specified through
+        annotations
+        - structural information about interceptor classes
+        - a descriptor for container managed relationships, 
+        if any. 
+        - an optional application-assembly descriptor
+        - an optional name of an ejb-client-jar file for the 
+        ejb-jar.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="module-name"
+                   type="javaee:string"
+                   minOccurs="0"/>
+      <xsd:group ref="javaee:descriptionGroup"/>
+      <xsd:element name="enterprise-beans"
+                   type="javaee:enterprise-beansType"
+                   minOccurs="0"/>
+      <xsd:element name="interceptors"
+                   type="javaee:interceptorsType"
+                   minOccurs="0"/>
+      <xsd:element name="relationships"
+                   type="javaee:relationshipsType"
+                   minOccurs="0">
+        <xsd:unique name="relationship-name-uniqueness">
+          <xsd:annotation>
+            <xsd:documentation>
+
+              The ejb-relation-name contains the name of a
+              relation. The name must be unique within
+              relationships.
+              
+            </xsd:documentation>
+          </xsd:annotation>
+          <xsd:selector xpath="javaee:ejb-relation"/>
+          <xsd:field xpath="javaee:ejb-relation-name"/>
+        </xsd:unique>
+      </xsd:element>
+      <xsd:element name="assembly-descriptor"
+                   type="javaee:assembly-descriptorType"
+                   minOccurs="0">
+        <xsd:annotation>
+          <xsd:documentation>
+
+            Providing an assembly-descriptor in the deployment
+            descriptor is optional for the ejb-jar or .war file
+            producer.
+            
+          </xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element name="ejb-client-jar"
+                   type="javaee:pathType"
+                   minOccurs="0">
+        <xsd:annotation>
+          <xsd:documentation>
+<![CDATA[[
+            The optional ejb-client-jar element specifies a JAR
+            file that contains the class files necessary for a
+            client program to access the
+            enterprise beans in the ejb-jar file.
+            
+            Example:
+            
+            	  <ejb-client-jar>employee_service_client.jar
+            	  </ejb-client-jar>
+            
+]]>
+          </xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+    </xsd:sequence>
+    <xsd:attribute name="version"
+                   type="javaee:dewey-versionType"
+                   fixed="3.1"
+                   use="required">
+      <xsd:annotation>
+        <xsd:documentation>
+
+          The version specifies the version of the
+          EJB specification that the instance document must 
+          comply with. This information enables deployment tools
+          to validate a particular EJB Deployment
+          Descriptor with respect to a specific version of the EJB
+          schema. 
+          
+        </xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="metadata-complete"
+                   type="xsd:boolean">
+      <xsd:annotation>
+        <xsd:documentation>
+
+          The metadata-complete attribute defines whether this
+          deployment descriptor and other related deployment
+          descriptors for this module (e.g., web service
+          descriptors) are complete, or whether the class
+          files available to this module and packaged with
+          this application should be examined for annotations
+          that specify deployment information.
+          
+          If metadata-complete is set to "true", the deployment
+          tool must ignore any annotations that specify deployment
+          information, which might be present in the class files
+          of the application.
+          
+          If metadata-complete is not specified or is set to
+          "false", the deployment tool must examine the class
+          files of the application for annotations, as
+          specified by the specifications.
+          
+        </xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="ejb-nameType">
+    <xsd:annotation>
+      <xsd:documentation>
+<![CDATA[[
+        The ejb-nameType specifies an enterprise bean's name. It is
+        used by ejb-name elements. This name is assigned by the
+        file producer to name the enterprise bean in the
+        ejb-jar or .war file's deployment descriptor. The name must be
+        unique among the names of the enterprise beans in the same
+        ejb-jar or .war file.
+        
+        There is no architected relationship between the used
+        ejb-name in the deployment descriptor and the JNDI name that
+        the Deployer will assign to the enterprise bean's home.
+        
+        The name for an entity bean must conform to the lexical
+        rules for an NMTOKEN.
+        
+        Example:
+        
+        <ejb-name>EmployeeService</ejb-name>
+        
+]]>
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:simpleContent>
+      <xsd:restriction base="javaee:xsdNMTOKENType"/>
+    </xsd:simpleContent>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="ejb-relationType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The ejb-relationType describes a relationship between two
+        entity beans with container-managed persistence.  It is used
+        by ejb-relation elements. It contains a description; an
+        optional ejb-relation-name element; and exactly two
+        relationship role declarations, defined by the
+        ejb-relationship-role elements. The name of the
+        relationship, if specified, is unique within the ejb-jar
+        file.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="description"
+                   type="javaee:descriptionType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="ejb-relation-name"
+                   type="javaee:string"
+                   minOccurs="0">
+        <xsd:annotation>
+          <xsd:documentation>
+
+            The ejb-relation-name element provides a unique name
+            within the ejb-jar file for a relationship.
+            
+          </xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element name="ejb-relationship-role"
+                   type="javaee:ejb-relationship-roleType"/>
+      <xsd:element name="ejb-relationship-role"
+                   type="javaee:ejb-relationship-roleType"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="ejb-relationship-roleType">
+    <xsd:annotation>
+      <xsd:documentation>
+<![CDATA[[
+        The ejb-relationship-roleType describes a role within a
+        relationship. There are two roles in each relationship.
+        
+        The ejb-relationship-roleType contains an optional
+        description; an optional name for the relationship role; a
+        specification of the multiplicity of the role; an optional
+        specification of cascade-delete functionality for the role;
+        the role source; and a declaration of the cmr-field, if any,
+        by means of which the other side of the relationship is
+        accessed from the perspective of the role source.
+        
+        The multiplicity and role-source element are mandatory.
+        
+        The relationship-role-source element designates an entity
+        bean by means of an ejb-name element. For bidirectional
+        relationships, both roles of a relationship must declare a
+        relationship-role-source element that specifies a cmr-field
+        in terms of which the relationship is accessed. The lack of
+        a cmr-field element in an ejb-relationship-role specifies
+        that the relationship is unidirectional in navigability and
+        the entity bean that participates in the relationship is
+        "not aware" of the relationship.
+        
+        Example:
+        
+        <ejb-relation>
+        <ejb-relation-name>Product-LineItem</ejb-relation-name>
+        <ejb-relationship-role>
+        	  <ejb-relationship-role-name>product-has-lineitems
+        	  </ejb-relationship-role-name>
+        	  <multiplicity>One</multiplicity>
+        	  <relationship-role-source>
+        	  <ejb-name>ProductEJB</ejb-name>
+        	  </relationship-role-source>
+        </ejb-relationship-role>
+        </ejb-relation>
+        
+]]>
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="description"
+                   type="javaee:descriptionType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="ejb-relationship-role-name"
+                   type="javaee:string"
+                   minOccurs="0">
+        <xsd:annotation>
+          <xsd:documentation>
+
+            The ejb-relationship-role-name element defines a
+            name for a role that is unique within an
+            ejb-relation. Different relationships can use the
+            same name for a role.
+            
+          </xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element name="multiplicity"
+                   type="javaee:multiplicityType"/>
+      <xsd:element name="cascade-delete"
+                   type="javaee:emptyType"
+                   minOccurs="0">
+        <xsd:annotation>
+          <xsd:documentation>
+
+            The cascade-delete element specifies that, within a
+            particular relationship, the lifetime of one or more
+            entity beans is dependent upon the lifetime of
+            another entity bean. The cascade-delete element can
+            only be specified for an ejb-relationship-role
+            element contained in an ejb-relation element in
+            which the other ejb-relationship-role
+            element specifies a multiplicity of One.
+            
+          </xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element name="relationship-role-source"
+                   type="javaee:relationship-role-sourceType"/>
+      <xsd:element name="cmr-field"
+                   type="javaee:cmr-fieldType"
+                   minOccurs="0"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="enterprise-beansType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The enterprise-beansType declares one or more enterprise
+        beans. Each bean can be a session, entity or message-driven
+        bean.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:choice maxOccurs="unbounded">
+      <xsd:element name="session"
+                   type="javaee:session-beanType">
+        <xsd:unique name="session-ejb-local-ref-name-uniqueness">
+          <xsd:annotation>
+            <xsd:documentation>
+
+              The ejb-ref-name element contains the name of
+              an EJB reference. The EJB reference is an entry in
+              the component's environment and is relative to the
+              java:comp/env context.  The name must be unique within
+              the component.
+              
+              It is recommended that name be prefixed with "ejb/".
+              
+            </xsd:documentation>
+          </xsd:annotation>
+          <xsd:selector xpath="javaee:ejb-local-ref"/>
+          <xsd:field xpath="javaee:ejb-ref-name"/>
+        </xsd:unique>
+        <xsd:unique name="session-ejb-ref-name-uniqueness">
+          <xsd:annotation>
+            <xsd:documentation>
+
+              The ejb-ref-name element contains the name of an EJB
+              reference. The EJB reference is an entry in the
+              component's environment and is relative to the
+              java:comp/env context. The name must be unique
+              within the component.
+              
+              It is recommended that name is prefixed with "ejb/".
+              
+            </xsd:documentation>
+          </xsd:annotation>
+          <xsd:selector xpath="javaee:ejb-ref"/>
+          <xsd:field xpath="javaee:ejb-ref-name"/>
+        </xsd:unique>
+        <xsd:unique name="session-resource-env-ref-uniqueness">
+          <xsd:annotation>
+            <xsd:documentation>
+
+              The resource-env-ref-name element specifies the name
+              of a resource environment reference; its value is
+              the environment entry name used in the component
+              code. The name is a JNDI name relative to the
+              java:comp/env context and must be unique within an
+              component.
+              
+            </xsd:documentation>
+          </xsd:annotation>
+          <xsd:selector xpath="javaee:resource-env-ref"/>
+          <xsd:field xpath="javaee:resource-env-ref-name"/>
+        </xsd:unique>
+        <xsd:unique name="session-message-destination-ref-uniqueness">
+          <xsd:annotation>
+            <xsd:documentation>
+
+              The message-destination-ref-name element specifies the name
+              of a message destination reference; its value is
+              the message destination reference name used in the component
+              code. The name is a JNDI name relative to the
+              java:comp/env context and must be unique within an
+              component.
+              
+            </xsd:documentation>
+          </xsd:annotation>
+          <xsd:selector xpath="javaee:message-destination-ref"/>
+          <xsd:field xpath="javaee:message-destination-ref-name"/>
+        </xsd:unique>
+        <xsd:unique name="session-res-ref-name-uniqueness">
+          <xsd:annotation>
+            <xsd:documentation>
+
+              The res-ref-name element specifies the name of a
+              resource manager connection factory reference.  The name
+              is a JNDI name relative to the java:comp/env context.
+              The name must be unique within an component.
+              
+            </xsd:documentation>
+          </xsd:annotation>
+          <xsd:selector xpath="javaee:resource-ref"/>
+          <xsd:field xpath="javaee:res-ref-name"/>
+        </xsd:unique>
+        <xsd:unique name="session-env-entry-name-uniqueness">
+          <xsd:annotation>
+            <xsd:documentation>
+
+              The env-entry-name element contains the name of a
+              component's environment entry.  The name is a JNDI
+              name relative to the java:comp/env context.  The
+              name must be unique within an component.
+              
+            </xsd:documentation>
+          </xsd:annotation>
+          <xsd:selector xpath="javaee:env-entry"/>
+          <xsd:field xpath="javaee:env-entry-name"/>
+        </xsd:unique>
+      </xsd:element>
+      <xsd:element name="entity"
+                   type="javaee:entity-beanType">
+        <xsd:unique name="entity-ejb-local-ref-name-uniqueness">
+          <xsd:annotation>
+            <xsd:documentation>
+
+              The ejb-ref-name element contains the name of
+              an EJB reference. The EJB reference is an entry in
+              the component's environment and is relative to the
+              java:comp/env context.  The name must be unique within
+              the component.
+              
+              It is recommended that name be prefixed with "ejb/".
+              
+            </xsd:documentation>
+          </xsd:annotation>
+          <xsd:selector xpath="javaee:ejb-local-ref"/>
+          <xsd:field xpath="javaee:ejb-ref-name"/>
+        </xsd:unique>
+        <xsd:unique name="entity-ejb-ref-name-uniqueness">
+          <xsd:annotation>
+            <xsd:documentation>
+
+              The ejb-ref-name element contains the name of an EJB
+              reference. The EJB reference is an entry in the
+              component's environment and is relative to the
+              java:comp/env context. The name must be unique
+              within the component.
+              
+              It is recommended that name is prefixed with "ejb/".
+              
+            </xsd:documentation>
+          </xsd:annotation>
+          <xsd:selector xpath="javaee:ejb-ref"/>
+          <xsd:field xpath="javaee:ejb-ref-name"/>
+        </xsd:unique>
+        <xsd:unique name="entity-resource-env-ref-uniqueness">
+          <xsd:annotation>
+            <xsd:documentation>
+
+              The resource-env-ref-name element specifies the name
+              of a resource environment reference; its value is
+              the environment entry name used in the component
+              code. The name is a JNDI name relative to the
+              java:comp/env context and must be unique within an
+              component.
+              
+            </xsd:documentation>
+          </xsd:annotation>
+          <xsd:selector xpath="javaee:resource-env-ref"/>
+          <xsd:field xpath="javaee:resource-env-ref-name"/>
+        </xsd:unique>
+        <xsd:unique name="entity-message-destination-ref-uniqueness">
+          <xsd:annotation>
+            <xsd:documentation>
+
+              The message-destination-ref-name element specifies the name
+              of a message destination reference; its value is
+              the message destination reference name used in the component
+              code. The name is a JNDI name relative to the
+              java:comp/env context and must be unique within an
+              component.
+              
+            </xsd:documentation>
+          </xsd:annotation>
+          <xsd:selector xpath="javaee:message-destination-ref"/>
+          <xsd:field xpath="javaee:message-destination-ref-name"/>
+        </xsd:unique>
+        <xsd:unique name="entity-res-ref-name-uniqueness">
+          <xsd:annotation>
+            <xsd:documentation>
+
+              The res-ref-name element specifies the name of a
+              resource manager connection factory reference.  The name
+              is a JNDI name relative to the java:comp/env context.
+              The name must be unique within an component.
+              
+            </xsd:documentation>
+          </xsd:annotation>
+          <xsd:selector xpath="javaee:resource-ref"/>
+          <xsd:field xpath="javaee:res-ref-name"/>
+        </xsd:unique>
+        <xsd:unique name="entity-env-entry-name-uniqueness">
+          <xsd:annotation>
+            <xsd:documentation>
+
+              The env-entry-name element contains the name of a
+              component's environment entry.  The name is a JNDI
+              name relative to the java:comp/env context.  The
+              name must be unique within an component.
+              
+            </xsd:documentation>
+          </xsd:annotation>
+          <xsd:selector xpath="javaee:env-entry"/>
+          <xsd:field xpath="javaee:env-entry-name"/>
+        </xsd:unique>
+      </xsd:element>
+      <xsd:element name="message-driven"
+                   type="javaee:message-driven-beanType">
+        <xsd:unique name="messaged-ejb-local-ref-name-uniqueness">
+          <xsd:annotation>
+            <xsd:documentation>
+
+              The ejb-ref-name element contains the name of
+              an EJB reference. The EJB reference is an entry in
+              the component's environment and is relative to the
+              java:comp/env context.  The name must be unique within
+              the component.
+              
+              It is recommended that name be prefixed with "ejb/".
+              
+            </xsd:documentation>
+          </xsd:annotation>
+          <xsd:selector xpath="javaee:ejb-local-ref"/>
+          <xsd:field xpath="javaee:ejb-ref-name"/>
+        </xsd:unique>
+        <xsd:unique name="messaged-ejb-ref-name-uniqueness">
+          <xsd:annotation>
+            <xsd:documentation>
+
+              The ejb-ref-name element contains the name of an EJB
+              reference. The EJB reference is an entry in the
+              component's environment and is relative to the
+              java:comp/env context. The name must be unique
+              within the component.
+              
+              It is recommended that name is prefixed with "ejb/".
+              
+            </xsd:documentation>
+          </xsd:annotation>
+          <xsd:selector xpath="javaee:ejb-ref"/>
+          <xsd:field xpath="javaee:ejb-ref-name"/>
+        </xsd:unique>
+        <xsd:unique name="messaged-resource-env-ref-uniqueness">
+          <xsd:annotation>
+            <xsd:documentation>
+
+              The resource-env-ref-name element specifies the name
+              of a resource environment reference; its value is
+              the environment entry name used in the component
+              code. The name is a JNDI name relative to the
+              java:comp/env context and must be unique within an
+              component.
+              
+            </xsd:documentation>
+          </xsd:annotation>
+          <xsd:selector xpath="javaee:resource-env-ref"/>
+          <xsd:field xpath="javaee:resource-env-ref-name"/>
+        </xsd:unique>
+        <xsd:unique name="messaged-message-destination-ref-uniqueness">
+          <xsd:annotation>
+            <xsd:documentation>
+
+              The message-destination-ref-name element specifies the name
+              of a message destination reference; its value is
+              the message destination reference name used in the component
+              code. The name is a JNDI name relative to the
+              java:comp/env context and must be unique within an
+              component.
+              
+            </xsd:documentation>
+          </xsd:annotation>
+          <xsd:selector xpath="javaee:message-destination-ref"/>
+          <xsd:field xpath="javaee:message-destination-ref-name"/>
+        </xsd:unique>
+        <xsd:unique name="messaged-res-ref-name-uniqueness">
+          <xsd:annotation>
+            <xsd:documentation>
+
+              The res-ref-name element specifies the name of a
+              resource manager connection factory reference.  The name
+              is a JNDI name relative to the java:comp/env context.
+              The name must be unique within an component.
+              
+            </xsd:documentation>
+          </xsd:annotation>
+          <xsd:selector xpath="javaee:resource-ref"/>
+          <xsd:field xpath="javaee:res-ref-name"/>
+        </xsd:unique>
+        <xsd:unique name="messaged-env-entry-name-uniqueness">
+          <xsd:annotation>
+            <xsd:documentation>
+
+              The env-entry-name element contains the name of a
+              component's environment entry.  The name is a JNDI
+              name relative to the java:comp/env context.  The
+              name must be unique within an component.
+              
+            </xsd:documentation>
+          </xsd:annotation>
+          <xsd:selector xpath="javaee:env-entry"/>
+          <xsd:field xpath="javaee:env-entry-name"/>
+        </xsd:unique>
+      </xsd:element>
+    </xsd:choice>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="entity-beanType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The entity-beanType declares an entity bean. The declaration
+        consists of:
+        
+        - an optional description
+        - an optional display name
+        - an optional icon element that contains a small and a large 
+        icon file name
+        - a unique name assigned to the enterprise bean
+        in the deployment descriptor
+        - an optional mapped-name element that can be used to provide
+        vendor-specific deployment information such as the physical
+        jndi-name of the entity bean's remote home interface. This 
+        element is not required to be supported by all implementations.
+        Any use of this element is non-portable.
+        - the names of the entity bean's remote home 
+        and remote interfaces, if any
+        - the names of the entity bean's local home and local
+        interfaces, if any
+        - the entity bean's implementation class
+        - the optional entity bean's persistence management type. If 
+        this element is not specified it is defaulted to Container.
+        - the entity bean's primary key class name
+        - an indication of the entity bean's reentrancy
+        - an optional specification of the 
+        entity bean's cmp-version
+        - an optional specification of the entity bean's
+        abstract schema name
+        - an optional list of container-managed fields
+        - an optional specification of the primary key 
+        field
+        - an optional declaration of the bean's environment 
+        entries
+        - an optional declaration of the bean's EJB 
+        references
+        - an optional declaration of the bean's local 
+        EJB references
+        - an optional declaration of the bean's web 
+        service references
+        - an optional declaration of the security role 
+        references
+        - an optional declaration of the security identity
+        to be used for the execution of the bean's methods
+        - an optional declaration of the bean's 
+        resource manager connection factory references
+        - an optional declaration of the bean's
+        resource environment references
+        - an optional declaration of the bean's message 
+        destination references
+        - an optional set of query declarations
+        for finder and select methods for an entity
+        bean with cmp-version 2.x.
+        
+        The optional abstract-schema-name element must be specified
+        for an entity bean with container-managed persistence and
+        cmp-version 2.x.
+        
+        The optional primkey-field may be present in the descriptor
+        if the entity's persistence-type is Container.
+        
+        The optional cmp-version element may be present in the
+        descriptor if the entity's persistence-type is Container. If
+        the persistence-type is Container and the cmp-version
+        element is not specified, its value defaults to 2.x.
+        
+        The optional home and remote elements must be specified if
+        the entity bean cmp-version is 1.x.
+        
+        The optional home and remote elements must be specified if
+        the entity bean has a remote home and remote interface.
+        
+        The optional local-home and local elements must be specified
+        if the entity bean has a local home and local interface.
+        
+        Either both the local-home and the local elements or both
+        the home and the remote elements must be specified.
+        
+        The optional query elements must be present if the
+        persistence-type is Container and the cmp-version is 2.x and
+        query methods other than findByPrimaryKey have been defined
+        for the entity bean.
+        
+        The other elements that are optional are "optional" in the
+        sense that they are omitted if the lists represented by them
+        are empty.
+        
+        At least one cmp-field element must be present in the
+        descriptor if the entity's persistence-type is Container and
+        the cmp-version is 1.x, and none must not be present if the
+        entity's persistence-type is Bean.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:group ref="javaee:descriptionGroup"/>
+      <xsd:element name="ejb-name"
+                   type="javaee:ejb-nameType"/>
+      <xsd:element name="mapped-name"
+                   type="javaee:xsdStringType"
+                   minOccurs="0"/>
+      <xsd:element name="home"
+                   type="javaee:homeType"
+                   minOccurs="0"/>
+      <xsd:element name="remote"
+                   type="javaee:remoteType"
+                   minOccurs="0"/>
+      <xsd:element name="local-home"
+                   type="javaee:local-homeType"
+                   minOccurs="0"/>
+      <xsd:element name="local"
+                   type="javaee:localType"
+                   minOccurs="0"/>
+      <xsd:element name="ejb-class"
+                   type="javaee:ejb-classType"/>
+      <xsd:element name="persistence-type"
+                   type="javaee:persistence-typeType"/>
+      <xsd:element name="prim-key-class"
+                   type="javaee:fully-qualified-classType">
+        <xsd:annotation>
+          <xsd:documentation>
+
+            The prim-key-class element contains the
+            fully-qualified name of an
+            entity bean's primary key class.
+            
+            If the definition of the primary key class is
+            deferred to deployment time, the prim-key-class 
+            element should specify java.lang.Object.
+            
+          </xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element name="reentrant"
+                   type="javaee:true-falseType">
+        <xsd:annotation>
+          <xsd:documentation>
+
+            The reentrant element specifies whether an entity
+            bean is reentrant or not.
+            
+            The reentrant element must be one of the two
+            following: true or false
+            
+          </xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element name="cmp-version"
+                   type="javaee:cmp-versionType"
+                   minOccurs="0"/>
+      <xsd:element name="abstract-schema-name"
+                   type="javaee:java-identifierType"
+                   minOccurs="0">
+        <xsd:annotation>
+          <xsd:documentation>
+
+            The abstract-schema-name element specifies the name
+            of the abstract schema type of an entity bean with 
+            cmp-version 2.x. It is used in EJB QL queries. 
+            
+            For example, the abstract-schema-name for an entity 
+            bean whose local interface is 
+            com.acme.commerce.Order might be Order. 
+            
+          </xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element name="cmp-field"
+                   type="javaee:cmp-fieldType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="primkey-field"
+                   type="javaee:string"
+                   minOccurs="0">
+        <xsd:annotation>
+          <xsd:documentation>
+
+            The primkey-field element is used to specify the
+            name of the primary key field for an entity with
+            container-managed persistence.
+            
+            The primkey-field must be one of the fields declared
+            in the cmp-field element, and the type of the field
+            must be the same as the primary key type.
+            
+            The primkey-field element is not used if the primary
+            key maps to multiple container-managed fields
+            (i.e. the key is a compound key). In this case, the
+            fields of the primary key class must be public, and
+            their names must correspond to the field names of
+            the entity bean class that comprise the key.
+            
+          </xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:group ref="javaee:jndiEnvironmentRefsGroup"/>
+      <xsd:element name="security-role-ref"
+                   type="javaee:security-role-refType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="security-identity"
+                   type="javaee:security-identityType"
+                   minOccurs="0"/>
+      <xsd:element name="query"
+                   type="javaee:queryType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="exclude-listType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The exclude-listType specifies one or more methods which
+        the Assembler marks to be uncallable.
+        
+        If the method permission relation contains methods that are
+        in the exclude list, the Deployer should consider those
+        methods to be uncallable.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="description"
+                   type="javaee:descriptionType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="method"
+                   type="javaee:methodType"
+                   maxOccurs="unbounded"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="application-exceptionType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The application-exceptionType declares an application
+        exception. The declaration consists of:
+        
+        - the exception class. When the container receives
+        an exception of this type, it is required to 
+        forward this exception as an applcation exception 
+        to the client regardless of whether it is a checked
+        or unchecked exception.
+        - an optional rollback element. If this element is 
+        set to true, the container must rollback the current 
+        transaction before forwarding the exception to the
+        client.  If not specified, it defaults to false.
+        - an optional inherited element. If this element is 
+        set to true, subclasses of the exception class type
+        are also automatically considered application 
+        exceptions (unless overriden at a lower level).
+        If set to false, only the exception class type is
+        considered an application-exception, not its
+        exception subclasses. If not specified, this
+        value defaults to true.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="exception-class"
+                   type="javaee:fully-qualified-classType"/>
+      <xsd:element name="rollback"
+                   type="javaee:true-falseType"
+                   minOccurs="0"/>
+      <xsd:element name="inherited"
+                   type="javaee:true-falseType"
+                   minOccurs="0"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="interceptorsType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The interceptorsType element declares one or more interceptor
+        classes used by components within this ejb-jar or .war.  The declaration
+        consists of :
+        
+        - An optional description.
+        - One or more interceptor elements.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="description"
+                   type="javaee:descriptionType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="interceptor"
+                   type="javaee:interceptorType"
+                   maxOccurs="unbounded"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="interceptorType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The interceptorType element declares information about a single
+        interceptor class.  It consists of :
+        
+        - An optional description.
+        - The fully-qualified name of the interceptor class.
+        - An optional list of around invoke methods declared on the
+        interceptor class and/or its super-classes.
+        - An optional list of around timeout methods declared on the
+        interceptor class and/or its super-classes.
+        - An optional list environment dependencies for the interceptor
+        class and/or its super-classes.
+        - An optional list of post-activate methods declared on the
+        interceptor class and/or its super-classes.
+        - An optional list of pre-passivate methods declared on the
+        interceptor class and/or its super-classes.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="description"
+                   type="javaee:descriptionType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="interceptor-class"
+                   type="javaee:fully-qualified-classType"/>
+      <xsd:element name="around-invoke"
+                   type="javaee:around-invokeType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="around-timeout"
+                   type="javaee:around-timeoutType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:group ref="javaee:jndiEnvironmentRefsGroup"/>
+      <xsd:element name="post-activate"
+                   type="javaee:lifecycle-callbackType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="pre-passivate"
+                   type="javaee:lifecycle-callbackType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="interceptor-bindingType">
+    <xsd:annotation>
+      <xsd:documentation>
+<![CDATA[[
+        The interceptor-bindingType element describes the binding of
+        interceptor classes to beans within the ejb-jar or .war.
+        It consists of :
+        
+        - An optional description.
+        - The name of an ejb within the module or the wildcard value "*",
+        which is used to define interceptors that are bound to all
+        beans in the ejb-jar or .war.
+        - A list of interceptor classes that are bound to the contents of
+        the ejb-name element or a specification of the total ordering
+        over the interceptors defined for the given level and above.
+        - An optional exclude-default-interceptors element.  If set to true,
+        specifies that default interceptors are not to be applied to 
+        a bean-class and/or business method.
+        - An optional exclude-class-interceptors element.  If set to true,
+        specifies that class interceptors are not to be applied to 
+        a business method.
+        - An optional set of method elements for describing the name/params
+        of a method-level interceptor.
+        
+        Interceptors bound to all classes using the wildcard syntax
+        "*" are default interceptors for the components in the ejb-jar or .war. 
+        In addition, interceptors may be bound at the level of the bean
+        class (class-level interceptors) or business methods (method-level
+        interceptors ).
+        
+        The binding of interceptors to classes is additive.  If interceptors
+        are bound at the class-level and/or default-level as well as the
+        method-level, both class-level and/or default-level as well as
+        method-level will apply. 
+        
+        There are four possible styles of the interceptor element syntax :
+        
+        1.
+        <interceptor-binding>
+        <ejb-name>*</ejb-name>
+        <interceptor-class>INTERCEPTOR</interceptor-class>
+        </interceptor-binding>
+        
+        Specifying the ejb-name as the wildcard value "*" designates
+        default interceptors (interceptors that apply to all session and
+        message-driven beans contained in the ejb-jar or .war).
+        
+        2. 
+        <interceptor-binding>
+        <ejb-name>EJBNAME</ejb-name>
+        <interceptor-class>INTERCEPTOR</interceptor-class>
+        </interceptor-binding>
+        
+        This style is used to refer to interceptors associated with the
+        specified enterprise bean(class-level interceptors).
+        
+        3. 
+        <interceptor-binding>
+        <ejb-name>EJBNAME</ejb-name>
+        <interceptor-class>INTERCEPTOR</interceptor-class>
+        <method>
+        <method-name>METHOD</method-name>
+        </method>
+        </interceptor-binding>
+        
+        This style is used to associate a method-level interceptor with 
+        the specified enterprise bean.  If there are multiple methods
+        with the same overloaded name, the element of this style refers
+        to all the methods with the overloaded name.  Method-level
+        interceptors can only be associated with business methods of the
+        bean class.   Note that the wildcard value "*" cannot be used
+        to specify method-level interceptors.
+        
+        4. 
+        <interceptor-binding>
+        <ejb-name>EJBNAME</ejb-name>
+        <interceptor-class>INTERCEPTOR</interceptor-class>
+        <method>
+        <method-name>METHOD</method-name>
+        <method-params>
+        <method-param>PARAM-1</method-param>
+        <method-param>PARAM-2</method-param>
+        ...
+        <method-param>PARAM-N</method-param>
+        </method-params>
+        </method>
+        </interceptor-binding>
+        
+        This style is used to associate a method-level interceptor with 
+        the specified method of the specified enterprise bean.  This 
+        style is used to refer to a single method within a set of methods
+        with an overloaded name.  The values PARAM-1 through PARAM-N
+        are the fully-qualified Java types of the method's input parameters
+        (if the method has no input arguments, the method-params element
+        contains no method-param elements). Arrays are specified by the
+        array element's type, followed by one or more pair of square 
+        brackets (e.g. int[][]).
+        
+]]>
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="description"
+                   type="javaee:descriptionType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="ejb-name"
+                   type="javaee:string"/>
+      <xsd:choice>
+        <xsd:element name="interceptor-class"
+                     type="javaee:fully-qualified-classType"
+                     minOccurs="0"
+                     maxOccurs="unbounded"/>
+        <xsd:element name="interceptor-order"
+                     type="javaee:interceptor-orderType"
+                     minOccurs="1"/>
+      </xsd:choice>
+      <xsd:element name="exclude-default-interceptors"
+                   type="javaee:true-falseType"
+                   minOccurs="0"/>
+      <xsd:element name="exclude-class-interceptors"
+                   type="javaee:true-falseType"
+                   minOccurs="0"/>
+      <xsd:element name="method"
+                   type="javaee:named-methodType"
+                   minOccurs="0"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="interceptor-orderType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The interceptor-orderType element describes a total ordering
+        of interceptor classes.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="interceptor-class"
+                   type="javaee:fully-qualified-classType"
+                   minOccurs="1"
+                   maxOccurs="unbounded"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="named-methodType">
+    <xsd:sequence>
+      <xsd:element name="method-name"
+                   type="javaee:string"/>
+      <xsd:element name="method-params"
+                   type="javaee:method-paramsType"
+                   minOccurs="0"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="init-methodType">
+    <xsd:sequence>
+      <xsd:element name="create-method"
+                   type="javaee:named-methodType"/>
+      <xsd:element name="bean-method"
+                   type="javaee:named-methodType"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="remove-methodType">
+    <xsd:sequence>
+      <xsd:element name="bean-method"
+                   type="javaee:named-methodType"/>
+      <xsd:element name="retain-if-exception"
+                   type="javaee:true-falseType"
+                   minOccurs="0"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="message-driven-beanType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The message-driven element declares a message-driven
+        bean. The declaration consists of:
+        
+        - an optional description
+        - an optional display name
+        - an optional icon element that contains a small and a large 
+        icon file name. 
+        - a name assigned to the enterprise bean in
+        the deployment descriptor
+        - an optional mapped-name element that can be used to provide
+        vendor-specific deployment information such as the physical
+        jndi-name of destination from which this message-driven bean
+        should consume.  This element is not required to be supported 
+        by all implementations.  Any use of this element is non-portable.
+        - the message-driven bean's implementation class
+        - an optional declaration of the bean's messaging 
+        type 
+        - an optional declaration of the bean's timeout method for
+        handling programmatically created timers
+        - an optional declaration of timers to be automatically created at
+        deployment time
+        - the optional message-driven bean's transaction management 
+        type. If it is not defined, it is defaulted to Container.
+        - an optional declaration of the bean's 
+        message-destination-type
+        - an optional declaration of the bean's 
+        message-destination-link
+        - an optional declaration of the message-driven bean's
+        activation configuration properties
+        - an optional list of the message-driven bean class and/or
+        superclass around-invoke methods.
+        - an optional list of the message-driven bean class and/or
+        superclass around-timeout methods.
+        - an optional declaration of the bean's environment
+        entries
+        - an optional declaration of the bean's EJB references
+        - an optional declaration of the bean's local EJB
+        references
+        - an optional declaration of the bean's web service
+        references
+        - an optional declaration of the security role 
+        references
+        - an optional declaration of the security
+        identity to be used for the execution of the bean's
+        methods
+        - an optional declaration of the bean's 
+        resource manager connection factory 
+        references
+        - an optional declaration of the bean's resource
+        environment references.
+        - an optional declaration of the bean's message 
+        destination references
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:group ref="javaee:descriptionGroup"/>
+      <xsd:element name="ejb-name"
+                   type="javaee:ejb-nameType"/>
+      <xsd:element name="mapped-name"
+                   type="javaee:xsdStringType"
+                   minOccurs="0"/>
+      <xsd:element name="ejb-class"
+                   type="javaee:ejb-classType"
+                   minOccurs="0">
+        <xsd:annotation>
+          <xsd:documentation>
+
+            The ejb-class element specifies the fully qualified name
+            of the bean class for this ejb.  It is required unless
+            there is a component-defining annotation for the same
+            ejb-name.
+            
+          </xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element name="messaging-type"
+                   type="javaee:fully-qualified-classType"
+                   minOccurs="0">
+        <xsd:annotation>
+          <xsd:documentation>
+
+            The messaging-type element specifies the message
+            listener interface of the message-driven bean. 
+            
+          </xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element name="timeout-method"
+                   type="javaee:named-methodType"
+                   minOccurs="0">
+        <xsd:annotation>
+          <xsd:documentation>
+
+            The timeout-method element specifies the method that
+            will receive callbacks for programmatically
+            created timers.
+            
+          </xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element name="timer"
+                   type="javaee:timerType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="transaction-type"
+                   type="javaee:transaction-typeType"
+                   minOccurs="0"/>
+      <xsd:element name="message-destination-type"
+                   type="javaee:message-destination-typeType"
+                   minOccurs="0"/>
+      <xsd:element name="message-destination-link"
+                   type="javaee:message-destination-linkType"
+                   minOccurs="0"/>
+      <xsd:element name="activation-config"
+                   type="javaee:activation-configType"
+                   minOccurs="0"/>
+      <xsd:element name="around-invoke"
+                   type="javaee:around-invokeType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="around-timeout"
+                   type="javaee:around-timeoutType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:group ref="javaee:jndiEnvironmentRefsGroup"/>
+      <xsd:element name="security-role-ref"
+                   type="javaee:security-role-refType"
+                   minOccurs="0"
+                   maxOccurs="unbounded">
+      </xsd:element>
+      <xsd:element name="security-identity"
+                   type="javaee:security-identityType"
+                   minOccurs="0"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="methodType">
+    <xsd:annotation>
+      <xsd:documentation>
+<![CDATA[[
+        The methodType is used to denote a method of an enterprise
+        bean's business, home, component, and/or web service endpoint
+        interface, or, in the case of a message-driven bean, the
+        bean's message listener method, or a set of such
+        methods. The ejb-name element must be the name of one of the
+        enterprise beans declared in the deployment descriptor; the
+        optional method-intf element allows to distinguish between a
+        method with the same signature that is multiply defined
+        across the business, home, component, and/or web service 
+        endpoint nterfaces; the method-name element specifies the 
+        method name; and the optional method-params elements identify 
+        a single method among multiple methods with an overloaded
+        method name.
+        
+        There are three possible styles of using methodType element
+        within a method element:
+        
+        1.
+        <method>
+        <ejb-name>EJBNAME</ejb-name>
+        <method-name>*</method-name>
+        </method>
+        
+        This style is used to refer to all the methods of the
+        specified enterprise bean's business, home, component, 
+        and/or web service endpoint interfaces.
+        
+        2.
+        <method>
+        <ejb-name>EJBNAME</ejb-name>
+        <method-name>METHOD</method-name>
+        </method>
+        
+        This style is used to refer to the specified method of
+        the specified enterprise bean. If there are multiple
+        methods with the same overloaded name, the element of
+        this style refers to all the methods with the overloaded
+        name.
+        
+        3.
+        <method>
+        <ejb-name>EJBNAME</ejb-name>
+        <method-name>METHOD</method-name>
+        <method-params>
+        	  <method-param>PARAM-1</method-param>
+        	  <method-param>PARAM-2</method-param>
+        	  ...
+        	  <method-param>PARAM-n</method-param>
+        </method-params>
+        </method>
+        
+        This style is used to refer to a single method within a
+        set of methods with an overloaded name. PARAM-1 through
+        PARAM-n are the fully-qualified Java types of the
+        method's input parameters (if the method has no input
+        arguments, the method-params element contains no
+        method-param elements). Arrays are specified by the
+        array element's type, followed by one or more pair of
+        square brackets (e.g. int[][]). If there are multiple
+        methods with the same overloaded name, this style refers
+        to all of the overloaded methods. 
+        
+        Examples:
+        
+        Style 1: The following method element refers to all the
+        methods of the EmployeeService bean's business, home, 
+        component, and/or web service endpoint interfaces:
+        
+        <method>
+        <ejb-name>EmployeeService</ejb-name>
+        <method-name>*</method-name>
+        </method>
+        
+        Style 2: The following method element refers to all the
+        create methods of the EmployeeService bean's home
+        interface(s).
+        
+        <method>
+        <ejb-name>EmployeeService</ejb-name>
+        <method-name>create</method-name>
+        </method>
+        
+        Style 3: The following method element refers to the
+        create(String firstName, String LastName) method of the
+        EmployeeService bean's home interface(s).
+        
+        <method>
+        <ejb-name>EmployeeService</ejb-name>
+        <method-name>create</method-name>
+        <method-params>
+        	  <method-param>java.lang.String</method-param>
+        	  <method-param>java.lang.String</method-param>
+        </method-params>
+        </method>
+        
+        The following example illustrates a Style 3 element with
+        more complex parameter types. The method 
+        foobar(char s, int i, int[] iar, mypackage.MyClass mycl, 
+        mypackage.MyClass[][] myclaar) would be specified as:
+        
+        <method>
+        <ejb-name>EmployeeService</ejb-name>
+        <method-name>foobar</method-name>
+        <method-params>
+        	  <method-param>char</method-param>
+        	  <method-param>int</method-param>
+        	  <method-param>int[]</method-param>
+        	  <method-param>mypackage.MyClass</method-param>
+        	  <method-param>mypackage.MyClass[][]</method-param>
+        </method-params>
+        </method>
+        
+        The optional method-intf element can be used when it becomes
+        necessary to differentiate between a method that is multiply
+        defined across the enterprise bean's business, home, component,
+        and/or web service endpoint interfaces with the same name and
+        signature. However, if the same method is a method of both the
+        local business interface, and the local component interface, 
+        the same attribute applies to the method for both interfaces.
+        Likewise, if the same method is a method of both the remote 
+        business interface and the remote component interface, the same
+        attribute applies to the method for both interfaces.
+        
+        For example, the method element
+        
+        <method>
+        <ejb-name>EmployeeService</ejb-name>
+        <method-intf>Remote</method-intf>
+        <method-name>create</method-name>
+        <method-params>
+        	  <method-param>java.lang.String</method-param>
+        	  <method-param>java.lang.String</method-param>
+        </method-params>
+        </method>
+        
+        can be used to differentiate the create(String, String)
+        method defined in the remote interface from the
+        create(String, String) method defined in the remote home
+        interface, which would be defined as
+        
+        <method>
+        <ejb-name>EmployeeService</ejb-name>
+        <method-intf>Home</method-intf>
+        <method-name>create</method-name>
+        <method-params>
+        	  <method-param>java.lang.String</method-param>
+        	  <method-param>java.lang.String</method-param>
+        </method-params>
+        </method>
+        
+        and the create method that is defined in the local home
+        interface which would be defined as
+        
+        <method>
+        <ejb-name>EmployeeService</ejb-name>
+        <method-intf>LocalHome</method-intf>
+        <method-name>create</method-name>
+        <method-params>
+        	  <method-param>java.lang.String</method-param>
+        	  <method-param>java.lang.String</method-param>
+        </method-params>
+        </method>
+        
+        The method-intf element can be used with all three Styles
+        of the method element usage. For example, the following
+        method element example could be used to refer to all the
+        methods of the EmployeeService bean's remote home interface
+        and the remote business interface.
+        
+        <method>
+        <ejb-name>EmployeeService</ejb-name>
+        <method-intf>Home</method-intf>
+        <method-name>*</method-name>
+        </method>
+        
+]]>
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="description"
+                   type="javaee:descriptionType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="ejb-name"
+                   type="javaee:ejb-nameType"/>
+      <xsd:element name="method-intf"
+                   type="javaee:method-intfType"
+                   minOccurs="0">
+      </xsd:element>
+      <xsd:element name="method-name"
+                   type="javaee:method-nameType"/>
+      <xsd:element name="method-params"
+                   type="javaee:method-paramsType"
+                   minOccurs="0"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="method-intfType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The method-intf element allows a method element to
+        differentiate between the methods with the same name and
+        signature that are multiply defined across the home and
+        component interfaces (e.g, in both an enterprise bean's
+        remote and local interfaces or in both an enterprise bean's
+        home and remote interfaces, etc.); the component and web
+        service endpoint interfaces, and so on. 
+        
+        Local applies to the local component interface, local business 
+        interfaces, and the no-interface view. 
+        
+        Remote applies to both remote component interface and the remote 
+        business interfaces.  
+        
+        ServiceEndpoint refers to methods exposed through a web service
+        endpoint.
+        
+        Timer refers to the bean's timeout callback methods.
+        
+        MessageEndpoint refers to the methods of a message-driven bean's
+        message-listener interface.
+        
+        The method-intf element must be one of the following:
+        
+        Home
+        Remote
+        LocalHome
+        Local
+        ServiceEndpoint
+        Timer
+        MessageEndpoint
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:simpleContent>
+      <xsd:restriction base="javaee:string">
+        <xsd:enumeration value="Home"/>
+        <xsd:enumeration value="Remote"/>
+        <xsd:enumeration value="LocalHome"/>
+        <xsd:enumeration value="Local"/>
+        <xsd:enumeration value="ServiceEndpoint"/>
+        <xsd:enumeration value="Timer"/>
+        <xsd:enumeration value="MessageEndpoint"/>
+      </xsd:restriction>
+    </xsd:simpleContent>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="method-nameType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The method-nameType contains a name of an enterprise
+        bean method or the asterisk (*) character. The asterisk is
+        used when the element denotes all the methods of an
+        enterprise bean's client view interfaces.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:simpleContent>
+      <xsd:restriction base="javaee:string"/>
+    </xsd:simpleContent>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="method-paramsType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The method-paramsType defines a list of the
+        fully-qualified Java type names of the method parameters.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="method-param"
+                   type="javaee:java-typeType"
+                   minOccurs="0"
+                   maxOccurs="unbounded">
+        <xsd:annotation>
+          <xsd:documentation>
+
+            The method-param element contains a primitive
+            or a fully-qualified Java type name of a method
+            parameter.
+            
+          </xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="method-permissionType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The method-permissionType specifies that one or more
+        security roles are allowed to invoke one or more enterprise
+        bean methods. The method-permissionType consists of an
+        optional description, a list of security role names or an
+        indicator to state that the method is unchecked for
+        authorization, and a list of method elements.
+        
+        The security roles used in the method-permissionType
+        must be defined in the security-role elements of the
+        deployment descriptor, and the methods must be methods
+        defined in the enterprise bean's business, home, component 
+        and/or web service endpoint interfaces.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="description"
+                   type="javaee:descriptionType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:choice>
+        <xsd:element name="role-name"
+                     type="javaee:role-nameType"
+                     maxOccurs="unbounded"/>
+        <xsd:element name="unchecked"
+                     type="javaee:emptyType">
+          <xsd:annotation>
+            <xsd:documentation>
+
+              The unchecked element specifies that a method is
+              not checked for authorization by the container
+              prior to invocation of the method.
+              
+            </xsd:documentation>
+          </xsd:annotation>
+        </xsd:element>
+      </xsd:choice>
+      <xsd:element name="method"
+                   type="javaee:methodType"
+                   maxOccurs="unbounded"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="multiplicityType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The multiplicityType describes the multiplicity of the
+        role that participates in a relation.
+        
+        The value must be one of the two following:
+        
+        One
+        Many
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:simpleContent>
+      <xsd:restriction base="javaee:string">
+        <xsd:enumeration value="One"/>
+        <xsd:enumeration value="Many"/>
+      </xsd:restriction>
+    </xsd:simpleContent>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="persistence-typeType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The persistence-typeType specifies an entity bean's persistence
+        management type.
+        
+        The persistence-type element must be one of the two following:
+        
+        Bean
+        Container
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:simpleContent>
+      <xsd:restriction base="javaee:string">
+        <xsd:enumeration value="Bean"/>
+        <xsd:enumeration value="Container"/>
+      </xsd:restriction>
+    </xsd:simpleContent>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="queryType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The queryType defines a finder or select
+        query. It contains
+        - an optional description of the query
+        - the specification of the finder or select
+        method it is used by
+        	- an optional specification of the result type 
+        	  mapping, if the query is for a select method 
+        	  and entity objects are returned.
+        	- the EJB QL query string that defines the query.
+        
+        Queries that are expressible in EJB QL must use the ejb-ql
+        element to specify the query. If a query is not expressible
+        in EJB QL, the description element should be used to
+        describe the semantics of the query and the ejb-ql element
+        should be empty.
+        
+        The result-type-mapping is an optional element. It can only
+        be present if the query-method specifies a select method
+        that returns entity objects.  The default value for the
+        result-type-mapping element is "Local".
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="description"
+                   type="javaee:descriptionType"
+                   minOccurs="0"/>
+      <xsd:element name="query-method"
+                   type="javaee:query-methodType"/>
+      <xsd:element name="result-type-mapping"
+                   type="javaee:result-type-mappingType"
+                   minOccurs="0"/>
+      <xsd:element name="ejb-ql"
+                   type="javaee:xsdStringType"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="query-methodType">
+    <xsd:annotation>
+      <xsd:documentation>
+<![CDATA[[
+        The query-method specifies the method for a finder or select
+        query.
+        
+        The method-name element specifies the name of a finder or select
+        method in the entity bean's implementation class.
+        
+        Each method-param must be defined for a query-method using the
+        method-params element.
+        
+        It is used by the query-method element. 
+        
+        Example:
+        
+        <query>
+        <description>Method finds large orders</description>
+        <query-method>
+        	  <method-name>findLargeOrders</method-name>
+        	  <method-params></method-params>
+        </query-method>
+        <ejb-ql>
+        	SELECT OBJECT(o) FROM Order o
+        	  WHERE o.amount &gt; 1000
+        </ejb-ql>
+        </query>
+        
+]]>
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="method-name"
+                   type="javaee:method-nameType"/>
+      <xsd:element name="method-params"
+                   type="javaee:method-paramsType"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="relationship-role-sourceType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The relationship-role-sourceType designates the source of a
+        role that participates in a relationship. A
+        relationship-role-sourceType is used by
+        relationship-role-source elements to uniquely identify an
+        entity bean.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="description"
+                   type="javaee:descriptionType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="ejb-name"
+                   type="javaee:ejb-nameType"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="relationshipsType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The relationshipsType describes the relationships in
+        which entity beans with container-managed persistence
+        participate. The relationshipsType contains an optional
+        description; and a list of ejb-relation elements, which
+        specify the container managed relationships.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="description"
+                   type="javaee:descriptionType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="ejb-relation"
+                   type="javaee:ejb-relationType"
+                   maxOccurs="unbounded">
+        <xsd:unique name="role-name-uniqueness">
+          <xsd:annotation>
+            <xsd:documentation>
+
+              The ejb-relationship-role-name contains the name of a
+              relationship role. The name must be unique within 
+              a relationship, but can be reused in different
+              relationships.
+              
+            </xsd:documentation>
+          </xsd:annotation>
+          <xsd:selector xpath=".//javaee:ejb-relationship-role-name"/>
+          <xsd:field xpath="."/>
+        </xsd:unique>
+      </xsd:element>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="result-type-mappingType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The result-type-mappingType is used in the query element to
+        specify whether an abstract schema type returned by a query
+        for a select method is to be mapped to an EJBLocalObject or
+        EJBObject type.
+        
+        The value must be one of the following:
+        
+        Local
+        Remote
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:simpleContent>
+      <xsd:restriction base="javaee:string">
+        <xsd:enumeration value="Local"/>
+        <xsd:enumeration value="Remote"/>
+      </xsd:restriction>
+    </xsd:simpleContent>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="security-identityType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The security-identityType specifies whether the caller's
+        security identity is to be used for the execution of the
+        methods of the enterprise bean or whether a specific run-as
+        identity is to be used. It contains an optional description
+        and a specification of the security identity to be used.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="description"
+                   type="javaee:descriptionType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:choice>
+        <xsd:element name="use-caller-identity"
+                     type="javaee:emptyType">
+          <xsd:annotation>
+            <xsd:documentation>
+
+              The use-caller-identity element specifies that
+              the caller's security identity be used as the
+              security identity for the execution of the
+              enterprise bean's methods.
+              
+            </xsd:documentation>
+          </xsd:annotation>
+        </xsd:element>
+        <xsd:element name="run-as"
+                     type="javaee:run-asType"/>
+      </xsd:choice>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="session-beanType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The session-beanType declares an session bean. The
+        declaration consists of:
+        
+        - an optional description
+        - an optional display name
+        - an optional icon element that contains a small and a large 
+        icon file name
+        - a name assigned to the enterprise bean
+        in the deployment description
+        - an optional mapped-name element that can be used to provide
+        vendor-specific deployment information such as the physical
+        jndi-name of the session bean's remote home/business interface. 
+        This element is not required to be supported by all 
+        implementations. Any use of this element is non-portable.
+        - the names of all the remote or local business interfaces, 
+        if any
+        - the names of the session bean's remote home and
+        remote interfaces, if any
+        - the names of the session bean's local home and
+        local interfaces, if any
+        - an optional declaration that this bean exposes a
+        no-interface view
+        - the name of the session bean's web service endpoint
+        interface, if any
+        - the session bean's implementation class
+        - the session bean's state management type
+        - an optional declaration of a stateful session bean's timeout value
+        - an optional declaration of the session bean's timeout method for
+        handling programmatically created timers
+        - an optional declaration of timers to be automatically created at
+        deployment time
+        - an optional declaration that a Singleton bean has eager
+        initialization
+        - an optional declaration of a Singleton/Stateful bean's concurrency 
+        management type
+        - an optional declaration of the method locking metadata
+        for a Singleton with container managed concurrency
+        - an optional declaration of the other Singleton beans in the
+        application that must be initialized before this bean
+        - an optional declaration of the session bean's asynchronous 
+        methods
+        - the optional session bean's transaction management type. 
+        If it is not present, it is defaulted to Container.
+        - an optional declaration of a stateful session bean's 
+        afterBegin, beforeCompletion, and/or afterCompletion methods
+        - an optional list of the session bean class and/or
+        superclass around-invoke methods.
+        - an optional list of the session bean class and/or
+        superclass around-timeout methods.
+        - an optional declaration of the bean's 
+        environment entries
+        - an optional declaration of the bean's EJB references
+        - an optional declaration of the bean's local 
+        EJB references
+        - an optional declaration of the bean's web 
+        service references
+        - an optional declaration of the security role 
+        references
+        - an optional declaration of the security identity 
+        to be used for the execution of the bean's methods
+        - an optional declaration of the bean's resource 
+        manager connection factory references
+        - an optional declaration of the bean's resource 
+        environment references.
+        - an optional declaration of the bean's message 
+        destination references
+        
+        The elements that are optional are "optional" in the sense
+        that they are omitted when if lists represented by them are
+        empty.
+        
+        The service-endpoint element may only be specified if the
+        bean is a stateless session bean.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:group ref="javaee:descriptionGroup"/>
+      <xsd:element name="ejb-name"
+                   type="javaee:ejb-nameType"/>
+      <xsd:element name="mapped-name"
+                   type="javaee:xsdStringType"
+                   minOccurs="0"/>
+      <xsd:element name="home"
+                   type="javaee:homeType"
+                   minOccurs="0"/>
+      <xsd:element name="remote"
+                   type="javaee:remoteType"
+                   minOccurs="0"/>
+      <xsd:element name="local-home"
+                   type="javaee:local-homeType"
+                   minOccurs="0"/>
+      <xsd:element name="local"
+                   type="javaee:localType"
+                   minOccurs="0"/>
+      <xsd:element name="business-local"
+                   type="javaee:fully-qualified-classType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="business-remote"
+                   type="javaee:fully-qualified-classType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="local-bean"
+                   type="javaee:emptyType"
+                   minOccurs="0">
+        <xsd:annotation>
+          <xsd:documentation>
+
+            The local-bean element declares that this
+            session bean exposes a no-interface Local client view.
+            
+          </xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element name="service-endpoint"
+                   type="javaee:fully-qualified-classType"
+                   minOccurs="0">
+        <xsd:annotation>
+          <xsd:documentation>
+
+            The service-endpoint element contains the
+            fully-qualified name of the enterprise bean's web
+            service endpoint interface. The service-endpoint
+            element may only be specified for a stateless
+            session bean. The specified interface must be a
+            valid JAX-RPC service endpoint interface.
+            
+          </xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element name="ejb-class"
+                   type="javaee:ejb-classType"
+                   minOccurs="0">
+        <xsd:annotation>
+          <xsd:documentation>
+
+            The ejb-class element specifies the fully qualified name
+            of the bean class for this ejb.  It is required unless
+            there is a component-defining annotation for the same
+            ejb-name.
+            
+          </xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element name="session-type"
+                   type="javaee:session-typeType"
+                   minOccurs="0"/>
+      <xsd:element name="stateful-timeout"
+                   type="javaee:stateful-timeoutType"
+                   minOccurs="0"/>
+      <xsd:element name="timeout-method"
+                   type="javaee:named-methodType"
+                   minOccurs="0">
+        <xsd:annotation>
+          <xsd:documentation>
+
+            The timeout-method element specifies the method that
+            will receive callbacks for programmatically
+            created timers.
+            
+          </xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element name="timer"
+                   type="javaee:timerType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="init-on-startup"
+                   type="javaee:true-falseType"
+                   minOccurs="0">
+        <xsd:annotation>
+          <xsd:documentation>
+
+            The init-on-startup element specifies that a Singleton
+            bean has eager initialization.
+            This element can only be specified for singleton session
+            beans.
+            
+          </xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element name="concurrency-management-type"
+                   type="javaee:concurrency-management-typeType"
+                   minOccurs="0"/>
+      <xsd:element name="concurrent-method"
+                   type="javaee:concurrent-methodType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="depends-on"
+                   type="javaee:depends-onType"
+                   minOccurs="0"/>
+      <xsd:element name="init-method"
+                   type="javaee:init-methodType"
+                   minOccurs="0"
+                   maxOccurs="unbounded">
+        <xsd:annotation>
+          <xsd:documentation>
+
+            The init-method element specifies the mappings for
+            EJB 2.x style create methods for an EJB 3.x bean.
+            This element can only be specified for stateful 
+            session beans. 
+            
+          </xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element name="remove-method"
+                   type="javaee:remove-methodType"
+                   minOccurs="0"
+                   maxOccurs="unbounded">
+        <xsd:annotation>
+          <xsd:documentation>
+
+            The remove-method element specifies the mappings for
+            EJB 2.x style remove methods for an EJB 3.x bean.
+            This element can only be specified for stateful 
+            session beans. 
+            
+          </xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element name="async-method"
+                   type="javaee:async-methodType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="transaction-type"
+                   type="javaee:transaction-typeType"
+                   minOccurs="0"/>
+      <xsd:element name="after-begin-method"
+                   type="javaee:named-methodType"
+                   minOccurs="0"/>
+      <xsd:element name="before-completion-method"
+                   type="javaee:named-methodType"
+                   minOccurs="0"/>
+      <xsd:element name="after-completion-method"
+                   type="javaee:named-methodType"
+                   minOccurs="0"/>
+      <xsd:element name="around-invoke"
+                   type="javaee:around-invokeType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="around-timeout"
+                   type="javaee:around-timeoutType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:group ref="javaee:jndiEnvironmentRefsGroup"/>
+      <xsd:element name="post-activate"
+                   type="javaee:lifecycle-callbackType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="pre-passivate"
+                   type="javaee:lifecycle-callbackType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="security-role-ref"
+                   type="javaee:security-role-refType"
+                   minOccurs="0"
+                   maxOccurs="unbounded">
+      </xsd:element>
+      <xsd:element name="security-identity"
+                   type="javaee:security-identityType"
+                   minOccurs="0">
+      </xsd:element>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="session-typeType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The session-typeType describes whether the session bean is a
+        singleton, stateful or stateless session. It is used by
+        session-type elements.
+        
+        The value must be one of the three following:
+        
+        Singleton
+        Stateful
+        Stateless
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:simpleContent>
+      <xsd:restriction base="javaee:string">
+        <xsd:enumeration value="Singleton"/>
+        <xsd:enumeration value="Stateful"/>
+        <xsd:enumeration value="Stateless"/>
+      </xsd:restriction>
+    </xsd:simpleContent>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="stateful-timeoutType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The stateful-timeoutType represents the amount of time
+        a stateful session bean can be idle(not receive any client
+        invocations) before it is eligible for removal by the container.
+        
+        A timeout value of 0 means the bean is immediately eligible for removal.
+        
+        A timeout value of -1 means the bean will never be removed due to timeout.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="timeout"
+                   type="javaee:xsdIntegerType"/>
+      <xsd:element name="unit"
+                   type="javaee:time-unit-typeType"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="time-unit-typeType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The time-unit-typeType represents a time duration at a given
+        unit of granularity.  
+        
+        The time unit type must be one of the following :
+        
+        Days
+        Hours
+        Minutes
+        Seconds
+        Milliseconds
+        Microseconds
+        Nanoseconds
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:simpleContent>
+      <xsd:restriction base="javaee:string">
+        <xsd:enumeration value="Days"/>
+        <xsd:enumeration value="Hours"/>
+        <xsd:enumeration value="Minutes"/>
+        <xsd:enumeration value="Seconds"/>
+        <xsd:enumeration value="Milliseconds"/>
+        <xsd:enumeration value="Microseconds"/>
+        <xsd:enumeration value="Nanoseconds"/>
+      </xsd:restriction>
+    </xsd:simpleContent>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="timer-scheduleType">
+    <xsd:sequence>
+      <xsd:element name="second"
+                   type="javaee:string"
+                   minOccurs="0"/>
+      <xsd:element name="minute"
+                   type="javaee:string"
+                   minOccurs="0"/>
+      <xsd:element name="hour"
+                   type="javaee:string"
+                   minOccurs="0"/>
+      <xsd:element name="day-of-month"
+                   type="javaee:string"
+                   minOccurs="0"/>
+      <xsd:element name="month"
+                   type="javaee:string"
+                   minOccurs="0"/>
+      <xsd:element name="day-of-week"
+                   type="javaee:string"
+                   minOccurs="0"/>
+      <xsd:element name="year"
+                   type="javaee:string"
+                   minOccurs="0"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="timerType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The timerType specifies an enterprise bean timer.  Each
+        timer is automatically created by the container upon
+        deployment.  Timer callbacks occur based on the 
+        schedule attributes.  All callbacks are made to the
+        timeout-method associated with the timer.  
+        
+        A timer can have an optional start and/or end date. If
+        a start date is specified, it takes precedence over the
+        associated timer schedule such that any matching
+        expirations prior to the start time will not occur.
+        Likewise, no matching expirations will occur after any
+        end date.   Start/End dates are specified using the
+        XML Schema dateTime type, which follows the ISO-8601
+        standard for date(and optional time-within-the-day) 
+        representation.
+        
+        An optional flag can be used to control whether
+        this timer has persistent(true) delivery semantics or
+        non-persistent(false) delivery semantics.  If not specified,
+        the value defaults to persistent(true).
+        
+        A time zone can optionally be associated with a timer.
+        If specified, the timer's schedule is evaluated in the context
+        of that time zone, regardless of the default time zone in which
+        the container is executing.   Time zones are specified as an
+        ID string.  The set of required time zone IDs is defined by
+        the Zone Name(TZ) column of the public domain zoneinfo database.
+        
+        An optional info string can be assigned to the timer and 
+        retrieved at runtime through the Timer.getInfo() method.
+        
+        The timerType can only be specified on stateless session
+        beans, singleton session beans, and message-driven beans.
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="description"
+                   type="javaee:descriptionType"
+                   minOccurs="0"
+                   maxOccurs="unbounded"/>
+      <xsd:element name="schedule"
+                   type="javaee:timer-scheduleType"/>
+      <xsd:element name="start"
+                   type="xsd:dateTime"
+                   minOccurs="0"/>
+      <xsd:element name="end"
+                   type="xsd:dateTime"
+                   minOccurs="0"/>
+      <xsd:element name="timeout-method"
+                   type="javaee:named-methodType"/>
+      <xsd:element name="persistent"
+                   type="javaee:true-falseType"
+                   minOccurs="0"/>
+      <xsd:element name="timezone"
+                   type="javaee:string"
+                   minOccurs="0"/>
+      <xsd:element name="info"
+                   type="javaee:string"
+                   minOccurs="0"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"
+                   type="xsd:ID"/>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="trans-attributeType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The trans-attributeType specifies how the container must
+        manage the transaction boundaries when delegating a method 
+        invocation to an enterprise bean's business method. 
+        
+        The value must be one of the following: 
+        
+        NotSupported 
+        Supports 
+        Required  
+        RequiresNew 
+        Mandatory 
+        Never 
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:simpleContent>
+      <xsd:restriction base="javaee:string">
+        <xsd:enumeration value="NotSupported"/>
+        <xsd:enumeration value="Supports"/>
+        <xsd:enumeration value="Required"/>
+        <xsd:enumeration value="RequiresNew"/>
+        <xsd:enumeration value="Mandatory"/>
+        <xsd:enumeration value="Never"/>
+      </xsd:restriction>
+    </xsd:simpleContent>
+  </xsd:complexType>
+
+
+<!-- **************************************************** -->
+
+  <xsd:complexType name="transaction-typeType">
+    <xsd:annotation>
+      <xsd:documentation>
+
+        The transaction-typeType specifies an enterprise bean's
+        transaction management type.
+        
+        The transaction-type must be one of the two following:
+        
+        Bean
+        Container
+        
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:simpleContent>
+      <xsd:restriction base="javaee:string">
+        <xsd:enumeration value="Bean"/>
+        <xsd:enumeration value="Container"/>
+      </xsd:restriction>
+    </xsd:simpleContent>
+  </xsd:complexType>
+
+</xsd:schema>

Added: projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/async/AsyncMethodBean.java
===================================================================
--- projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/async/AsyncMethodBean.java	                        (rev 0)
+++ projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/async/AsyncMethodBean.java	2009-11-27 09:56:58 UTC (rev 97075)
@@ -0,0 +1,39 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file 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.ejb.test.async;
+
+import javax.ejb.Asynchronous;
+import javax.ejb.Stateless;
+
+/**
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+ at Stateless
+public class AsyncMethodBean
+{
+   @Asynchronous
+   public void test2(String s)
+   {
+      
+   }
+}

Added: projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/async/unit/AsyncMethodTestCase.java
===================================================================
--- projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/async/unit/AsyncMethodTestCase.java	                        (rev 0)
+++ projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/async/unit/AsyncMethodTestCase.java	2009-11-27 09:56:58 UTC (rev 97075)
@@ -0,0 +1,130 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file 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.ejb.test.async.unit;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.lang.reflect.AnnotatedElement;
+import java.net.URL;
+import java.util.Collection;
+
+import org.jboss.metadata.annotation.creator.ejb.jboss.JBoss50Creator;
+import org.jboss.metadata.annotation.finder.AnnotationFinder;
+import org.jboss.metadata.annotation.finder.DefaultAnnotationFinder;
+import org.jboss.metadata.ejb.jboss.JBoss50MetaData;
+import org.jboss.metadata.ejb.jboss.JBossSessionBean31MetaData;
+import org.jboss.metadata.ejb.spec.AsyncMethodMetaData;
+import org.jboss.metadata.ejb.spec.EjbJar30MetaData;
+import org.jboss.metadata.ejb.spec.EjbJarMetaData;
+import org.jboss.metadata.ejb.spec.SessionBean31MetaData;
+import org.jboss.test.metadata.common.PackageScanner;
+import org.jboss.test.metadata.common.ScanPackage;
+import org.jboss.xb.binding.JBossXBException;
+import org.jboss.xb.binding.Unmarshaller;
+import org.jboss.xb.binding.UnmarshallerFactory;
+import org.jboss.xb.binding.resolver.MultiClassSchemaResolver;
+import org.jboss.xb.binding.resolver.MutableSchemaResolver;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class AsyncMethodTestCase
+{
+   private static MutableSchemaResolver schemaBindingResolver;
+   private static UnmarshallerFactory unmarshallerFactory = UnmarshallerFactory.newInstance();
+   
+   @BeforeClass
+   public static void beforeClass()
+   {
+      schemaBindingResolver = new MultiClassSchemaResolver();
+      schemaBindingResolver.mapLocationToClass("ejb-jar_3_1.xsd", EjbJar30MetaData.class);
+   }
+   
+   @Test
+   @ScanPackage("org.jboss.metadata.ejb.test.async")
+   public void testMerge() throws Exception
+   {
+      EjbJarMetaData jarMetaData = unmarshal(EjbJarMetaData.class, "/org/jboss/metadata/ejb/test/async/ejb-jar.xml");
+      AnnotationFinder<AnnotatedElement> finder = new DefaultAnnotationFinder<AnnotatedElement>();
+      JBoss50Creator creator = new JBoss50Creator(finder);
+      Collection<Class<?>> classes = PackageScanner.loadClasses();
+      JBoss50MetaData annotatedMetaData = creator.create(classes);
+      
+      JBoss50MetaData mergedMetaData = new JBoss50MetaData();
+      // note that we use the annotation as overrides :-)
+      mergedMetaData.merge(annotatedMetaData, jarMetaData);
+      
+      JBossSessionBean31MetaData bean = (JBossSessionBean31MetaData) mergedMetaData.getEnterpriseBean("AsyncMethodBean");
+      assertNotNull(bean);
+      assertNotNull("asyncMethods not merged", bean.getAsyncMethods());
+      assertEquals(2, bean.getAsyncMethods().size());
+      AsyncMethodMetaData asyncMethod = bean.getAsyncMethods().get(0);
+      // annotated comes first in this test case, see above
+      assertEquals("test2", asyncMethod.getMethodName());
+      assertEquals("java.lang.String", asyncMethod.getMethodParams().get(0));
+      asyncMethod = bean.getAsyncMethods().get(1);
+      assertEquals("test", asyncMethod.getMethodName());
+      assertEquals("int", asyncMethod.getMethodParams().get(0));
+   }
+   
+   @Test
+   public void testParse() throws Exception
+   {
+      EjbJarMetaData jarMetaData = unmarshal(EjbJarMetaData.class, "/org/jboss/metadata/ejb/test/async/ejb-jar.xml");
+      assertNotNull(jarMetaData);
+      SessionBean31MetaData bean = (SessionBean31MetaData) jarMetaData.getEnterpriseBean("AsyncMethodBean");
+      assertNotNull(bean);
+      AsyncMethodMetaData asyncMethod = bean.getAsyncMethods().get(0);
+      assertEquals("test", asyncMethod.getMethodName());
+      assertEquals("int", asyncMethod.getMethodParams().get(0));
+   }
+   
+   @Test
+   @ScanPackage("org.jboss.metadata.ejb.test.async")
+   public void testScan() throws Exception
+   {
+      AnnotationFinder<AnnotatedElement> finder = new DefaultAnnotationFinder<AnnotatedElement>();
+      JBoss50Creator creator = new JBoss50Creator(finder);
+      Collection<Class<?>> classes = PackageScanner.loadClasses();
+      JBoss50MetaData metaData = creator.create(classes);
+      assertNotNull(metaData);
+      JBossSessionBean31MetaData bean = (JBossSessionBean31MetaData) metaData.getEnterpriseBean("AsyncMethodBean");
+      assertNotNull(bean);
+      AsyncMethodMetaData asyncMethod = bean.getAsyncMethods().get(0);
+      assertEquals("test2", asyncMethod.getMethodName());
+      assertEquals("java.lang.String", asyncMethod.getMethodParams().get(0));
+   }
+
+   private static <T> T unmarshal(Class<T> type, String resource) throws JBossXBException
+   {
+      Unmarshaller unmarshaller = unmarshallerFactory.newUnmarshaller();
+      unmarshaller.setValidation(false);
+      URL url = type.getResource(resource);
+      if(url == null)
+         throw new IllegalArgumentException("Failed to find resource " + resource);
+      return type.cast(unmarshaller.unmarshal(url.toString(), schemaBindingResolver));
+   }
+}

Modified: projects/metadata/ejb/trunk/src/test/java/org/jboss/test/metadata/ejb/JBoss50UnitTestCase.java
===================================================================
--- projects/metadata/ejb/trunk/src/test/java/org/jboss/test/metadata/ejb/JBoss50UnitTestCase.java	2009-11-27 07:49:24 UTC (rev 97074)
+++ projects/metadata/ejb/trunk/src/test/java/org/jboss/test/metadata/ejb/JBoss50UnitTestCase.java	2009-11-27 09:56:58 UTC (rev 97075)
@@ -67,6 +67,7 @@
 import org.jboss.metadata.ejb.spec.EnterpriseBeansMetaData;
 import org.jboss.metadata.ejb.spec.MessageDrivenBeanMetaData;
 import org.jboss.metadata.ejb.spec.SecurityIdentityMetaData;
+import org.jboss.metadata.ejb.spec.SessionBean31MetaData;
 import org.jboss.metadata.ejb.spec.SessionBeanMetaData;
 import org.jboss.metadata.ejb.spec.SubscriptionDurability;
 import org.jboss.metadata.javaee.spec.EJBLocalReferenceMetaData;
@@ -266,7 +267,7 @@
       // normally from the annotation scanner
       EjbJar30MetaData ejbJar = new EjbJar30MetaData();
       ejbJar.setEnterpriseBeans(new EnterpriseBeansMetaData());
-      SessionBeanMetaData sessionBean = new SessionBeanMetaData();
+      SessionBeanMetaData sessionBean = new SessionBean31MetaData();
       sessionBean.setEjbName("MyStatelessBean");
       ejbJar.getEnterpriseBeans().add(sessionBean);
       

Added: projects/metadata/ejb/trunk/src/test/resources/org/jboss/metadata/ejb/test/async/ejb-jar.xml
===================================================================
--- projects/metadata/ejb/trunk/src/test/resources/org/jboss/metadata/ejb/test/async/ejb-jar.xml	                        (rev 0)
+++ projects/metadata/ejb/trunk/src/test/resources/org/jboss/metadata/ejb/test/async/ejb-jar.xml	2009-11-27 09:56:58 UTC (rev 97075)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
+   version="3.1">
+   <enterprise-beans>
+      <session>
+         <ejb-name>AsyncMethodBean</ejb-name>
+         <async-method>
+            <method-name>test</method-name>
+            <method-params>
+               <method-param>int</method-param>
+            </method-params>
+         </async-method>
+      </session>
+   </enterprise-beans>
+</ejb-jar>
\ No newline at end of file




More information about the jboss-cvs-commits mailing list