[jboss-cvs] JBossAS SVN: r80188 - in projects/metadata/trunk/src: main/java/org/jboss/metadata/ejb/jboss and 6 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Oct 29 08:37:49 EDT 2008


Author: emuckenhuber
Date: 2008-10-29 08:37:49 -0400 (Wed, 29 Oct 2008)
New Revision: 80188

Added:
   projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/LocalBindingMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/validation/validator/ejb/jboss/LocalBindingWithNoLocalInterfaceValidator.java
Modified:
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/LocalBindingProcessor.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/RemoteBindingProcessor.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossSessionBeanMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/validation/chain/ejb/jboss/JBossMetaDataValidatorChain.java
   projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/ejb3/JBossAnnotationEjb3UnitTestCase.java
   projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/ejb3/ext/api/JBossExtApiAnnotationTestCase.java
   projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/jbmeta99/PostXmlProcessingUnitTestCase.java
   projects/metadata/trunk/src/test/java/org/jboss/test/metadata/jbmeta117/unit/BindingsWithNoAssociatedBusinessInterfaceTestCase.java
Log:
[JBMETA-119] add localBinding metadata

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/LocalBindingProcessor.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/LocalBindingProcessor.java	2008-10-29 12:24:07 UTC (rev 80187)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/LocalBindingProcessor.java	2008-10-29 12:37:49 UTC (rev 80188)
@@ -23,6 +23,7 @@
 
 import java.lang.annotation.Annotation;
 import java.lang.reflect.AnnotatedElement;
+import java.util.ArrayList;
 import java.util.Collection;
 
 import org.jboss.ejb3.annotation.LocalBinding;
@@ -31,8 +32,11 @@
 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.jboss.LocalBindingMetaData;
 
 /**
+ * The @LocalBinding processor.
+ * 
  * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
  * @version $Revision$
  */
@@ -51,9 +55,29 @@
       LocalBinding annotation = finder.getAnnotation(type, LocalBinding.class);
       if(annotation == null)
          return;
+      
+      process(metaData, type, annotation);
+   }
+   
+   protected void process(JBossSessionBeanMetaData metaData, Class<?> type, LocalBinding annotation)
+   {
+      if(metaData.getLocalBindings() == null)
+         metaData.setLocalBindings(new ArrayList<LocalBindingMetaData>());
+         
+      LocalBindingMetaData localBinding = createLocalBindingMetaData(type, annotation);
+      if(localBinding != null)
+         metaData.getLocalBindings().add(localBinding);
+   }
+   
+   protected LocalBindingMetaData createLocalBindingMetaData(Class<?> type, LocalBinding annotation)
+   {
+      if(annotation.jndiBinding().length() == 0)
+         return null;
 
-      if(annotation.jndiBinding() != null && annotation.jndiBinding().length() > 1)
-         metaData.setLocalJndiName(annotation.jndiBinding());
+      LocalBindingMetaData metaData = new LocalBindingMetaData();
+      // set JndiName
+      metaData.setJndiName(annotation.jndiBinding());
+      return metaData;
    }
 
    public Collection<Class<? extends Annotation>> getAnnotationTypes()

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/RemoteBindingProcessor.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/RemoteBindingProcessor.java	2008-10-29 12:24:07 UTC (rev 80187)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/RemoteBindingProcessor.java	2008-10-29 12:37:49 UTC (rev 80188)
@@ -36,6 +36,8 @@
 import org.jboss.metadata.ejb.jboss.RemoteBindingMetaData;
 
 /**
+ * The @RemoteBinding processor.
+ * 
  * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
  * @version $Revision$
  */

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossSessionBeanMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossSessionBeanMetaData.java	2008-10-29 12:24:07 UTC (rev 80187)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossSessionBeanMetaData.java	2008-10-29 12:37:49 UTC (rev 80188)
@@ -111,6 +111,9 @@
    /** Whether to call by value */
    private boolean callByValue;
  
+   /** The local bindings */
+   private List<LocalBindingMetaData> localBindings;
+   
    /** The remote bindings */
    private List<RemoteBindingMetaData> remoteBindings;
    
@@ -814,6 +817,27 @@
    {
       this.portComponent = portComponent;
    }
