[jboss-cvs] JBossAS SVN: r104262 - in projects/metadata/ejb/trunk/src: test/java/org/jboss/metadata/ejb/test/dependson/unit and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Apr 27 06:15:49 EDT 2010


Author: jaikiran
Date: 2010-04-27 06:15:47 -0400 (Tue, 27 Apr 2010)
New Revision: 104262

Added:
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/DependsOnMetaData.java
   projects/metadata/ejb/trunk/src/test/resources/org/jboss/metadata/ejb/test/dependson/
   projects/metadata/ejb/trunk/src/test/resources/org/jboss/metadata/ejb/test/dependson/ejb-jar.xml
Modified:
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/SessionBean31MetaData.java
   projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/dependson/unit/DependsOnTestCase.java
Log:
JBMETA-278 Added support for processing the depends-on xml element in ejb-jar.xml

Added: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/DependsOnMetaData.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/DependsOnMetaData.java	                        (rev 0)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/DependsOnMetaData.java	2010-04-27 10:15:47 UTC (rev 104262)
@@ -0,0 +1,111 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.metadata.ejb.spec;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+/**
+ * Represents the metadata for the <depends-on> element in ejb-jar.xml
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+ at XmlType(name = "depends-onType", propOrder =
+{"ejbNames"})
+public class DependsOnMetaData implements Serializable
+{
+
+   /**
+    * 
+    */
+   private static final long serialVersionUID = 1L;
+   
+   /**
+    * Dependency ejb names
+    */
+   private List<String> ejbNames;
+
+   /**
+    * Default constructor
+    */
+   public DependsOnMetaData()
+   {
+
+   }
+
+   /**
+    * Creates a {@link DependsOnMetaData} with the passed ejbNames as the dependencies
+    * 
+    * @param ejbNames The dependency ejb-names. Each dependent bean is expressed using ejb-link syntax.
+    * @throws IllegalArgumentException If the passed ejbNames is null
+    */
+   public DependsOnMetaData(String[] ejbNames)
+   {
+      if (ejbNames == null)
+      {
+         throw new IllegalArgumentException("ejb-names cannot be null while creating " + this.getClass().getName());
+      }
+      // set the ejb-names
+      this.setEjbNames(Arrays.asList(ejbNames));
+   }
+
+   /**
+    * Creates a {@link DependsOnMetaData} with the passed ejbNames as the dependencies
+    * 
+    * @param ejbNames The dependency ejb-names. Each dependent bean is expressed using ejb-link syntax.
+    * @throws IllegalArgumentException If the passed ejbNames is null
+    */
+   public DependsOnMetaData(List<String> ejbNames)
+   {
+      if (ejbNames == null)
+      {
+         throw new IllegalArgumentException("ejb-names cannot be null while creating " + this.getClass().getName());
+      }
+      // set the ejb-names
+      this.setEjbNames(ejbNames);
+   }
+
+   /**
+    * Sets the names of one or more dependency beans. Each dependent bean is expressed using ejb-link syntax.
+    * 
+    * @param ejbNames The dependency bean names
+    */
+   @XmlElement(name = "ejb-name")
+   public void setEjbNames(List<String> ejbNames)
+   {
+      this.ejbNames = ejbNames;
+   }
+
+   /**
+    * Returns the dependency bean names
+    * @return
+    */
+   public List<String> getEjbNames()
+   {
+      return this.ejbNames;
+   }
+}

