[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