[jboss-cvs] JBossAS SVN: r110709 - in projects/metadata/ejb/trunk/src: main/java/org/jboss/metadata/ejb/spec and 5 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Feb 18 05:42:54 EST 2011


Author: jaikiran
Date: 2011-02-18 05:42:54 -0500 (Fri, 18 Feb 2011)
New Revision: 110709

Added:
   projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/singleton/startup/
   projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/singleton/startup/InitOnStartupBean.java
   projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/singleton/startup/unit/
   projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/singleton/startup/unit/InitOnStartupMergeTestCase.java
   projects/metadata/ejb/trunk/src/test/resources/org/jboss/metadata/ejb/test/singleton/startup/
   projects/metadata/ejb/trunk/src/test/resources/org/jboss/metadata/ejb/test/singleton/startup/ejb-jar.xml
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/spec/SessionBean31MetaData.java
Log:
JBMETA-330 Fix the merging of @Startup and init-on-startup element

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	2011-02-18 05:07:44 UTC (rev 110708)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossSessionBean31MetaData.java	2011-02-18 10:42:54 UTC (rev 110709)
@@ -163,14 +163,26 @@
 
    /**
     * @return Returns true if a singleton bean is marked for init-on-startup ({@link Startup})
-    * 
+    * @deprecated
     */
