[jboss-cvs] JBossAS SVN: r97601 - in projects/ejb3/trunk/deployers: src/main/java/org/jboss/ejb3/deployers and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Dec 9 06:19:14 EST 2009


Author: jaikiran
Date: 2009-12-09 06:19:14 -0500 (Wed, 09 Dec 2009)
New Revision: 97601

Added:
   projects/ejb3/trunk/deployers/src/main/java/org/jboss/ejb3/deployers/metadata/
   projects/ejb3/trunk/deployers/src/main/java/org/jboss/ejb3/deployers/metadata/processor/
   projects/ejb3/trunk/deployers/src/main/java/org/jboss/ejb3/deployers/metadata/processor/ClusterConfigDefaultValueProcessorFactory.java
   projects/ejb3/trunk/deployers/src/main/java/org/jboss/ejb3/deployers/metadata/processor/JBossMetaDataProcessorFactory.java
   projects/ejb3/trunk/deployers/src/main/java/org/jboss/ejb3/deployers/metadata/processor/JBossMetaDataValidatorChainProcessorFactory.java
   projects/ejb3/trunk/deployers/src/main/java/org/jboss/ejb3/deployers/metadata/processor/SetDefaultLocalBusinessInterfaceProcessorFactory.java
   projects/ejb3/trunk/deployers/src/main/java/org/jboss/ejb3/deployers/metadata/processor/SetExplicitLocalJNDINameProcessorFactory.java
Modified:
   projects/ejb3/trunk/deployers/pom.xml
   projects/ejb3/trunk/deployers/src/main/java/org/jboss/ejb3/deployers/Ejb3MetadataProcessingDeployer.java
Log:
EJBTHREE-1973 Added better support for configuring processors and validator chain in Ejb3MetadataProcessingDeployer

Modified: projects/ejb3/trunk/deployers/pom.xml
===================================================================
--- projects/ejb3/trunk/deployers/pom.xml	2009-12-09 09:45:55 UTC (rev 97600)
+++ projects/ejb3/trunk/deployers/pom.xml	2009-12-09 11:19:14 UTC (rev 97601)
@@ -14,7 +14,7 @@
   <groupId>org.jboss.ejb3</groupId>
   <artifactId>jboss-ejb3-deployers</artifactId>
   <name>JBoss EJB3 Deployers</name>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.1.0-SNAPSHOT</version>
   <description>
     Deployers conforming to the MC Deployers SPI for EJB3
   </description>

Modified: projects/ejb3/trunk/deployers/src/main/java/org/jboss/ejb3/deployers/Ejb3MetadataProcessingDeployer.java
===================================================================
--- projects/ejb3/trunk/deployers/src/main/java/org/jboss/ejb3/deployers/Ejb3MetadataProcessingDeployer.java	2009-12-09 09:45:55 UTC (rev 97600)
+++ projects/ejb3/trunk/deployers/src/main/java/org/jboss/ejb3/deployers/Ejb3MetadataProcessingDeployer.java	2009-12-09 11:19:14 UTC (rev 97601)
@@ -21,22 +21,28 @@
  */
 package org.jboss.ejb3.deployers;
 
+import java.util.HashSet;
+import java.util.Set;
+
 import org.jboss.deployers.spi.DeploymentException;
 import org.jboss.deployers.spi.deployer.DeploymentStages;
 import org.jboss.deployers.spi.deployer.helpers.AbstractDeployer;
 import org.jboss.deployers.structure.spi.DeploymentUnit;
 import org.jboss.ejb3.common.deployers.spi.AttachmentNames;
-import org.jboss.ejb3.common.metadata.MetadataUtil;
+import org.jboss.ejb3.deployers.metadata.processor.JBossMetaDataProcessorFactory;
 import org.jboss.logging.Logger;
 import org.jboss.metadata.ejb.jboss.JBossMetaData;
 import org.jboss.metadata.process.chain.ProcessorChain;
+import org.jboss.metadata.process.chain.ejb.jboss.JBossMetaDataProcessorChain;
+import org.jboss.metadata.process.processor.JBossMetaDataProcessor;
+import org.jboss.metadata.validation.chain.ValidatorChain;
 
 /**
  * Ejb3MetadataProcessingDeployer
- * 
+ *
  * Runs post-merge processing on EJB3 Metadata
  * to apply rules, perform validation, etc
- * 
+ *
  * JBMETA-132
  *
  * @author <a href="mailto:andrew.rubinger at jboss.org">ALR</a>
@@ -60,6 +66,21 @@
     * Deployer Output, the Processed metadata
     */
    public static final String OUTPUT = AttachmentNames.PROCESSED_METADATA;
