[jboss-cvs] JBossAS SVN: r86163 - in branches/Branch_5_x/server/src: main/org/jboss/ejb/deployers and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Mar 20 10:28:18 EDT 2009


Author: alex.loubyansky at jboss.com
Date: 2009-03-20 10:28:18 -0400 (Fri, 20 Mar 2009)
New Revision: 86163

Modified:
   branches/Branch_5_x/server/src/etc/deployers/ejb-deployer-jboss-beans.xml
   branches/Branch_5_x/server/src/main/org/jboss/ejb/deployers/EjbDeployer.java
   branches/Branch_5_x/server/src/main/org/jboss/ejb/deployers/EjbDeployerMBean.java
Log:
JBAS-4666

Modified: branches/Branch_5_x/server/src/etc/deployers/ejb-deployer-jboss-beans.xml
===================================================================
--- branches/Branch_5_x/server/src/etc/deployers/ejb-deployer-jboss-beans.xml	2009-03-20 13:14:32 UTC (rev 86162)
+++ branches/Branch_5_x/server/src/etc/deployers/ejb-deployer-jboss-beans.xml	2009-03-20 14:28:18 UTC (rev 86163)
@@ -72,6 +72,19 @@
        <!-- Specify a SecurityDomain as fallback -->
        <property name="defaultSecurityDomain">jboss-ejb-policy</property>
 
+       <!-- A flag indicating if the deployer should validate the ejb-jar.xml/jboss.xml descriptors and components -->
+       <property name="verifyDeployments">true</property>
+
+       <!-- A flag indicating if the verifier should be verbose about its operation -->
+       <property name="verifierVerbose">true</property>
+
+       <!-- Setting this to 'true' will cause all deployments
+       to fail when the Verifier detected a problem with the contained
+       Beans. If false, warnings/errors will be logged but the deployment
+       will not fail.
+       -->
+       <property name="strictVerifier">true</property>
+
     </bean>
 
    <bean name="MergedJBossMetaDataDeployer" class="org.jboss.ejb.deployers.MergedJBossMetaDataDeployer">

Modified: branches/Branch_5_x/server/src/main/org/jboss/ejb/deployers/EjbDeployer.java
===================================================================
--- branches/Branch_5_x/server/src/main/org/jboss/ejb/deployers/EjbDeployer.java	2009-03-20 13:14:32 UTC (rev 86162)
+++ branches/Branch_5_x/server/src/main/org/jboss/ejb/deployers/EjbDeployer.java	2009-03-20 14:28:18 UTC (rev 86163)
@@ -32,13 +32,8 @@
 import javax.management.ObjectName;
 
 import org.jboss.aop.microcontainer.aspects.jmx.JMX;
-import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
-import org.jboss.beans.metadata.plugins.AbstractDemandMetaData;
-import org.jboss.beans.metadata.plugins.AbstractSupplyMetaData;
 import org.jboss.beans.metadata.plugins.builder.BeanMetaDataBuilderFactory;
 import org.jboss.beans.metadata.spi.BeanMetaData;
-import org.jboss.beans.metadata.spi.BeanMetaDataFactory;
-import org.jboss.beans.metadata.spi.DemandMetaData;
 import org.jboss.beans.metadata.spi.SupplyMetaData;
 import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
 import org.jboss.deployers.spi.DeploymentException;
@@ -50,6 +45,7 @@
 import org.jboss.ejb.EjbModule;
 import org.jboss.kernel.plugins.deployment.AbstractKernelDeployment;
 import org.jboss.kernel.spi.deployment.KernelDeployment;
+import org.jboss.logging.Logger;
 import org.jboss.metadata.ApplicationMetaData;
 import org.jboss.metadata.ejb.jboss.ContainerConfigurationMetaData;
 import org.jboss.metadata.ejb.jboss.InvokerProxyBindingMetaData;
@@ -62,6 +58,9 @@
 import org.jboss.system.metadata.ServiceDependencyValueMetaData;
 import org.jboss.system.metadata.ServiceInjectionValueMetaData;
 import org.jboss.system.metadata.ServiceMetaData;
+import org.jboss.verifier.BeanVerifier;
+import org.jboss.verifier.event.VerificationEvent;
+import org.jboss.verifier.event.VerificationListener;
 
 /**
  * A real deployer that translates JBossMetaData into ServiceMetaData for
@@ -89,7 +88,17 @@
    private String securityManagementName;
    private String securityContextClassName;
    private String defaultSecurityDomain;
-   
+
+   /** Verify EJB-jar contents on deployments */
+   private boolean verifyDeployments;
+
+   /** Enable verbose verification. */
+   private boolean verifierVerbose;
+
+   /** Enable strict verification: deploy JAR only if Verifier reports
+    * no problems */
+   private boolean strictVerifier;
+
    /**
     * Inject Policy Registration Bean Name 
     */