+   
+   /**
+    * Get the local bindings
+    * 
+    * @return the localBindings
+    */
+   public List<LocalBindingMetaData> getLocalBindings()
+   {
+      return localBindings;
+   }
+   
+   /**
+    * Set the local bindings.
+    * 
+    * @param the localBindings
+    */
+   // @XmlElement(name = "local-binding", required = false)
+   public void setLocalBindings(List<LocalBindingMetaData> localBindings)
+   {
+      this.localBindings = localBindings;
+   }
 
    /**
     * Get the remoteBinding.
@@ -1048,6 +1072,11 @@
          securityRoleRefs = joverride.getSecurityRoleRefs();
       else if(soriginal != null && soriginal.getSecurityRoleRefs() != null)
          securityRoleRefs = soriginal.getSecurityRoleRefs();
+      // localBindings
+      if(joverride != null && joverride.getLocalBindings() != null)
+         localBindings = joverride.getLocalBindings();
+      else if(soriginal != null && soriginal.getLocalBindings() != null)
+         localBindings = soriginal.getLocalBindings();
       // remoteBindings
       if(joverride != null && joverride.getRemoteBindings() != null)
          remoteBindings = joverride.getRemoteBindings();

Added: projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/LocalBindingMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/LocalBindingMetaData.java	                        (rev 0)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/LocalBindingMetaData.java	2008-10-29 12:37:49 UTC (rev 80188)
@@ -0,0 +1,65 @@
+/*
+ * 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.metadata.ejb.jboss;
+
+import org.jboss.metadata.javaee.support.IdMetaDataImplWithDescriptions;
+
+/**
+ * LocalBindingMetaData
+ * 
+ * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
+ * @version $Revision$
+ */
+//@XmlType(name="local-bindingType")
+public class LocalBindingMetaData extends IdMetaDataImplWithDescriptions
+{
+
+   /** The serialVersionUID */
+   private static final long serialVersionUID = 8742751094401901120L;
+
+   /** The jndi name */
+   private String jndiName;
+
+   /**
+    * Get the jndiName.
+    * 
+    * @return the jndiName.
+    */
+   public String getJndiName()
+   {
+      return jndiName;
+   }
+
+   /**
+    * Set the jndiName.
+    * 
+    * @param jndiName the jndiName.
+    * @throws IllegalArgumentException for a null jndiName
+    */
+   public void setJndiName(String jndiName)
+   {
+      if (jndiName == null)
+         throw new IllegalArgumentException("Null jndiName");
+      this.jndiName = jndiName;
+   }
+
+}

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/validation/chain/ejb/jboss/JBossMetaDataValidatorChain.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/validation/chain/ejb/jboss/JBossMetaDataValidatorChain.java	2008-10-29 12:24:07 UTC (rev 80187)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/validation/chain/ejb/jboss/JBossMetaDataValidatorChain.java	2008-10-29 12:37:49 UTC (rev 80188)
@@ -33,6 +33,7 @@
 import org.jboss.metadata.validation.chain.ValidatorChainException;
 import org.jboss.metadata.validation.validator.Validator;
 import org.jboss.metadata.validation.validator.ejb.jboss.CompleteEjb2xViewValidator;
+import org.jboss.metadata.validation.validator.ejb.jboss.LocalBindingWithNoLocalInterfaceValidator;
 import org.jboss.metadata.validation.validator.ejb.jboss.RemoteBindingsWithNoRemoteBusinessInterfaceValidator;
 
 /**
@@ -173,6 +174,8 @@
        * Add all default validators
        */
 
+      // JBMETA-117 No @LocalBindings if there's no local business interface
+      defaultValidators.add(LocalBindingWithNoLocalInterfaceValidator.INSTANCE);
       // JBMETA-117 No @RemoteBindings if there's no remote business interface
       defaultValidators.add(RemoteBindingsWithNoRemoteBusinessInterfaceValidator.INSTANCE);
       // JBMETA-130 Complete EJB2.x View

