[jboss-cvs] JBossAS SVN: r100921 - in projects/metadata/ejb/trunk: .settings and 8 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri Feb 12 12:12:38 EST 2010
Author: jaikiran
Date: 2010-02-12 12:12:36 -0500 (Fri, 12 Feb 2010)
New Revision: 100921
Added:
projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/StartupProcessor.java
projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/StartupProcessor.java
projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/singleton/StartupSingleton.java
projects/metadata/ejb/trunk/src/test/resources/org/jboss/metadata/ejb/test/singleton/
projects/metadata/ejb/trunk/src/test/resources/org/jboss/metadata/ejb/test/singleton/ejb-jar-startup-singleton.xml
Modified:
projects/metadata/ejb/trunk/.classpath
projects/metadata/ejb/trunk/.settings/org.maven.ide.eclipse.prefs
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/ejb/jboss/JBossSessionBean31MetaData.java
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/SessionBeanMetaData.java
projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/singleton/unit/SingletonProcessorTestCase.java
Log:
JBMETA-252 Added metadata support for @Startup and init-on-startup for singleton beans
Modified: projects/metadata/ejb/trunk/.classpath
===================================================================
--- projects/metadata/ejb/trunk/.classpath 2010-02-12 16:38:14 UTC (rev 100920)
+++ projects/metadata/ejb/trunk/.classpath 2010-02-12 17:12:36 UTC (rev 100921)
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
- <classpathentry kind="src" output="eclipse-target/classes" path="src/main/java"/>
- <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="src" output="target/classes" path="src/main/java"/>
+ <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/>
+ <classpathentry kind="src" output="target/tests-classes" path="src/test/java"/>
+ <classpathentry excluding="**" kind="src" output="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/JavaSE-1.6"/>
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
- <classpathentry kind="output" path="eclipse-target/classes"/>
+ <classpathentry kind="output" path="target/classes"/>
</classpath>
Modified: projects/metadata/ejb/trunk/.settings/org.maven.ide.eclipse.prefs
===================================================================
--- projects/metadata/ejb/trunk/.settings/org.maven.ide.eclipse.prefs 2010-02-12 16:38:14 UTC (rev 100920)
+++ projects/metadata/ejb/trunk/.settings/org.maven.ide.eclipse.prefs 2010-02-12 17:12:36 UTC (rev 100921)
@@ -1,5 +1,5 @@
-#Thu Nov 26 12:37:11 CET 2009
-activeProfiles=eclipse
+#Fri Dec 04 17:56:18 IST 2009
+activeProfiles=
eclipse.preferences.version=1
fullBuildGoals=process-test-resources
includeModules=false
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 2010-02-12 16:38:14 UTC (rev 100920)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/AbstractSessionBeanProcessor.java 2010-02-12 17:12:36 UTC (rev 100921)
@@ -56,6 +56,7 @@
addTypeProcessor(new RemoteHomeProcessor(finder));
addTypeProcessor(new ImplicitLocalProcessor(finder));
addTypeProcessor(new LocalBeanProcessor(finder));
+ addTypeProcessor(new StartupProcessor(finder));
addMethodProcessor(new InitProcessor(finder));
addMethodProcessor(new TimeoutProcessor(finder));
Added: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/StartupProcessor.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/StartupProcessor.java (rev 0)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/StartupProcessor.java 2010-02-12 17:12:36 UTC (rev 100921)
@@ -0,0 +1,84 @@
+/*
+* 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.annotation.creator.ejb;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+import java.util.Collection;
+
+import javax.ejb.Startup;
+
+import org.jboss.metadata.annotation.creator.AbstractFinderUser;
+import org.jboss.metadata.annotation.creator.Processor;
+import org.jboss.metadata.annotation.creator.ProcessorUtils;
+import org.jboss.metadata.annotation.finder.AnnotationFinder;
+import org.jboss.metadata.ejb.spec.SessionBean31MetaData;
+
+/**
+ * {@link StartupProcessor} is responsible for setting up {@link SessionBean31MetaData}
+ * with the right information about the presence of {@link Startup} annotation on a bean
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public class StartupProcessor extends AbstractFinderUser implements Processor<SessionBean31MetaData, Class<?>>
+{
+
+ /**
+ * @param finder
+ */
+ protected StartupProcessor(AnnotationFinder<AnnotatedElement> finder)
+ {
+ super(finder);
+
+ }
+
+ /**
+ * @see org.jboss.metadata.annotation.creator.Processor#getAnnotationTypes()
+ */
+ @Override
+ public Collection<Class<? extends Annotation>> getAnnotationTypes()
+ {
+ return ProcessorUtils.createAnnotationSet(Startup.class);
+ }
+
+ /**
+ * Processes the <code>klass</code> for the presence of {@link Startup} annotation
+ *
+ * @param klass Class to be processed
+ * @param sessionBeanMetadata Session bean metadata
+ * @see org.jboss.metadata.annotation.creator.Processor#process(java.lang.Object, java.lang.reflect.AnnotatedElement)
+ */
+ @Override
+ public void process(SessionBean31MetaData sessionBeanMetadata, Class<?> klass)
+ {
+ // first check if @Startup has been specified
+ Startup initOnStartup = this.finder.getAnnotation(klass, Startup.class);
+ if (initOnStartup != null)
+ {
+ sessionBeanMetadata.setInitOnStartup(true);
+ return;
+ }
+
+ }
+
+}
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 2010-02-12 16:38:14 UTC (rev 100920)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/AbstractSessionBeanProcessor.java 2010-02-12 17:12:36 UTC (rev 100921)
@@ -63,7 +63,7 @@
addTypeProcessor(new RemoteHomeBindingProcessor(finder));
addTypeProcessor(new AsyncClassProcessor(finder));
addTypeProcessor(new LocalBeanProcessor(finder));
-
+ addTypeProcessor(new StartupProcessor(finder));
addMethodProcessor(new InitProcessor(finder));
addMethodProcessor(new TimeoutProcessor(finder));
Added: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/StartupProcessor.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/StartupProcessor.java (rev 0)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/StartupProcessor.java 2010-02-12 17:12:36 UTC (rev 100921)
@@ -0,0 +1,85 @@
+/*
+* 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.annotation.creator.ejb.jboss;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+import java.util.Collection;
+
+import javax.ejb.Startup;
+
+import org.jboss.metadata.annotation.creator.AbstractFinderUser;
+import org.jboss.metadata.annotation.creator.Processor;
+import org.jboss.metadata.annotation.creator.ProcessorUtils;
+import org.jboss.metadata.annotation.finder.AnnotationFinder;
+import org.jboss.metadata.ejb.jboss.JBossSessionBean31MetaData;
+
+/**
+ * {@link StartupProcessor} is responsible for setting up {@link JBossSessionBean31MetaData}
+ * with the right information about the presence of {@link Startup} annotation on a bean
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public class StartupProcessor extends AbstractFinderUser implements Processor<JBossSessionBean31MetaData, Class<?>>
+{
+
+ /**
+ * @param finder
+ */
+ protected StartupProcessor(AnnotationFinder<AnnotatedElement> finder)
+ {
+ super(finder);
+
+ }
+
+ /**
+ * @see org.jboss.metadata.annotation.creator.Processor#getAnnotationTypes()
+ */
+ @Override
+ public Collection<Class<? extends Annotation>> getAnnotationTypes()
+ {
+ return ProcessorUtils.createAnnotationSet(Startup.class);
+ }
+
+ /**
+ * Processes the <code>klass</code> for the presence of {@link Startup} annotation
+ *
+ * @param klass Class to be processed
+ * @param sessionBeanMetadata Session bean metadata
+ *
+ * @see org.jboss.metadata.annotation.creator.Processor#process(java.lang.Object, java.lang.reflect.AnnotatedElement)
+ */
+ @Override
+ public void process(JBossSessionBean31MetaData sessionBeanMetadata, Class<?> klass)
+ {
+ // first check if @Startup has been specified
+ Startup initOnStartup = this.finder.getAnnotation(klass, Startup.class);
+ if (initOnStartup != null)
+ {
+ sessionBeanMetadata.setInitOnStartup(true);
+ return;
+ }
+
+ }
+
+}
Modified: 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 2010-02-12 16:38:14 UTC (rev 100920)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossSessionBean31MetaData.java 2010-02-12 17:12:36 UTC (rev 100921)
@@ -21,6 +21,8 @@
*/
package org.jboss.metadata.ejb.jboss;
+import javax.ejb.Startup;
+
import org.jboss.metadata.common.ejb.ITimeoutTarget;
import org.jboss.metadata.ejb.spec.AsyncMethodsMetaData;
import org.jboss.metadata.ejb.spec.EnterpriseBeanMetaData;
@@ -41,6 +43,11 @@
* Flag indicating whether this bean has a no-interface view
*/
private boolean noInterfaceBean;
+
+ /**
+ * Flag indicating if a singleton bean is set for init-on-startup
+ */
+ private Boolean initOnStartup;
public AsyncMethodsMetaData getAsyncMethods()
{
@@ -98,7 +105,31 @@
}
return SessionType.Singleton == type;
}
+
+
+
+ /**
+ * @return Returns true if a singleton bean is marked for init-on-startup ({@link Startup})
+ *
+ */
+ public boolean isInitOnStartup()
+ {
+ return this.initOnStartup == null ? Boolean.FALSE : this.initOnStartup;
+ }
+ /**
+ * Set the init-on-startup property of a singleton bean
+ *
+ * @param initOnStartup True if the singleton bean has to be inited on startup. False otherwise
+ *
+ */
+ public void setInitOnStartup(boolean initOnStartup)
+ {
+
+ this.initOnStartup = initOnStartup;
+ }
+
+
@Override
public void merge(JBossEnterpriseBeanMetaData override, JBossEnterpriseBeanMetaData original)
{
@@ -122,6 +153,16 @@
{
this.noInterfaceBean = soriginal.isNoInterfaceBean();
}
+
+ // merge the init-on-startup information
+ if (joverride != null)
+ {
+ this.initOnStartup = joverride.isInitOnStartup();
+ }
+ else if (soriginal != null)
+ {
+ this.initOnStartup = soriginal.isInitOnStartup();
+ }
}
@@ -145,5 +186,15 @@
{
this.noInterfaceBean = soriginal.isNoInterfaceBean();
}
+
+ // merge the init-on-startup information
+ if (joverride != null)
+ {
+ this.initOnStartup = joverride.isInitOnStartup();
+ }
+ else if (soriginal != null)
+ {
+ this.initOnStartup = soriginal.isInitOnStartup();
+ }
}
}
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-02-12 16:38:14 UTC (rev 100920)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/SessionBean31MetaData.java 2010-02-12 17:12:36 UTC (rev 100921)
@@ -131,6 +131,16 @@
}
/**
+ * Returns true if this is a singleton session bean. Else returns false
+ */
+ public boolean isSingleton()
+ {
+ if (this.getSessionType() == null)
+ return false;
+ return this.getSessionType() == SessionType.Singleton;
+ }
+
+ /**
* {@inheritDoc}
*/
@Override
Modified: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/SessionBeanMetaData.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/SessionBeanMetaData.java 2010-02-12 16:38:14 UTC (rev 100920)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/SessionBeanMetaData.java 2010-02-12 17:12:36 UTC (rev 100921)
@@ -316,7 +316,9 @@
*/
public boolean isStateless()
{
- return isStateful() == false;
+ if (sessionType == null)
+ return false;
+ return sessionType == SessionType.Stateless;
}
/**
Added: projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/singleton/StartupSingleton.java
===================================================================
--- projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/singleton/StartupSingleton.java (rev 0)
+++ projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/singleton/StartupSingleton.java 2010-02-12 17:12:36 UTC (rev 100921)
@@ -0,0 +1,38 @@
+/*
+* 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.test.singleton;
+
+import javax.ejb.Singleton;
+import javax.ejb.Startup;
+
+/**
+ * StartupSingleton
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+ at Singleton
+ at Startup
+public class StartupSingleton
+{
+
+}
Modified: projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/singleton/unit/SingletonProcessorTestCase.java
===================================================================
--- projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/singleton/unit/SingletonProcessorTestCase.java 2010-02-12 16:38:14 UTC (rev 100920)
+++ projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/singleton/unit/SingletonProcessorTestCase.java 2010-02-12 17:12:36 UTC (rev 100921)
@@ -22,12 +22,16 @@
package org.jboss.metadata.ejb.test.singleton.unit;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.lang.reflect.AnnotatedElement;
+import java.net.URL;
import java.util.Collection;
+import javax.ejb.Startup;
+
import org.jboss.metadata.annotation.creator.ejb.SingletonProcessor;
import org.jboss.metadata.annotation.creator.ejb.jboss.JBoss50Creator;
import org.jboss.metadata.annotation.finder.AnnotationFinder;
@@ -36,17 +40,28 @@
import org.jboss.metadata.ejb.jboss.JBossMetaData;
import org.jboss.metadata.ejb.jboss.JBossSessionBean31MetaData;
import org.jboss.metadata.ejb.spec.BusinessRemotesMetaData;
+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.spec.SessionType;
import org.jboss.metadata.ejb.test.singleton.Counter;
import org.jboss.metadata.ejb.test.singleton.SimpleSingleton;
+import org.jboss.metadata.ejb.test.singleton.StartupSingleton;
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;
/**
* SingletonProcessorTestCase
*
- * Tests the {@link SingletonProcessor}
+ * Tests processing of singleton beans
*
* @author Jaikiran Pai
* @version $Revision: $
@@ -54,6 +69,17 @@
public class SingletonProcessorTestCase
{
+ private static UnmarshallerFactory unmarshallerFactory = UnmarshallerFactory.newInstance();
+
+ private static MutableSchemaResolver schemaBindingResolver;
+
+ @BeforeClass
+ public static void beforeClass()
+ {
+ schemaBindingResolver = new MultiClassSchemaResolver();
+ schemaBindingResolver.mapLocationToClass("ejb-jar_3_1.xsd", EjbJar31MetaData.class);
+ }
+
/**
* Tests that the {@link SingletonProcessor} correctly identifies the presence of a
* @Singleton annotation on singleton beans, and creates appropriate metadata out of
@@ -95,4 +121,118 @@
}
}
+
+ /**
+ * Tests that the presence of a {@link Startup} annotation on singleton beans,
+ * is processed correctly it.
+ *
+ * @throws Exception
+ */
+ @Test
+ @ScanPackage("org.jboss.metadata.ejb.test.singleton")
+ public void testInitOnStartup() throws Exception
+ {
+
+ AnnotationFinder<AnnotatedElement> finder = new DefaultAnnotationFinder<AnnotatedElement>();
+ JBoss50Creator creator = new JBoss50Creator(finder);
+ Collection<Class<?>> classes = PackageScanner.loadClasses();
+ JBossMetaData metaData = creator.create(classes);
+ assertNotNull("Metadata created for singleton bean was null", metaData);
+
+ String beanName = StartupSingleton.class.getSimpleName();
+ JBossEnterpriseBeanMetaData bean = metaData.getEnterpriseBean(beanName);
+ assertNotNull(beanName + " bean was not found in metadata");
+ assertTrue(beanName + " was not considered a session bean", (bean instanceof JBossSessionBean31MetaData));
+
+ JBossSessionBean31MetaData singletonBean = (JBossSessionBean31MetaData) bean;
+ assertEquals(beanName + " was not considered of type " + SessionType.Singleton, SessionType.Singleton,
+ singletonBean.getSessionType());
+ assertEquals("Unexpected ejb class name for bean " + beanName, StartupSingleton.class.getName(), singletonBean
+ .getEjbClass());
+ // test the isSingleton API
+ assertTrue("isSingleton() on metadata returned incorrected value for bean " + beanName, singletonBean
+ .isSingleton());
+
+ // test that it's set for init-on-startup
+ assertTrue("Singleton bean " + beanName + " is not considered a init-on-startup bean", singletonBean
+ .isInitOnStartup());
+
+ // test it with a non init-on-startup bean
+ // OK to cast, because we are not really testing much of SimpleSingleton
+ JBossSessionBean31MetaData nonInitOnStartupSingleton = (JBossSessionBean31MetaData) metaData
+ .getEnterpriseBean(SimpleSingleton.class.getSimpleName());
+ assertFalse(
+ "Singleton bean " + nonInitOnStartupSingleton.getEjbName() + " was considered a init-on-startup bean",
+ nonInitOnStartupSingleton.isInitOnStartup());
+
+ }
+
+ /**
+ * Test that the metadata for a startup singleton bean created from a ejb-jar.xml
+ * is correct
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testInitOnStartupForEjbJarXml() throws Exception
+ {
+ EjbJarMetaData jarMetaData = unmarshal(EjbJarMetaData.class,
+ "/org/jboss/metadata/ejb/test/singleton/ejb-jar-startup-singleton.xml");
+ assertNotNull(jarMetaData);
+ assertStartupSingleton(jarMetaData, "NonInitOnStartupBean", false);
+ assertStartupSingleton(jarMetaData, "InitOnStartupBean", true);
+ assertStartupSingleton(jarMetaData, "UndefinedInitOnStartupBean", null);
+ }
+
+ /**
+ * 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));
+ }
+
+ /**
+ * Utility method for testing
+ *
+ * @param ejbJarMetadata
+ * @param beanName
+ * @param expected
+ */
+ private void assertStartupSingleton(EjbJarMetaData ejbJarMetadata, String beanName, Boolean expected)
+ {
+ // first check if it's a singleton
+ this.assertSingleton(ejbJarMetadata, beanName, true);
+ EnterpriseBeanMetaData enterpriseBean = ejbJarMetadata.getEnterpriseBean(beanName);
+ SessionBean31MetaData singletonBean = (SessionBean31MetaData) enterpriseBean;
+ assertEquals("Is " + beanName + " a startup singleton bean?", expected, singletonBean.isInitOnStartup());
+
+ }
+
+ /**
+ * Utility method for testing
+ *
+ * @param ejbJarMetadata
+ * @param beanName
+ * @param expected
+ */
+ private void assertSingleton(EjbJarMetaData ejbJarMetadata, String beanName, boolean expected)
+ {
+ EnterpriseBeanMetaData enterpriseBean = ejbJarMetadata.getEnterpriseBean(beanName);
+ assertTrue("metadata " + enterpriseBean.getClass() + " is not of type " + SessionBean31MetaData.class,
+ (enterpriseBean instanceof SessionBean31MetaData));
+ SessionBean31MetaData singletonBean = (SessionBean31MetaData) enterpriseBean;
+ assertEquals("Is " + beanName + " a singleton bean?", expected, singletonBean.isSingleton());
+
+ }
}
Added: projects/metadata/ejb/trunk/src/test/resources/org/jboss/metadata/ejb/test/singleton/ejb-jar-startup-singleton.xml
===================================================================
--- projects/metadata/ejb/trunk/src/test/resources/org/jboss/metadata/ejb/test/singleton/ejb-jar-startup-singleton.xml (rev 0)
+++ projects/metadata/ejb/trunk/src/test/resources/org/jboss/metadata/ejb/test/singleton/ejb-jar-startup-singleton.xml 2010-02-12 17:12:36 UTC (rev 100921)
@@ -0,0 +1,23 @@
+<?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>InitOnStartupBean</ejb-name>
+ <session-type>Singleton</session-type>
+ <init-on-startup>true</init-on-startup>
+ </session>
+ <session>
+ <ejb-name>NonInitOnStartupBean</ejb-name>
+ <session-type>Singleton</session-type>
+ <init-on-startup>false</init-on-startup>
+ </session>
+ <session>
+ <ejb-name>UndefinedInitOnStartupBean</ejb-name>
+ <session-type>Singleton</session-type>
+ </session>
+ </enterprise-beans>
+</ejb-jar>
\ No newline at end of file
More information about the jboss-cvs-commits
mailing list