[jboss-cvs] JBossAS SVN: r76646 - in projects/ejb3/trunk/metadata/src: test/java/org/jboss/ejb3 and 4 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Aug 5 06:03:07 EDT 2008
Author: wolfc
Date: 2008-08-05 06:03:06 -0400 (Tue, 05 Aug 2008)
New Revision: 76646
Added:
projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/metadata/
projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/metadata/test/
projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/metadata/test/metadatacomplete/
projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/metadata/test/metadatacomplete/TwoLifecycleMethodsBean.java
projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/metadata/test/metadatacomplete/unit/
projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/metadata/test/metadatacomplete/unit/MetadataCompleteTestCase.java
Modified:
projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/annotation/AnnotationRepositoryToMetaData.java
Log:
EJBTHREE-1448: do not install a class meta data retrieval if metadata complete is set
Modified: projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/annotation/AnnotationRepositoryToMetaData.java
===================================================================
--- projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/annotation/AnnotationRepositoryToMetaData.java 2008-08-05 10:01:49 UTC (rev 76645)
+++ projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/annotation/AnnotationRepositoryToMetaData.java 2008-08-05 10:03:06 UTC (rev 76646)
@@ -93,13 +93,18 @@
this.classLoader = classLoader;
- MetaDataRetrieval classMetaData = ClassMetaDataRetrievalFactory.INSTANCE.getMetaDataRetrieval(new Scope(CommonLevels.CLASS, beanClass));
ScopeKey instanceScope = new ScopeKey(CommonLevels.INSTANCE, canonicalObjectName);
mutableMetaData = new MemoryMetaDataLoader(instanceScope);
//MetaDataRetrieval dynamicXml = new EJBMetaDataLoader(instanceScope, beanMetaData, classLoader);
this.bridgedMetaDataLoader = new BridgedMetaDataLoader<JBossEnterpriseBeanMetaData>(instanceScope, beanMetaData, classLoader);
- MetaDataContext classContext = new AbstractMetaDataContext(classMetaData);
+ MetaDataContext classContext = null;
+ if(beanMetaData == null || !beanMetaData.getEjbJarMetaData().isMetadataComplete())
+ {
+ // Create a fallback parent meta data context which targets the annotations
+ MetaDataRetrieval classMetaData = ClassMetaDataRetrievalFactory.INSTANCE.getMetaDataRetrieval(new Scope(CommonLevels.CLASS, beanClass));
+ classContext = new AbstractMetaDataContext(classMetaData);
+ }
MetaDataRetrieval[] instance = { bridgedMetaDataLoader, mutableMetaData };
MetaDataContext instanceContext = new AbstractMetaDataContext(classContext, Arrays.asList(instance));
metaData = new MetaDataRetrievalToMetaDataBridge(instanceContext);
Added: projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/metadata/test/metadatacomplete/TwoLifecycleMethodsBean.java
===================================================================
--- projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/metadata/test/metadatacomplete/TwoLifecycleMethodsBean.java (rev 0)
+++ projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/metadata/test/metadatacomplete/TwoLifecycleMethodsBean.java 2008-08-05 10:03:06 UTC (rev 76646)
@@ -0,0 +1,43 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, 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.ejb3.metadata.test.metadatacomplete;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * By setting metadata complete, the annotated lifecycle callback
+ * should be ignored.
+ *
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class TwoLifecycleMethodsBean
+{
+ @PostConstruct
+ public void annotatedPostConstruct()
+ {
+ }
+
+ public void otherPostConstruct()
+ {
+ }
+}
Added: projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/metadata/test/metadatacomplete/unit/MetadataCompleteTestCase.java
===================================================================
--- projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/metadata/test/metadatacomplete/unit/MetadataCompleteTestCase.java (rev 0)
+++ projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/metadata/test/metadatacomplete/unit/MetadataCompleteTestCase.java 2008-08-05 10:03:06 UTC (rev 76646)
@@ -0,0 +1,118 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, 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.ejb3.metadata.test.metadatacomplete.unit;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+
+import org.jboss.ejb3.metadata.MetaDataBridge;
+import org.jboss.ejb3.metadata.annotation.AnnotationRepositoryToMetaData;
+import org.jboss.ejb3.metadata.test.metadatacomplete.TwoLifecycleMethodsBean;
+import org.jboss.ejb3.test.metadata.interceptor.BeanInterceptorMetaDataBridge;
+import org.jboss.ejb3.test.metadata.interceptor.InterceptorComponentMetaDataLoaderFactory;
+import org.jboss.ejb3.test.metadata.interceptor.InterceptorMetaDataBridge;
+import org.jboss.metadata.ejb.jboss.JBoss50MetaData;
+import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
+import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeansMetaData;
+import org.jboss.metadata.ejb.jboss.JBossEnvironmentRefsGroupMetaData;
+import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
+import org.jboss.metadata.ejb.spec.InterceptorMetaData;
+import org.jboss.metadata.javaee.spec.LifecycleCallbackMetaData;
+import org.jboss.metadata.javaee.spec.LifecycleCallbacksMetaData;
+import org.junit.Test;
+
+/**
+ * Test to make sure that setting metadata complete to true in the descriptor
+ * will make the annotation repository ignore real annotations.
+ *
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class MetadataCompleteTestCase
+{
+ @Test
+ public void testAnnotations() throws Exception
+ {
+ JBossEnterpriseBeanMetaData beanMetaData = null;
+
+ // Bootstrap meta data bridge
+ String canonicalObjectName = "Not important";
+ ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+ AnnotationRepositoryToMetaData repository = new AnnotationRepositoryToMetaData(TwoLifecycleMethodsBean.class, beanMetaData, canonicalObjectName, classLoader);
+ List<MetaDataBridge<InterceptorMetaData>> interceptorBridges = new ArrayList<MetaDataBridge<InterceptorMetaData>>();
+ interceptorBridges.add(new InterceptorMetaDataBridge());
+ repository.addComponentMetaDataLoaderFactory(new InterceptorComponentMetaDataLoaderFactory(interceptorBridges));
+ repository.addMetaDataBridge(new BeanInterceptorMetaDataBridge());
+
+ Method annotatedPostConstruct = TwoLifecycleMethodsBean.class.getMethod("annotatedPostConstruct");
+ assertTrue("Failed to find the annotated post construct", repository.hasAnnotation(annotatedPostConstruct, PostConstruct.class));
+
+ Method otherPostConstruct = TwoLifecycleMethodsBean.class.getMethod("otherPostConstruct");
+ assertFalse(repository.hasAnnotation(otherPostConstruct, PostConstruct.class));
+ }
+
+ @Test
+ public void testMetadataComplete() throws Exception
+ {
+ // Setup meta data
+ LifecycleCallbackMetaData postConstruct = new LifecycleCallbackMetaData();
+ postConstruct.setMethodName("otherPostConstruct");
+
+ LifecycleCallbacksMetaData postConstructs = new LifecycleCallbacksMetaData();
+ postConstructs.add(postConstruct);
+
+ JBossEnvironmentRefsGroupMetaData env = new JBossEnvironmentRefsGroupMetaData();
+ env.setPostConstructs(postConstructs);
+
+ JBossSessionBeanMetaData beanMetaData = new JBossSessionBeanMetaData();
+ beanMetaData.setEjbName("TwoLifecycleMethodsBean");
+ beanMetaData.setJndiEnvironmentRefsGroup(env);
+
+ JBossEnterpriseBeansMetaData enterpriseBeans = new JBossEnterpriseBeansMetaData();
+ enterpriseBeans.add(beanMetaData);
+
+ JBoss50MetaData metaData = new JBoss50MetaData();
+ metaData.setMetadataComplete(true);
+ metaData.setEnterpriseBeans(enterpriseBeans);
+
+ // Bootstrap meta data bridge
+ String canonicalObjectName = "Not important";
+ ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+ AnnotationRepositoryToMetaData repository = new AnnotationRepositoryToMetaData(TwoLifecycleMethodsBean.class, beanMetaData, canonicalObjectName, classLoader);
+ List<MetaDataBridge<InterceptorMetaData>> interceptorBridges = new ArrayList<MetaDataBridge<InterceptorMetaData>>();
+ interceptorBridges.add(new InterceptorMetaDataBridge());
+ repository.addComponentMetaDataLoaderFactory(new InterceptorComponentMetaDataLoaderFactory(interceptorBridges));
+ repository.addMetaDataBridge(new BeanInterceptorMetaDataBridge());
+
+ Method annotatedPostConstruct = TwoLifecycleMethodsBean.class.getMethod("annotatedPostConstruct");
+ assertFalse("Found annotated post construct, but metadata complete is true", repository.hasAnnotation(annotatedPostConstruct, PostConstruct.class));
+
+ Method otherPostConstruct = TwoLifecycleMethodsBean.class.getMethod("otherPostConstruct");
+ assertTrue(repository.hasAnnotation(otherPostConstruct, PostConstruct.class));
+ }
+}
More information about the jboss-cvs-commits
mailing list