[jboss-cvs] JBossAS SVN: r109040 - 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
Mon Nov 1 10:54:53 EDT 2010
Author: wolfc
Date: 2010-11-01 10:54:52 -0400 (Mon, 01 Nov 2010)
New Revision: 109040
Added:
projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/jbmeta307/
projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/jbmeta307/unit/
projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/jbmeta307/unit/SessionSynchronizationTestCase.java
projects/metadata/ejb/trunk/src/test/resources/org/jboss/metadata/ejb/test/jbmeta307/
projects/metadata/ejb/trunk/src/test/resources/org/jboss/metadata/ejb/test/jbmeta307/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-307: added session synchronization metadata
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-11-01 14:16:34 UTC (rev 109039)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossSessionBean31MetaData.java 2010-11-01 14:54:52 UTC (rev 109040)
@@ -32,6 +32,7 @@
import javax.ejb.LockType;
import javax.ejb.Schedule;
import javax.ejb.Startup;
+import javax.xml.bind.annotation.XmlElement;
import org.jboss.metadata.common.ejb.IScheduleTarget;
import org.jboss.metadata.common.ejb.ITimeoutTarget;
@@ -95,6 +96,10 @@
*/
private List<TimerMetaData> timers = new ArrayList<TimerMetaData>();
+ private NamedMethodMetaData afterBeginMethod;
+ private NamedMethodMetaData beforeCompletionMethod;
+ private NamedMethodMetaData afterCompletionMethod;
+
public AsyncMethodsMetaData getAsyncMethods()
{
return asyncMethods;
@@ -322,6 +327,39 @@
this.timers.add(timer);
}
+ public NamedMethodMetaData getAfterBeginMethod()
+ {
+ return afterBeginMethod;
+ }
+
+ @XmlElement(name = "after-begin-method", required = false)
+ public void setAfterBeginMethod(NamedMethodMetaData method)
+ {
+ this.afterBeginMethod = method;
+ }
+
+ public NamedMethodMetaData getBeforeCompletionMethod()
+ {
+ return beforeCompletionMethod;
+ }
+
+ @XmlElement(name = "before-completion-method", required = false)
+ public void setBeforeCompletionMethod(NamedMethodMetaData method)
+ {
+ this.beforeCompletionMethod = method;
+ }
+
+ public NamedMethodMetaData getAfterCompletionMethod()
+ {
+ return afterCompletionMethod;
+ }
+
+ @XmlElement(name = "after-completion-method", required = false)
+ public void setAfterCompletionMethod(NamedMethodMetaData method)
+ {
+ this.afterCompletionMethod = method;
+ }
+
/**
* {@inheritDoc}
*/
@@ -336,6 +374,13 @@
return super.hasEJB3xView();
}
+ private static <T> T override(T override, T original)
+ {
+ if(override != null)
+ return override;
+ return original;
+ }
+
@Override
public void merge(JBossEnterpriseBeanMetaData override, JBossEnterpriseBeanMetaData original)
{
@@ -351,6 +396,11 @@
merge(joverride != null ? joverride.asyncMethods : null, soriginal != null ? soriginal.asyncMethods : null);
// merge the rest
+
+ this.setAfterBeginMethod(override(joverride != null ? joverride.getAfterBeginMethod() : null, soriginal != null ? soriginal.getAfterBeginMethod() : null));
+ this.setBeforeCompletionMethod(override(joverride != null ? joverride.getBeforeCompletionMethod() : null, soriginal != null ? soriginal.getBeforeCompletionMethod() : null));
+ this.setAfterCompletionMethod(override(joverride != null ? joverride.getAfterCompletionMethod() : null, soriginal != null ? soriginal.getAfterCompletionMethod() : null));
+
if (joverride != null)
{
this.noInterfaceBean = joverride.isNoInterfaceBean();
@@ -426,6 +476,11 @@
merge(joverride != null ? joverride.asyncMethods : null, soriginal != null ? soriginal.getAsyncMethods() : null);
// merge rest of the metadata
+
+ this.setAfterBeginMethod(override(joverride != null ? joverride.getAfterBeginMethod() : null, soriginal != null ? soriginal.getAfterBeginMethod() : null));
+ this.setBeforeCompletionMethod(override(joverride != null ? joverride.getBeforeCompletionMethod() : null, soriginal != null ? soriginal.getBeforeCompletionMethod() : null));
+ this.setAfterCompletionMethod(override(joverride != null ? joverride.getAfterCompletionMethod() : null, soriginal != null ? soriginal.getAfterCompletionMethod() : null));
+
if (joverride != null)
{
this.noInterfaceBean = joverride.isNoInterfaceBean();
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-11-01 14:16:34 UTC (rev 109039)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/SessionBean31MetaData.java 2010-11-01 14:54:52 UTC (rev 109040)
@@ -46,6 +46,7 @@
{"descriptionGroup", "ejbName", "mappedName", "home", "remote", "localHome", "local", "businessLocals",
"businessRemotes", "localBean", "serviceEndpoint", "ejbClass", "sessionType", "timeoutMethod", "timers", "initOnStartup",
"concurrencyManagementType", "concurrentMethods", "dependsOnMetaData", "initMethods", "removeMethods", "asyncMethods", "transactionType",
+ "afterBeginMethod", "beforeCompletionMethod", "afterCompletionMethod",
"aroundInvokes", "environmentRefsGroup", "postActivates", "prePassivates", "securityRoleRefs", "securityIdentity"})
//@JBossXmlType(modelGroup = JBossXmlConstants.MODEL_GROUP_UNORDERED_SEQUENCE)
public class SessionBean31MetaData extends SessionBeanMetaData implements ITimeoutTarget, IScheduleTarget // FIXME: AbstractProcessor.processClass doesn't take super interfaces into account
@@ -95,6 +96,10 @@
*/
private List<TimerMetaData> timers;
+ private NamedMethodMetaData afterBeginMethod;
+ private NamedMethodMetaData beforeCompletionMethod;
+ private NamedMethodMetaData afterCompletionMethod;
+
/**
* Returns the init-on-startup value of the session bean metadata.
* Returns null if none is defined.
@@ -348,7 +353,46 @@
this.timers.add(timer);
}
+ public NamedMethodMetaData getAfterBeginMethod()
+ {
+ return afterBeginMethod;
+ }
+ @XmlElement(name = "after-begin-method", required = false)
+ public void setAfterBeginMethod(NamedMethodMetaData method)
+ {
+ this.afterBeginMethod = method;
+ }
+
+ public NamedMethodMetaData getBeforeCompletionMethod()
+ {
+ return beforeCompletionMethod;
+ }
+
+ @XmlElement(name = "before-completion-method", required = false)
+ public void setBeforeCompletionMethod(NamedMethodMetaData method)
+ {
+ this.beforeCompletionMethod = method;
+ }
+
+ public NamedMethodMetaData getAfterCompletionMethod()
+ {
+ return afterCompletionMethod;
+ }
+
+ @XmlElement(name = "after-completion-method", required = false)
+ public void setAfterCompletionMethod(NamedMethodMetaData method)
+ {
+ this.afterCompletionMethod = method;
+ }
+
+ private static <T> T override(T override, T original)
+ {
+ if(override != null)
+ return override;
+ return original;
+ }
+
/**
* {@inheritDoc}
*/
@@ -367,6 +411,10 @@
// merge rest of the metadata
+ this.setAfterBeginMethod(override(override != null ? override.getAfterBeginMethod() : null, original != null ? original.getAfterBeginMethod() : null));
+ this.setBeforeCompletionMethod(override(override != null ? override.getBeforeCompletionMethod() : null, original != null ? original.getBeforeCompletionMethod() : null));
+ this.setAfterCompletionMethod(override(override != null ? override.getAfterCompletionMethod() : null, original != null ? original.getAfterCompletionMethod() : null));
+
if (override != null)
{
if (override.localBean != null)
Added: projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/jbmeta307/unit/SessionSynchronizationTestCase.java
===================================================================
--- projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/jbmeta307/unit/SessionSynchronizationTestCase.java (rev 0)
+++ projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/jbmeta307/unit/SessionSynchronizationTestCase.java 2010-11-01 14:54:52 UTC (rev 109040)
@@ -0,0 +1,148 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright (c) 2010, 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.jbmeta307.unit;
+
+import org.jboss.metadata.ejb.jboss.JBoss51MetaData;
+import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeansMetaData;
+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.NamedMethodMetaData;
+import org.jboss.metadata.ejb.spec.SessionBean31MetaData;
+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;
+
+import java.net.URL;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+/**
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ */
+public class SessionSynchronizationTestCase
+{
+ private static MutableSchemaResolver schemaBindingResolver;
+
+ private static UnmarshallerFactory unmarshallerFactory = UnmarshallerFactory.newInstance();
+
+ @BeforeClass
+ public static void beforeClass()
+ {
+ schemaBindingResolver = new MultiClassSchemaResolver();
+ schemaBindingResolver.mapLocationToClass("ejb-jar_3_1.xsd", EjbJar31MetaData.class);
+ }
+
+ private static NamedMethodMetaData namedMethod(String methodName)
+ {
+ NamedMethodMetaData namedMethod = new NamedMethodMetaData();
+ namedMethod.setMethodName(methodName);
+ return namedMethod;
+ }
+
+ @Test
+ public void testMerge() throws Exception
+ {
+ EjbJarMetaData ejb31 = unmarshal(EjbJarMetaData.class, "/org/jboss/metadata/ejb/test/jbmeta307/ejb-jar.xml");
+
+ SessionBean31MetaData original = (SessionBean31MetaData) ejb31.getEnterpriseBean("Test");
+
+ SessionBean31MetaData bean = new SessionBean31MetaData();
+ bean.merge(null, original);
+
+ assertNotNull(bean.getAfterBeginMethod());
+ assertEquals("afterBegin", bean.getAfterBeginMethod().getMethodName());
+ assertEquals("beforeCompletion", bean.getBeforeCompletionMethod().getMethodName());
+ assertEquals("afterCompletion", bean.getAfterCompletionMethod().getMethodName());
+ }
+
+ @Test
+ public void testOverride() throws Exception
+ {
+ EjbJarMetaData ejb31 = unmarshal(EjbJarMetaData.class, "/org/jboss/metadata/ejb/test/jbmeta307/ejb-jar.xml");
+
+ SessionBean31MetaData original = (SessionBean31MetaData) ejb31.getEnterpriseBean("Test");
+
+ SessionBean31MetaData override = new SessionBean31MetaData();
+ override.setAfterBeginMethod(namedMethod("overrideAfterBegin"));
+
+ SessionBean31MetaData bean = new SessionBean31MetaData();
+ bean.merge(override, original);
+
+ assertNotNull(bean.getAfterBeginMethod());
+ assertEquals("overrideAfterBegin", bean.getAfterBeginMethod().getMethodName());
+ assertEquals("beforeCompletion", bean.getBeforeCompletionMethod().getMethodName());
+ assertEquals("afterCompletion", bean.getAfterCompletionMethod().getMethodName());
+ }
+
+ @Test
+ public void testOverride2() throws Exception
+ {
+ EjbJarMetaData ejb31 = unmarshal(EjbJarMetaData.class, "/org/jboss/metadata/ejb/test/jbmeta307/ejb-jar.xml");
+
+ SessionBean31MetaData original = (SessionBean31MetaData) ejb31.getEnterpriseBean("Test");
+
+ JBoss51MetaData overrideJar = new JBoss51MetaData();
+ overrideJar.setEnterpriseBeans(new JBossEnterpriseBeansMetaData());
+ JBossSessionBean31MetaData override = new JBossSessionBean31MetaData();
+ override.setEnterpriseBeansMetaData(overrideJar.getEnterpriseBeans());
+ override.setAfterBeginMethod(namedMethod("overrideAfterBegin"));
+
+ JBossSessionBean31MetaData bean = new JBossSessionBean31MetaData();
+ // Q&D
+ bean.setEnterpriseBeansMetaData(overrideJar.getEnterpriseBeans());
+ bean.merge(override, original);
+
+ assertNotNull(bean.getAfterBeginMethod());
+ assertEquals("overrideAfterBegin", bean.getAfterBeginMethod().getMethodName());
+ assertEquals("beforeCompletion", bean.getBeforeCompletionMethod().getMethodName());
+ assertEquals("afterCompletion", bean.getAfterCompletionMethod().getMethodName());
+ }
+
+ @Test
+ public void testParse() throws Exception
+ {
+ EjbJarMetaData ejb31 = unmarshal(EjbJarMetaData.class, "/org/jboss/metadata/ejb/test/jbmeta307/ejb-jar.xml");
+
+ SessionBean31MetaData bean = (SessionBean31MetaData) ejb31.getEnterpriseBean("Test");
+
+ assertEquals("afterBegin", bean.getAfterBeginMethod().getMethodName());
+ assertEquals("beforeCompletion", bean.getBeforeCompletionMethod().getMethodName());
+ assertEquals("afterCompletion", bean.getAfterCompletionMethod().getMethodName());
+ }
+
+ 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/jbmeta307/ejb-jar.xml
===================================================================
--- projects/metadata/ejb/trunk/src/test/resources/org/jboss/metadata/ejb/test/jbmeta307/ejb-jar.xml (rev 0)
+++ projects/metadata/ejb/trunk/src/test/resources/org/jboss/metadata/ejb/test/jbmeta307/ejb-jar.xml 2010-11-01 14:54:52 UTC (rev 109040)
@@ -0,0 +1,21 @@
+<?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>Test</ejb-name>
+ <after-begin-method>
+ <method-name>afterBegin</method-name>
+ </after-begin-method>
+ <before-completion-method>
+ <method-name>beforeCompletion</method-name>
+ </before-completion-method>
+ <after-completion-method>
+ <method-name>afterCompletion</method-name>
+ </after-completion-method>
+ </session>
+ </enterprise-beans>
+</ejb-jar>
\ No newline at end of file
More information about the jboss-cvs-commits
mailing list