Modified: 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	2010-04-27 08:31:05 UTC (rev 104261)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/SessionBean31MetaData.java	2010-04-27 10:15:47 UTC (rev 104262)
@@ -23,6 +23,7 @@
 
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import javax.ejb.ConcurrencyManagementType;
@@ -41,7 +42,7 @@
 @XmlType(name = "session-beanType", propOrder =
 {"descriptionGroup", "ejbName", "mappedName", "home", "remote", "localHome", "local", "businessLocals",
       "businessRemotes", "localBean", "serviceEndpoint", "ejbClass", "sessionType", "timeoutMethod", "initOnStartup",
-      "concurrencyManagementType", "concurrentMethods", "initMethods", "removeMethods", "asyncMethods", "transactionType",
+      "concurrencyManagementType", "concurrentMethods", "dependsOnMetaData", "initMethods", "removeMethods", "asyncMethods", "transactionType",
       "aroundInvokes", "environmentRefsGroup", "postActivates", "prePassivates", "securityRoleRefs", "securityIdentity"})
 //@JBossXmlType(modelGroup = JBossXmlConstants.MODEL_GROUP_UNORDERED_SEQUENCE)
 public class SessionBean31MetaData extends SessionBeanMetaData implements ITimeoutTarget // FIXME: AbstractProcessor.processClass doesn't take super interfaces into account
@@ -83,7 +84,8 @@
    /**
     * DependsOn for a singleton bean
     */
-   private String[] dependsOn;
+   private DependsOnMetaData dependsOn;
+   
 
 
    /**
@@ -268,7 +270,12 @@
     */
    public String[] getDependsOn()
    {
-      return this.dependsOn;
+      if (this.dependsOn == null || this.dependsOn.getEjbNames() == null)
+      {
+         return null;
+      }
+      List<String> ejbNames = this.dependsOn.getEjbNames();
+      return ejbNames.toArray(new String[ejbNames.size()]);
    }
    
    /**
@@ -276,11 +283,25 @@
     * the referring bean. Each dependent bean is expressed using ejb-link syntax.
     * 
     * @param dependsOn The singleton bean dependencies 
+    * 
     */
    public void setDependsOn(String[] dependsOn)
    {
-      this.dependsOn = dependsOn;
+      this.dependsOn = new DependsOnMetaData(dependsOn);
    }
+
+   /**
+    * Sets the names of one or more singleton beans, each of which must be initialized before
+    * the referring bean. Each dependent bean is expressed using ejb-link syntax.
+    * 
+    * @param dependsOn The singleton bean dependencies 
+    */
+   @XmlElement(name = "depends-on", required = false)
+   public void setDependsOnMetaData(DependsOnMetaData dependsOnMetaData)
+   {
+      this.dependsOn = dependsOnMetaData;
+   }
+
    
    /**
     * Sets the names of one or more singleton beans, each of which must be initialized before

Modified: projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/dependson/unit/DependsOnTestCase.java
===================================================================
--- projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/dependson/unit/DependsOnTestCase.java	2010-04-27 08:31:05 UTC (rev 104261)
+++ projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/dependson/unit/DependsOnTestCase.java	2010-04-27 10:15:47 UTC (rev 104262)
@@ -24,13 +24,15 @@
 import static org.junit.Assert.assertNotNull;
 
 import java.lang.reflect.AnnotatedElement;
+import java.net.URL;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 
+import javax.ejb.DependsOn;
+
 import junit.framework.Assert;
 
-import org.jboss.logging.Logger;
 import org.jboss.metadata.annotation.creator.ejb.jboss.JBoss50Creator;
 import org.jboss.metadata.annotation.finder.AnnotationFinder;
 import org.jboss.metadata.annotation.finder.DefaultAnnotationFinder;
@@ -38,11 +40,16 @@
 import org.jboss.metadata.ejb.jboss.JBossMetaData;
 import org.jboss.metadata.ejb.jboss.JBossSessionBean31MetaData;
 import org.jboss.metadata.ejb.spec.EjbJar31MetaData;
+import org.jboss.metadata.ejb.spec.EjbJarMetaData;
+import org.jboss.metadata.ejb.spec.EnterpriseBeanMetaData;
+import org.jboss.metadata.ejb.spec.SessionBean31MetaData;
 import org.jboss.metadata.ejb.test.dependson.IndependentSingleton;
 import org.jboss.metadata.ejb.test.dependson.SingletonWithMultipleDependencies;
 import org.jboss.metadata.ejb.test.dependson.SingletonWithOneDependency;
 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;
@@ -51,7 +58,8 @@
 
 
 /**
- * DependsOnTestCase
+ * Testcase for testing the processing of {@link DependsOn} annotation 
+ * and its xml equivalent
  *
  * @author Jaikiran Pai
  * @version $Revision: $
@@ -59,8 +67,6 @@
 public class DependsOnTestCase
 {
 
-   private static Logger logger = Logger.getLogger(DependsOnTestCase.class);
-
    private static MutableSchemaResolver schemaBindingResolver;
 
    private static UnmarshallerFactory unmarshallerFactory = UnmarshallerFactory.newInstance();
@@ -72,6 +78,12 @@
       schemaBindingResolver.mapLocationToClass("ejb-jar_3_1.xsd", EjbJar31MetaData.class);
    }
    
+   /**
+    * Test that the {@link DependsOn} annotation is correctly processed and converted 
+    * to metadata
+    * 
+    * @throws Exception
+    */
    @Test
    @ScanPackage("org.jboss.metadata.ejb.test.dependson")
    public void testDependsOnAnnotationProcessing() throws Exception