@@ -213,13 +222,60 @@
    @Override
    public void deploy(VFSDeploymentUnit unit, JBossMetaData deployment)
       throws DeploymentException
-   {
-      // TODO: use BeanVerifier to validate the metadata in the DDs
-      
+   {      
       // If it is a deployment with ejbVersion unknown or 3
       if (!deployment.isEJB2x() && !deployment.isEJB1x())
          return; // let EJB3 deployer handle this
 
+      ApplicationMetaData legacyMD = new ApplicationMetaData(deployment);
+
+      if( verifyDeployments )
+      {
+         // we have a positive attitude
+         boolean allOK = true;
+
+         // wrapping this into a try - catch block to prevent errors in
+         // verifier from stopping the deployment
+         try
+         {
+            BeanVerifier verifier = new BeanVerifier();
+
+            // add a listener so we can log the results
+            verifier.addVerificationListener(new VerificationListener()
+            {
+               Logger verifierLog = Logger.getLogger(EjbDeployer.class, "verifier");
+
+               public void beanChecked(VerificationEvent event)
+               {
+                  verifierLog.debug( "Bean checked: " + event.getMessage() );
+               }
+
+               public void specViolation(VerificationEvent event)
+               {
+                  verifierLog.warn( "EJB spec violation: " + (verifierVerbose ? event.getVerbose() : event.getMessage()));
+               }
+            });
+
+            log.debug("Verifying " + unit.getRoot().toURL());
+            verifier.verify(unit.getRoot().toURL(), legacyMD, unit.getClassLoader());
+
+            allOK = verifier.getSuccess();
+         }
+         catch (Throwable t)
+         {
+            log.warn("Verify failed; continuing", t );
+            allOK = false;
+         }
+
+         // If the verifier is in strict mode and an error/warning
+         // was found in the Verification process, throw a Deployment
+         // Exception
+         if( strictVerifier && !allOK )
+         {
+            throw new DeploymentException("Verification of Enterprise Beans failed, see above for error messages.");
+         }
+      }
+      
       ServiceMetaData ejbModule = new ServiceMetaData();
       ejbModule.setCode(EjbModule.class.getName());
 
@@ -242,7 +298,6 @@
       ctor.setSignature(
          new String[]{VFSDeploymentUnit.class.getName(), ApplicationMetaData.class.getName()}
       );
-      ApplicationMetaData legacyMD = new ApplicationMetaData(deployment);
       ctor.setParameters(new Object[]{unit, legacyMD});
       ejbModule.setConstructor(ctor);
 
@@ -452,4 +507,34 @@
 
       return new ObjectName(name);
    }
+
+	public boolean getStrictVerifier()
+	{
+		return strictVerifier;
+	}
+
+	public boolean getVerifierVerbose()
+	{
+		return verifierVerbose;
+	}
+
+	public boolean getVerifyDeployments()
+	{
+		return verifyDeployments;
+	}
+
+	public void setStrictVerifier(boolean strictVerifier)
+	{
+		this.strictVerifier = strictVerifier;
+	}
+
+	public void setVerifierVerbose(boolean verbose)
+	{
+		this.verifierVerbose = verbose;
+	}
+
+	public void setVerifyDeployments(boolean verify)
+	{
+		this.verifyDeployments = verify;
+	}
 }

Modified: branches/Branch_5_x/server/src/main/org/jboss/ejb/deployers/EjbDeployerMBean.java
===================================================================
--- branches/Branch_5_x/server/src/main/org/jboss/ejb/deployers/EjbDeployerMBean.java	2009-03-20 13:14:32 UTC (rev 86162)
+++ branches/Branch_5_x/server/src/main/org/jboss/ejb/deployers/EjbDeployerMBean.java	2009-03-20 14:28:18 UTC (rev 86163)
@@ -44,21 +44,21 @@
 
    /**
     * Enables/disables the application bean verification upon deployment.
+    */
    void setVerifyDeployments(boolean verify);
    boolean getVerifyDeployments();
-    */
    
    /**
     * Enables/disables the verbose mode on the verifier.
+    */
    void setVerifierVerbose(boolean verbose);
    boolean getVerifierVerbose();   
-    */
 
    /**
     * Enables/disables the strict mode on the verifier.
+    */
    void setStrictVerifier(boolean strictVerifier);
    boolean getStrictVerifier();
-    */
    
    /**
     * Enables/disables the metrics interceptor for containers.




More information about the jboss-cvs-commits mailing list