[jboss-cvs] JBossAS SVN: r109201 - in projects/metadata/ejb/trunk/src: test/java/org/jboss/metadata/ejb/test/jbmeta307 and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Nov 8 13:48:49 EST 2010


Author: wolfc
Date: 2010-11-08 13:48:48 -0500 (Mon, 08 Nov 2010)
New Revision: 109201

Added:
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/SessionSynchronizationProcessor.java
   projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/jbmeta307/SyncedBean.java
Modified:
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/StatefulProcessor.java
   projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/jbmeta307/unit/SessionSynchronizationTestCase.java
Log:
JBMETA-307: added session synchronization annotation processing

Added: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/SessionSynchronizationProcessor.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/SessionSynchronizationProcessor.java	                        (rev 0)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/SessionSynchronizationProcessor.java	2010-11-08 18:48:48 UTC (rev 109201)
@@ -0,0 +1,104 @@
+/*
+ * 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.annotation.creator.ejb.jboss;
+
+import org.jboss.metadata.annotation.creator.AbstractFinderUser;
+import org.jboss.metadata.annotation.creator.Processor;
+import org.jboss.metadata.annotation.finder.AnnotationFinder;
+import org.jboss.metadata.ejb.jboss.JBossSessionBean31MetaData;
+import org.jboss.metadata.ejb.spec.MethodParametersMetaData;
+import org.jboss.metadata.ejb.spec.NamedMethodMetaData;
+
+import javax.ejb.AfterBegin;
+import javax.ejb.AfterCompletion;
+import javax.ejb.BeforeCompletion;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.Collection;
+
+/**
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ */
+public class SessionSynchronizationProcessor extends AbstractFinderUser
+   implements Processor<JBossSessionBean31MetaData, Method>
+{
+   private static Collection<Class<? extends Annotation>> ANNOTATION_TYPES = Arrays.asList(AfterBegin.class, AfterCompletion.class, BeforeCompletion.class);
+   
+   public SessionSynchronizationProcessor(AnnotationFinder<AnnotatedElement> finder)
+   {
+      super(finder);
+   }
+
+   @Override
+   public void process(JBossSessionBean31MetaData metaData, Method method)
+   {
+      AfterBegin afterBegin = finder.getAnnotation(method, AfterBegin.class);
+      if(afterBegin != null)
+      {
+         if(method.getParameterTypes().length != 0)
+            throw new IllegalArgumentException("EJB 3.1 FR 4.9.4 The @AfterBegin method " + method + " must take 0 arguments on " + metaData);
+         metaData.setAfterBeginMethod(method(method));
+      }
+
+      AfterCompletion afterCompletion = finder.getAnnotation(method, AfterCompletion.class);
+      if(afterCompletion != null)
+      {
+         if(method.getParameterTypes().length != 1)
+            throw new IllegalArgumentException("EJB 3.1 FR 4.9.4 The @AfterCompletion method " + method + " must take a single argument (of type boolean) on " + metaData);
+         if(!method.getParameterTypes()[0].equals(Boolean.TYPE))
+            throw new IllegalArgumentException("EJB 3.1 FR 4.9.4 The @AfterCompletion method " + method + " must take a single argument of type boolean on " + metaData);
+         metaData.setAfterCompletionMethod(method(method));
+      }
+
+      BeforeCompletion beforeCompletion = finder.getAnnotation(method, BeforeCompletion.class);
+      if(beforeCompletion != null)
+      {
+         if(method.getParameterTypes().length != 0)
+            throw new IllegalArgumentException("EJB 3.1 FR 4.9.4 The @BeforeCompletion method " + method + " must take 0 arguments on " + metaData);
+         metaData.setBeforeCompletionMethod(method(method));
+      }
+   }
+
+   @Override
+   public Collection<Class<? extends Annotation>> getAnnotationTypes()
+   {
+      return ANNOTATION_TYPES;
+   }
+
+   private static NamedMethodMetaData method(Method method)
+   {
+      NamedMethodMetaData metaData = new NamedMethodMetaData();
+      metaData.setMethodName(method.getName());
+      if(method.getParameterTypes().length > 0)
+      {
+         MethodParametersMetaData methodParams = new MethodParametersMetaData();
+         for(Class<?> parameterType : method.getParameterTypes())
+         {
+            methodParams.add(parameterType.getName());
+         }
+         metaData.setMethodParams(methodParams);
+      }
+      return metaData;
+   }
+}