+   @Deprecated
    public boolean isInitOnStartup()
    {
       return this.initOnStartup == null ? Boolean.FALSE : this.initOnStartup;
    }
 
    /**
+    * Returns true if a singleton bean is marked for init-on-startup/@Startup. Returns false if init-on-startup element has been marked
+    * as false. Unlike the deprecated {@link #isInitOnStartup()}  method, this method returns null if the init-on-startup/@Startup hasn't been set.
+    * 
+    * @return
+    */
+   public Boolean isInitiOnStartupBean()
+   {
+      return 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
@@ -471,10 +483,21 @@
 
       this.statefulTimeout = override(joverride != null ? joverride.getStatefulTimeout() : null, soriginal != null ? soriginal.getStatefulTimeout() : null);
 
+      if (joverride != null && joverride.isInitiOnStartupBean() != null)
+      {
+         this.initOnStartup = joverride.initOnStartup;
+      }
+      else if (soriginal != null && soriginal.isInitiOnStartupBean() != null)
+      {
+         this.initOnStartup = soriginal.isInitiOnStartupBean();
+      }
+      
+      // Fixme: The rest of the merging from this point is inaccurate!
+      
       if (joverride != null)
       {
          this.noInterfaceBean = joverride.isNoInterfaceBean();
-         this.initOnStartup = joverride.isInitOnStartup();
+
          if (joverride.concurrencyManagementType != null)
          {
             this.concurrencyManagementType = joverride.concurrencyManagementType;
@@ -491,7 +514,7 @@
       else if (soriginal != null)
       {
          this.noInterfaceBean = soriginal.isNoInterfaceBean();
-         this.initOnStartup = soriginal.isInitOnStartup();
+
          if (soriginal.getConcurrencyManagementType() != null)
          {
             this.concurrencyManagementType = soriginal.getConcurrencyManagementType();
@@ -534,10 +557,21 @@
 
       this.statefulTimeout = override(joverride != null ? joverride.getStatefulTimeout() : null, soriginal != null ? soriginal.getStatefulTimeout() : null);
 
+      if (joverride != null && joverride.isInitiOnStartupBean() != null)
+      {
+         this.initOnStartup = joverride.initOnStartup;
+      }
+      else if (soriginal != null && soriginal.isInitOnStartup() != null)
+      {
+         this.initOnStartup = soriginal.isInitOnStartup();
+      }
+
+      // Fixme: The rest of the merging from this point is inaccurate! 
+
       if (joverride != null)
       {
          this.noInterfaceBean = joverride.isNoInterfaceBean();
-         this.initOnStartup = joverride.isInitOnStartup();
+
          if (joverride.concurrencyManagementType != null)
          {
             this.concurrencyManagementType = joverride.concurrencyManagementType;
@@ -555,7 +589,6 @@
       else if (soriginal != null)
       {
          this.noInterfaceBean = soriginal.isNoInterfaceBean();
-         this.initOnStartup = soriginal.isInitOnStartup();
          if (soriginal.getConcurrencyManagementType() != null)
          {
             this.concurrencyManagementType = soriginal.getConcurrencyManagementType();

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	2011-02-18 05:07:44 UTC (rev 110708)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/SessionBean31MetaData.java	2011-02-18 10:42:54 UTC (rev 110709)
@@ -417,16 +417,23 @@
 
       this.statefulTimeout = override(override != null ? override.getStatefulTimeout() : null, original != null ? original.getStatefulTimeout() : null);
 
+      if (override != null && override.isInitOnStartup() != null)
+      {
+         this.initOnStartup = override.isInitOnStartup();
+      }
+      else if (original != null && original.isInitOnStartup() != null)
+      {
+         this.initOnStartup = original.isInitOnStartup();
+      }
+
+      // Fixme: The rest of the merging from this point is inaccurate!
+      
       if (override != null)
       {
          if (override.localBean != null)
          {
             this.localBean = override.localBean;
          }
-         if (override.initOnStartup != null)
-         {
-            this.initOnStartup = override.initOnStartup;
-         }
          if (override.concurrencyManagementType != null)
          {
             this.concurrencyManagementType = override.concurrencyManagementType;
@@ -450,10 +457,6 @@
          {
             this.localBean = original.localBean;
          }
-         if (original.initOnStartup != null)
-         {
-            this.initOnStartup = original.initOnStartup;
-         }
          if (original.concurrencyManagementType != null)
          {
             this.concurrencyManagementType = original.concurrencyManagementType;

Added: projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/singleton/startup/InitOnStartupBean.java
===================================================================
--- projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/singleton/startup/InitOnStartupBean.java	                        (rev 0)
+++ projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/singleton/startup/InitOnStartupBean.java	2011-02-18 10:42:54 UTC (rev 110709)
@@ -0,0 +1,35 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat, Inc., 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.singleton.startup;
+
+import javax.ejb.Singleton;
+import javax.ejb.Startup;
+
+/**
+ * Author : Jaikiran Pai
+ */
+ at Singleton
+ at Startup
+public class InitOnStartupBean
+{
+}

Added: projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/singleton/startup/unit/InitOnStartupMergeTestCase.java
===================================================================
--- projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/singleton/startup/unit/InitOnStartupMergeTestCase.java	                        (rev 0)
+++ projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/singleton/startup/unit/InitOnStartupMergeTestCase.java	2011-02-18 10:42:54 UTC (rev 110709)
@@ -0,0 +1,147 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat, Inc., 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.singleton.startup.unit;
+
+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.JBossEnterpriseBeanMetaData;
+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.singleton.startup.InitOnStartupBean;
+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.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.lang.reflect.AnnotatedElement;
+import java.net.URL;
+import java.util.Collection;
+
+import static org.junit.Assert.assertNotNull;
+
+/**
+ * Test case for testing the merge operation on @Startup annotation and its init-on-startup xml counterpart
+ * in ejb-jar.xml
+ * 
+ * @see JBMETA-330 https://issues.jboss.org/browse/JBMETA-330
+ *
+ * Author : Jaikiran Pai
+ */
+public class InitOnStartupMergeTestCase
+{
+   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 init-on-startup element in ejb-jar.xml and the @Startup annotation
+    * on the bean class are merged properly.
+    */
+   @Test
+   @ScanPackage("org.jboss.metadata.ejb.test.singleton.startup")
+   public void testInitOnStartupMerge() throws Exception
+   {
+      // generate metadata out of ejb-jar.xml
+      EjbJarMetaData jarMetaData = unmarshal(EjbJarMetaData.class, "/org/jboss/metadata/ejb/test/singleton/startup/ejb-jar.xml");
+      assertNotNull(jarMetaData);
+
+      EnterpriseBeanMetaData enterpriseBean = jarMetaData.getEnterpriseBean(InitOnStartupBean.class.getSimpleName());
+      Assert.assertNotNull(InitOnStartupBean.class.getSimpleName() + " bean not found", enterpriseBean);
+      Assert.assertTrue(InitOnStartupBean.class.getSimpleName() + " was expected to be a session bean", enterpriseBean.isSession());
+
+      SessionBean31MetaData sessionBean = (SessionBean31MetaData) enterpriseBean;
+      Assert.assertTrue(InitOnStartupBean.class.getSimpleName() + " was expected to be a singleton bean", sessionBean.isSingleton());
+      Assert.assertNull("init-on-startup was expected to be null for " + InitOnStartupBean.class.getSimpleName() + " in ejb-jar.xml", sessionBean.isInitOnStartup());
+
+      // now generate metadata out of annotations
+      AnnotationFinder<AnnotatedElement> finder = new DefaultAnnotationFinder<AnnotatedElement>();
+      JBoss50Creator creator = new JBoss50Creator(finder);
+      Collection<Class<?>> classes = PackageScanner.loadClasses();
+      JBossMetaData jBossMetaData = creator.create(classes);
+      assertNotNull("Metadata created for singleton bean was null", jBossMetaData);
+
+      JBossEnterpriseBeanMetaData jbossEnterpriseBean = jBossMetaData.getEnterpriseBean(InitOnStartupBean.class.getSimpleName());
+      Assert.assertNotNull(InitOnStartupBean.class.getSimpleName() + " bean was not found after annotation scanning", jbossEnterpriseBean);
+      Assert.assertTrue(InitOnStartupBean.class.getSimpleName() + " was expected to be a session bean", jbossEnterpriseBean.isSession());
+
+      JBossSessionBean31MetaData jbossSessionBean = (JBossSessionBean31MetaData) jbossEnterpriseBean;
+      Assert.assertTrue(InitOnStartupBean.class.getSimpleName() + " was expected to be a singleton bean", jbossSessionBean.isSingleton());
+      Assert.assertTrue("@Startup was expected to be true for " + InitOnStartupBean.class.getSimpleName(), jbossSessionBean.isInitiOnStartupBean());
+
+      // now merge the annotations and the ejb-jar.xml metadata
+      JBossMetaData jbossMetadataFromXml = new JBoss50MetaData();
+      jbossMetadataFromXml.merge(null, jarMetaData);
+
+      JBossMetaData mergedMetadata = new JBoss50MetaData();
+      mergedMetadata.merge(jbossMetadataFromXml, jBossMetaData);
+
+      JBossSessionBean31MetaData mergedSessionBean = (JBossSessionBean31MetaData) mergedMetadata.getEnterpriseBean(InitOnStartupBean.class.getSimpleName());
+      Assert.assertNotNull(InitOnStartupBean.class.getSimpleName() + " bean not found after merge", mergedSessionBean);
+      Assert.assertTrue(InitOnStartupBean.class.getSimpleName() + " was expected to be a singleton bean after merging", mergedSessionBean.isSingleton());
+      Assert.assertTrue("@Startup/init-on-startup was expected to be true, after merging, for " + InitOnStartupBean.class.getSimpleName(), mergedSessionBean.isInitiOnStartupBean());
+
+
+   }
+
+   /**
+    * Utility method
+    *
+    * @param <T>
+    * @param type
+    * @param resource
+    * @return
+    * @throws org.jboss.xb.binding.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/singleton/startup/ejb-jar.xml
===================================================================
--- projects/metadata/ejb/trunk/src/test/resources/org/jboss/metadata/ejb/test/singleton/startup/ejb-jar.xml	                        (rev 0)
+++ projects/metadata/ejb/trunk/src/test/resources/org/jboss/metadata/ejb/test/singleton/startup/ejb-jar.xml	2011-02-18 10:42:54 UTC (rev 110709)
@@ -0,0 +1,13 @@
+<?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>
+      </session>
+   </enterprise-beans>
+</ejb-jar>
\ No newline at end of file



More information about the jboss-cvs-commits mailing list