+   
+   
+   /**
+    *  {@link JBossMetaDataProcessorFactory} processor factories which will be used
+    *  to create processors {@link JBossMetaDataProcessor} to process the merged {@link JBossMetaData}
+    *  
+    */
+   private Set<JBossMetaDataProcessorFactory<JBossMetaData>> processorFactories = new HashSet<JBossMetaDataProcessorFactory<JBossMetaData>>();
+   
+   /**
+    * A metadata validator chain which will be used to validate the merged metadata,
+    * after processing the metadata through all available {@link JBossMetaDataProcessor}s
+    * 
+    */
+   private ValidatorChain<JBossMetaData> validatorChain;
 
    // ------------------------------------------------------------------------------||
    // Constructor ------------------------------------------------------------------||
@@ -86,9 +107,9 @@
 
    /**
     * For DeploymentUnits with a merged metadata attachment representing
-    * EJB3 beans, will run a standard ProcessorChain and output the 
-    * processed result
-    * 
+    * EJB3 beans, will run a standard ProcessorChain. The processed
+    * metadata is then run through a validator chain
+    *
     * @see org.jboss.deployers.spi.deployer.Deployer#deploy(org.jboss.deployers.structure.spi.DeploymentUnit)
     */
    public void deploy(DeploymentUnit du) throws DeploymentException
@@ -96,6 +117,7 @@
       // Obtain the Merged Metadata
       JBossMetaData md = du.getAttachment(INPUT, JBossMetaData.class);
 
+      
       // If metadata's not present as an attachment, return
       if (md == null)
       {
@@ -108,13 +130,66 @@
          return;
       }
 
-      // Get the Processor Chain
-      ProcessorChain<JBossMetaData> chain = MetadataUtil.getPostMergeMetadataProcessorChain(du.getClassLoader());
-
+      // Create the processor chain 
+      ProcessorChain<JBossMetaData> chain = new JBossMetaDataProcessorChain<JBossMetaData>();
+      for (JBossMetaDataProcessorFactory<JBossMetaData> processorFactory : this.processorFactories)
+      {
+            JBossMetaDataProcessor<JBossMetaData> processor = processorFactory.create(du);
+            chain.addProcessor(processor);
+      }
+      
       // Create new processed metadata
       JBossMetaData processedMetadata = chain.process(md);
+      
+      // now validate the processed metadata
+      if (this.validatorChain != null)
+      {
+         this.validatorChain.validate(processedMetadata);
+      }
 
       // Set the processed metadata as the output
       du.addAttachment(OUTPUT, processedMetadata, JBossMetaData.class);
    }
+
+   /**
+    * Add a processor factory to the set of processor factories which will be
+    * used to process the merged {@link JBossMetaData}
+    * @param processorFactory
+    */
+   public void addProcessorFactory(JBossMetaDataProcessorFactory<JBossMetaData> processorFactory)
+   {
+      this.processorFactories.add(processorFactory);
+   }
+   /**
+    * Removes a processor factory from the set of processor factories which are 
+    * responsible for processing the merged {@link JBossMetaData}
+    * 
+    * @param processorFactory
+    */
+   public void removeProcessorFactory(JBossMetaDataProcessorFactory<JBossMetaData> processorFactory)
+   {
+      this.processorFactories.remove(processorFactory);
+   }
+   
+   /**
+    * Sets the validator chain which will be used to validate the metadata
+    * after running it through the available {@link JBossMetaDataProcessor}s
+    * 
+    * @param validatorChain
+    */
+   public void setValidatorChain(ValidatorChain<JBossMetaData> validatorChain)
+   {
+      this.validatorChain = validatorChain;
+   }
+   
+   /**
+    * Returns the validator chain used to validate the processed metadata
+    * 
+    * @return
+    */
+   public ValidatorChain<JBossMetaData> getValidatorChain()
+   {
+      return this.validatorChain;
+   }
+   
 }