Modified: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/StatefulProcessor.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/StatefulProcessor.java	2010-11-08 18:16:05 UTC (rev 109200)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/StatefulProcessor.java	2010-11-08 18:48:48 UTC (rev 109201)
@@ -21,18 +21,17 @@
  */
 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.Stateful;
-
 import org.jboss.metadata.annotation.creator.ProcessorUtils;
 import org.jboss.metadata.annotation.finder.AnnotationFinder;
 import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
 import org.jboss.metadata.ejb.spec.SessionType;
 
+import javax.ejb.Stateful;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+import java.util.Collection;
 
+
 /**
  * A StatefulProcessor.
  * 
@@ -53,6 +52,7 @@
       addMethodProcessor(new RemoveProcessor(finder));
       addMethodProcessor(new PostActivateMethodProcessor(finder));
       addMethodProcessor(new PrePassivateMethodProcessor(finder));
+      addMethodProcessor(new SessionSynchronizationProcessor(finder));
       
       // concurrency management annotation is applicable for stateful bean
       addTypeProcessor(new ConcurrencyManagementProcessor(finder));

Added: projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/jbmeta307/SyncedBean.java
===================================================================
--- projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/jbmeta307/SyncedBean.java	                        (rev 0)
+++ projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/jbmeta307/SyncedBean.java	2010-11-08 18:48:48 UTC (rev 109201)
@@ -0,0 +1,52 @@
+/*
+ * 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;
+
+import javax.ejb.AfterBegin;
+import javax.ejb.AfterCompletion;
+import javax.ejb.BeforeCompletion;
+import javax.ejb.Stateful;
+
+/**
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ */
+ at Stateful
+public class SyncedBean
+{
+   @AfterBegin
+   public void afterBegin()
+   {
+
+   }
+
+   @AfterCompletion
+   public void afterCompletion(boolean status)
+   {
+
+   }
+
+   @BeforeCompletion
+   public void beforeCompletion()
+   {
+      
+   }
+}

Modified: 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	2010-11-08 18:16:05 UTC (rev 109200)
+++ projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/jbmeta307/unit/SessionSynchronizationTestCase.java	2010-11-08 18:48:48 UTC (rev 109201)
@@ -21,13 +21,21 @@
  */
 package org.jboss.metadata.ejb.test.jbmeta307.unit;
 
+import junit.framework.Assert;
+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.JBoss51MetaData;
 import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeansMetaData;
+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.NamedMethodMetaData;
 import org.jboss.metadata.ejb.spec.SessionBean31MetaData;
+import org.jboss.metadata.ejb.test.jbmeta307.SyncedBean;
+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;
@@ -36,7 +44,9 @@
 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.assertEquals;
 import static org.junit.Assert.assertNotNull;
@@ -65,6 +75,24 @@
    }
 
    @Test
+   @ScanPackage("org.jboss.metadata.ejb.test.jbmeta307")
+   public void testAnnotations()
+   {
+      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 bean was null", metaData);
+      
+      JBossSessionBean31MetaData bean = (JBossSessionBean31MetaData) metaData.getEnterpriseBean(SyncedBean.class.getSimpleName());
+      Assert.assertNotNull("Session bean metadata was null", bean);
+
+      assertEquals("afterBegin", bean.getAfterBeginMethod().getMethodName());
+      assertEquals("afterCompletion", bean.getAfterCompletionMethod().getMethodName());
+      assertEquals("beforeCompletion", bean.getBeforeCompletionMethod().getMethodName());
+   }
+   
+   @Test
    public void testMerge() throws Exception
    {
       EjbJarMetaData ejb31 = unmarshal(EjbJarMetaData.class, "/org/jboss/metadata/ejb/test/jbmeta307/ejb-jar.xml");



More information about the jboss-cvs-commits mailing list