Added: projects/metadata/trunk/src/main/java/org/jboss/metadata/validation/validator/ejb/jboss/LocalBindingWithNoLocalInterfaceValidator.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/validation/validator/ejb/jboss/LocalBindingWithNoLocalInterfaceValidator.java	                        (rev 0)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/validation/validator/ejb/jboss/LocalBindingWithNoLocalInterfaceValidator.java	2008-10-29 12:37:49 UTC (rev 80188)
@@ -0,0 +1,58 @@
+/*
+ * 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.metadata.validation.validator.ejb.jboss;
+
+import org.jboss.ejb3.annotation.LocalBinding;
+import org.jboss.metadata.common.spi.ErrorCodes;
+import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
+import org.jboss.metadata.validation.ValidationException;
+import org.jboss.metadata.validation.validator.ejb.JBossEjb3SessionBeanValidatorBase;
+
+/**
+ * Validate if the Bean has local-binding, but no local business interfaces [JBMETA-117].
+ * 
+ * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
+ * @version $Revision$
+ */
+public class LocalBindingWithNoLocalInterfaceValidator extends JBossEjb3SessionBeanValidatorBase
+{
+   /** The error code */
+   String errorCode = ErrorCodes.ERROR_CODE_JBMETA117;
+   
+   /** The instance. */
+   public static final LocalBindingWithNoLocalInterfaceValidator INSTANCE = new LocalBindingWithNoLocalInterfaceValidator(); 
+   
+   @Override
+   protected void validate(JBossSessionBeanMetaData smd) throws ValidationException
+   {
+      // If this bean has a locaBinding but no local business interfaces defined
+      if(smd.getLocalBindings() != null && ! smd.getLocalBindings().isEmpty())
+      {
+         if(smd.getBusinessLocals() == null || smd.getBusinessLocals().isEmpty())
+         {
+            // Fail 
+            throw new ValidationException("A @" + LocalBinding.class.getSimpleName() + " was defined on EJB "
+                  + smd.getName() + ", but this bean has no local business interfaces defined. [" + errorCode + "]");
+         }
+      }
+   }
+}

Modified: projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/ejb3/JBossAnnotationEjb3UnitTestCase.java
===================================================================
--- projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/ejb3/JBossAnnotationEjb3UnitTestCase.java	2008-10-29 12:24:07 UTC (rev 80187)
+++ projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/ejb3/JBossAnnotationEjb3UnitTestCase.java	2008-10-29 12:37:49 UTC (rev 80188)
@@ -59,6 +59,7 @@
 import org.jboss.metadata.ejb.jboss.JBossMetaData;
 import org.jboss.metadata.ejb.jboss.JBossServiceBeanMetaData;
 import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
+import org.jboss.metadata.ejb.jboss.LocalBindingMetaData;
 import org.jboss.metadata.ejb.jboss.ProducerMetaData;
 import org.jboss.metadata.ejb.jboss.RemoteBindingMetaData;
 import org.jboss.metadata.ejb.spec.ActivationConfigMetaData;
@@ -782,7 +783,9 @@
       assertEquals(Timer.class.getName(), parameters.get(0));
       
       // @LocalBinding
-      assertEquals("LocalJndiBinding", bean.getLocalJndiName());
+      assertNotNull(bean.getLocalBindings());
+      LocalBindingMetaData localBinding = bean.getLocalBindings().get(0);
+      assertEquals("LocalJndiBinding", localBinding.getJndiName());
       
       // @RemoteBinding
       assertNotNull(bean.getRemoteBindings());

Modified: projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/ejb3/ext/api/JBossExtApiAnnotationTestCase.java
===================================================================
--- projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/ejb3/ext/api/JBossExtApiAnnotationTestCase.java	2008-10-29 12:24:07 UTC (rev 80187)
+++ projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/ejb3/ext/api/JBossExtApiAnnotationTestCase.java	2008-10-29 12:37:49 UTC (rev 80188)
@@ -35,6 +35,7 @@
 import org.jboss.metadata.ejb.jboss.JBossConsumerBeanMetaData;
 import org.jboss.metadata.ejb.jboss.JBossServiceBeanMetaData;
 import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
+import org.jboss.metadata.ejb.jboss.LocalBindingMetaData;
 import org.jboss.metadata.ejb.jboss.PoolConfigMetaData;
 import org.jboss.metadata.ejb.jboss.ProducerMetaData;
 import org.jboss.metadata.ejb.jboss.RemoteBindingMetaData;
@@ -93,8 +94,12 @@
       assertNotNull(remoteBinding);
       assertEquals("testServiceJndiRemoteBinding", remoteBinding.getJndiName());
       
+      // @LocalBinding
+      assertNotNull(bean.getLocalBindings());
+      LocalBindingMetaData localBinding = bean.getLocalBindings().get(0);
+      assertEquals("localBinding", localBinding.getJndiName());
+      
       assertEquals("localHomeBinding", bean.getLocalHomeJndiName());
-      assertEquals("localBinding", bean.getLocalJndiName());
       assertEquals("remoteHomeBinding", bean.getHomeJndiName());
       
       // @CacheConfig
@@ -162,15 +167,19 @@
       // @SerializedConcurrentAccess
       assertEquals(Boolean.TRUE, bean.isConcurrent());
       