@@ -123,6 +135,53 @@
       Assert.assertTrue("Unexpected dependency found on bean " + multipleDependenciesBeanName, deps.contains("B"));
       Assert.assertTrue("Unexpected dependency found on bean " + multipleDependenciesBeanName, deps.contains("somejar.jar#C"));
       
+   }
+   
+   /**
+    * Tests that the processing of depends-on xml element in ejb-jar.xml, for metadata, is done correctly.
+    * 
+    * @throws Exception
+    */
+   @Test
+   public void testDependsOnXmlProcessing() throws Exception
+   {
+      EjbJarMetaData jarMetaData = unmarshal(EjbJarMetaData.class, "/org/jboss/metadata/ejb/test/dependson/ejb-jar.xml");
+      assertNotNull(jarMetaData);
+      // test that the depends-on metadata was created correctly
+      String beanName = "SimpleSingletonBean";
+      EnterpriseBeanMetaData enterpriseBean = jarMetaData.getEnterpriseBean(beanName);
       
+      assertNotNull("Metadata for bean named " + beanName + " was not found", enterpriseBean);
+      SessionBean31MetaData sessionBean = (SessionBean31MetaData) enterpriseBean;
+      Assert.assertTrue(beanName + " is not a singleton bean", sessionBean.isSingleton());
+      
+      String[] dependsOn = sessionBean.getDependsOn();
+      
+      Assert.assertNotNull("No dependency  found on bean " + beanName, dependsOn);
+      Assert.assertEquals("Unexpected number of dependencies found on bean " + beanName, 2, dependsOn.length );
+      
+      List<String> deps = Arrays.asList(dependsOn);
+      Assert.assertTrue("Unexpected dependency found on bean " + beanName, deps.contains("A"));
+      Assert.assertTrue("Unexpected dependency found on bean " + beanName, deps.contains("abc.jar#xyz"));
+      
    }
+   
+   /**
+    * Utility method
+    * @param <T>
+    * @param type
+    * @param resource
+    * @return
+    * @throws JBossXBException
+    */
+   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));
+   }
+
 }

Added: projects/metadata/ejb/trunk/src/test/resources/org/jboss/metadata/ejb/test/dependson/ejb-jar.xml
===================================================================
--- projects/metadata/ejb/trunk/src/test/resources/org/jboss/metadata/ejb/test/dependson/ejb-jar.xml	                        (rev 0)
+++ projects/metadata/ejb/trunk/src/test/resources/org/jboss/metadata/ejb/test/dependson/ejb-jar.xml	2010-04-27 10:15:47 UTC (rev 104262)
@@ -0,0 +1,19 @@
+<?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>SimpleSingletonBean</ejb-name>
+            <session-type>Singleton</session-type>
+            <depends-on>
+                <ejb-name>A</ejb-name>
+                <ejb-name>abc.jar#xyz</ejb-name>
+            </depends-on>
+        </session>
+        
+    </enterprise-beans>
+</ejb-jar>




More information about the jboss-cvs-commits mailing list