[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