+      // @LocalBinding
+      assertNotNull(bean.getLocalBindings());
+      LocalBindingMetaData localBinding = bean.getLocalBindings().get(0);
+      assertEquals("localBinding", localBinding.getJndiName());
+      
       //@RemoteBindings
       assertNotNull(bean.getRemoteBindings());
       RemoteBindingMetaData remoteBinding = bean.getRemoteBindings().get(0);
       assertNotNull(remoteBinding);
       assertEquals("testStatefulJndiRemoteBinding", remoteBinding.getJndiName());
       
+      assertEquals("remoteHomeBinding", bean.getHomeJndiName());
       assertEquals("localHomeBinding", bean.getLocalHomeJndiName());
-      assertEquals("localBinding", bean.getLocalJndiName());
-      assertEquals("remoteHomeBinding", bean.getHomeJndiName());
    }
    
    private void assertOtherServiceBean(IEnterpriseBeanMetaData enterpriseBean)

Modified: projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/jbmeta99/PostXmlProcessingUnitTestCase.java
===================================================================
--- projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/jbmeta99/PostXmlProcessingUnitTestCase.java	2008-10-29 12:24:07 UTC (rev 80187)
+++ projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/jbmeta99/PostXmlProcessingUnitTestCase.java	2008-10-29 12:37:49 UTC (rev 80188)
@@ -42,6 +42,7 @@
 import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
 import org.jboss.metadata.ejb.jboss.JBossMessageDrivenBeanMetaData;
 import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
+import org.jboss.metadata.ejb.jboss.LocalBindingMetaData;
 import org.jboss.metadata.ejb.jboss.RemoteBindingMetaData;
 import org.jboss.metadata.ejb.spec.ActivationConfigMetaData;
 import org.jboss.metadata.ejb.spec.ActivationConfigPropertiesMetaData;
@@ -471,7 +472,9 @@
       assertEquals(Timer.class.getName(), parameters.get(0));
       
       // @LocalBinding
-      assertEquals("LocalJndiBinding", bean.getLocalJndiName());
+      assertNotNull(bean.getLocalBindings());
+      LocalBindingMetaData localBinding = bean.getLocalBindings().get(0);
+      assertEquals("LocalJndiBinding", localBinding.getJndiName());
       
       // @RemoteBinding
       assertNotNull(bean.getRemoteBindings());

Modified: projects/metadata/trunk/src/test/java/org/jboss/test/metadata/jbmeta117/unit/BindingsWithNoAssociatedBusinessInterfaceTestCase.java
===================================================================
--- projects/metadata/trunk/src/test/java/org/jboss/test/metadata/jbmeta117/unit/BindingsWithNoAssociatedBusinessInterfaceTestCase.java	2008-10-29 12:24:07 UTC (rev 80187)
+++ projects/metadata/trunk/src/test/java/org/jboss/test/metadata/jbmeta117/unit/BindingsWithNoAssociatedBusinessInterfaceTestCase.java	2008-10-29 12:37:49 UTC (rev 80188)
@@ -35,6 +35,7 @@
 import org.jboss.metadata.ejb.jboss.JBoss50MetaData;
 import org.jboss.metadata.process.processor.ejb.jboss.JBossMetaDataValidatorChainProcessor;
 import org.jboss.metadata.validation.ValidationException;
+import org.jboss.test.metadata.jbmeta117.TestBeanWithLocalBindingButNoLocalBusinessInterface;
 import org.jboss.test.metadata.jbmeta117.TestBeanWithRemoteBindingButNoRemoteBusinessInterface;
 
 /**
@@ -60,16 +61,14 @@
    // Tests -------------------------------------------------------------||
    // -------------------------------------------------------------------||
 
-   //FIXME
-   // We need a Validator for @LocalBinding w/ no local business interfaces
-   //   /**
-   //    * Tests that an EJB declaring a @LocalBinding with no
-   //    * local business interface fails creation
-   //    */
-   //   public void testLocalBindingNoLocalBusinessInterface() throws Throwable
-   //   {
-   //      this.testFailsCreation(TestBeanWithLocalBindingButNoLocalBusinessInterface.class);
-   //   }
+   /**
+    * Tests that an EJB declaring a @LocalBinding with no
+    * local business interface fails creation
+    */
+   public void testLocalBindingNoLocalBusinessInterface() throws Throwable
+   {
+      this.testFailsCreation(TestBeanWithLocalBindingButNoLocalBusinessInterface.class);
+   }
 
    /**
     * Tests that an EJB declaring a @RemoteBinding with no




More information about the jboss-cvs-commits mailing list