[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