[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