[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