[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