Added: projects/ejb3/trunk/deployers/src/main/java/org/jboss/ejb3/deployers/metadata/processor/ClusterConfigDefaultValueProcessorFactory.java
===================================================================
--- projects/ejb3/trunk/deployers/src/main/java/org/jboss/ejb3/deployers/metadata/processor/ClusterConfigDefaultValueProcessorFactory.java	                        (rev 0)
+++ projects/ejb3/trunk/deployers/src/main/java/org/jboss/ejb3/deployers/metadata/processor/ClusterConfigDefaultValueProcessorFactory.java	2009-12-09 11:19:14 UTC (rev 97601)
@@ -0,0 +1,50 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, 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.ejb3.deployers.metadata.processor;
+
+import org.jboss.deployers.structure.spi.DeploymentUnit;
+import org.jboss.metadata.ejb.jboss.JBossMetaData;
+import org.jboss.metadata.process.processor.JBossMetaDataProcessor;
+import org.jboss.metadata.process.processor.ejb.jboss.ClusterConfigDefaultValueProcessor;
+
+/**
+ * ClusterConfigDefaultValueProcessorFactory
+ *
+ * A {@link JBossMetaDataProcessorFactory} which is responsible for creating
+ * {@link ClusterConfigDefaultValueProcessor} (JBMETA-133, EJBTHREE-1539 Default ClusterConfig)  
+ * 
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public class ClusterConfigDefaultValueProcessorFactory implements JBossMetaDataProcessorFactory<JBossMetaData>
+{
+
+   /**
+    * @see org.jboss.ejb3.deployers.metadata.processor.JBossMetaDataProcessorFactory#create(org.jboss.deployers.structure.spi.DeploymentUnit)
+    */
+   public JBossMetaDataProcessor<JBossMetaData> create(DeploymentUnit deploymentUnit)
+   {
+      // we don't require the deployment unit for anything, so just ignore it.
+      return ClusterConfigDefaultValueProcessor.INSTANCE;
+   }
+
+}

Added: projects/ejb3/trunk/deployers/src/main/java/org/jboss/ejb3/deployers/metadata/processor/JBossMetaDataProcessorFactory.java
===================================================================
--- projects/ejb3/trunk/deployers/src/main/java/org/jboss/ejb3/deployers/metadata/processor/JBossMetaDataProcessorFactory.java	                        (rev 0)
+++ projects/ejb3/trunk/deployers/src/main/java/org/jboss/ejb3/deployers/metadata/processor/JBossMetaDataProcessorFactory.java	2009-12-09 11:19:14 UTC (rev 97601)
@@ -0,0 +1,38 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, 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.ejb3.deployers.metadata.processor;
+
+import org.jboss.deployers.structure.spi.DeploymentUnit;
+import org.jboss.metadata.ejb.jboss.JBossMetaData;
+import org.jboss.metadata.process.processor.JBossMetaDataProcessor;
+
+/**
+ * JBossMetaDataProcessorFactory
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public interface JBossMetaDataProcessorFactory<T extends JBossMetaData>
+{
+
+   JBossMetaDataProcessor<T> create(DeploymentUnit deploymentUnit);
+}

Added: projects/ejb3/trunk/deployers/src/main/java/org/jboss/ejb3/deployers/metadata/processor/JBossMetaDataValidatorChainProcessorFactory.java
===================================================================
--- projects/ejb3/trunk/deployers/src/main/java/org/jboss/ejb3/deployers/metadata/processor/JBossMetaDataValidatorChainProcessorFactory.java	                        (rev 0)
+++ projects/ejb3/trunk/deployers/src/main/java/org/jboss/ejb3/deployers/metadata/processor/JBossMetaDataValidatorChainProcessorFactory.java	2009-12-09 11:19:14 UTC (rev 97601)
@@ -0,0 +1,51 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, 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.ejb3.deployers.metadata.processor;
+
+import org.jboss.deployers.structure.spi.DeploymentUnit;
+import org.jboss.metadata.ejb.jboss.JBossMetaData;
+import org.jboss.metadata.process.processor.JBossMetaDataProcessor;
+import org.jboss.metadata.process.processor.ejb.jboss.JBossMetaDataValidatorChainProcessor;
+
+/**
+ * JBossMetaDataValidatorChainProcessorFactory
+ * 
+ * A {@link JBossMetaDataProcessorFactory} responsible for creating a 
+ * {@link JBossMetaDataValidatorChainProcessor}. 
+ * (JBMETA-118 Validation)
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public class JBossMetaDataValidatorChainProcessorFactory implements JBossMetaDataProcessorFactory<JBossMetaData>
+{
+
+   /**
+    * @see org.jboss.ejb3.deployers.metadata.processor.JBossMetaDataProcessorFactory#create(org.jboss.deployers.structure.spi.DeploymentUnit)
+    */
+   public JBossMetaDataProcessor<JBossMetaData> create(DeploymentUnit deploymentUnit)
+   {
+      // we don't need the deployment unit to create the processor, so just ignore it
+      return JBossMetaDataValidatorChainProcessor.INSTANCE;
+   }
+
+}

Added: projects/ejb3/trunk/deployers/src/main/java/org/jboss/ejb3/deployers/metadata/processor/SetDefaultLocalBusinessInterfaceProcessorFactory.java
===================================================================
--- projects/ejb3/trunk/deployers/src/main/java/org/jboss/ejb3/deployers/metadata/processor/SetDefaultLocalBusinessInterfaceProcessorFactory.java	                        (rev 0)
+++ projects/ejb3/trunk/deployers/src/main/java/org/jboss/ejb3/deployers/metadata/processor/SetDefaultLocalBusinessInterfaceProcessorFactory.java	2009-12-09 11:19:14 UTC (rev 97601)
@@ -0,0 +1,51 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, 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.ejb3.deployers.metadata.processor;
+
+import org.jboss.deployers.structure.spi.DeploymentUnit;
+import org.jboss.metadata.ejb.jboss.JBossMetaData;
+import org.jboss.metadata.process.processor.JBossMetaDataProcessor;
+import org.jboss.metadata.process.processor.ejb.jboss.SetDefaultLocalBusinessInterfaceProcessor;
+
+/**
+ * SetDefaultLocalBusinessInterfaceProcessorFactory
+ * 
+ * A {@link JBossMetaDataProcessorFactory} responsible for creating the 
+ * {@link SetDefaultLocalBusinessInterfaceProcessor}. 
+ * (JBMETA-122 Implicit Local Business Interface)
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public class SetDefaultLocalBusinessInterfaceProcessorFactory implements JBossMetaDataProcessorFactory<JBossMetaData>
+{
+
+   /**
+    * @see org.jboss.ejb3.deployers.metadata.processor.JBossMetaDataProcessorFactory#create(org.jboss.deployers.structure.spi.DeploymentUnit)
+    * @throws NullPointerException If the passed <code>deploymentUnit</code> is null
+    */
+   public JBossMetaDataProcessor<JBossMetaData> create(DeploymentUnit deploymentUnit)
+   {
+      return new SetDefaultLocalBusinessInterfaceProcessor<JBossMetaData>(deploymentUnit.getClassLoader());
+   }
+
+}

Added: projects/ejb3/trunk/deployers/src/main/java/org/jboss/ejb3/deployers/metadata/processor/SetExplicitLocalJNDINameProcessorFactory.java
===================================================================
--- projects/ejb3/trunk/deployers/src/main/java/org/jboss/ejb3/deployers/metadata/processor/SetExplicitLocalJNDINameProcessorFactory.java	                        (rev 0)
+++ projects/ejb3/trunk/deployers/src/main/java/org/jboss/ejb3/deployers/metadata/processor/SetExplicitLocalJNDINameProcessorFactory.java	2009-12-09 11:19:14 UTC (rev 97601)
@@ -0,0 +1,51 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, 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.ejb3.deployers.metadata.processor;
+
+import org.jboss.deployers.structure.spi.DeploymentUnit;
+import org.jboss.metadata.ejb.jboss.JBossMetaData;
+import org.jboss.metadata.process.processor.JBossMetaDataProcessor;
+import org.jboss.metadata.process.processor.ejb.jboss.SetExplicitLocalJndiNameProcessor;
+
+/**
+ * SetExplicitLocalJNDINameProcessorFactory
+ *
+ * A {@link JBossMetaDataProcessorFactory} responsible for creating the 
+ * {@link SetExplicitLocalJndiNameProcessor}. 
+ * (JBMETA-143 Set explicit local JNDI name from @LocalBinding.jndiBinding)
+ * 
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public class SetExplicitLocalJNDINameProcessorFactory implements JBossMetaDataProcessorFactory<JBossMetaData>
+{
+
+   /**
+    * @see org.jboss.ejb3.deployers.metadata.processor.JBossMetaDataProcessorFactory#create(org.jboss.deployers.structure.spi.DeploymentUnit)
+    */
+   public JBossMetaDataProcessor<JBossMetaData> create(DeploymentUnit deploymentUnit)
+   {
+      // we don't need the deployment unit to create the processor, so just ignore it
+      return SetExplicitLocalJndiNameProcessor.INSTANCE;
+   }
+
+}




More information about the jboss-cvs-commits mailing list