[jboss-cvs] JBossAS SVN: r79778 - trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Oct 20 18:37:47 EDT 2008


Author: kabir.khan at jboss.com
Date: 2008-10-20 18:37:47 -0400 (Mon, 20 Oct 2008)
New Revision: 79778

Modified:
   trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AbstractAopMetaDataDeployer.java
Log:
[JBAS-5766] Optimize creation of ScopeKeys

Modified: trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AbstractAopMetaDataDeployer.java
===================================================================
--- trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AbstractAopMetaDataDeployer.java	2008-10-20 22:17:05 UTC (rev 79777)
+++ trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AbstractAopMetaDataDeployer.java	2008-10-20 22:37:47 UTC (rev 79778)
@@ -25,6 +25,8 @@
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import org.jboss.aop.AspectManager;
 import org.jboss.aop.microcontainer.beans.metadata.AspectManagerAwareBeanMetaDataFactory;
@@ -37,18 +39,30 @@
 import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
 import org.jboss.classloader.spi.ClassLoaderSystem;
 import org.jboss.classloading.spi.dependency.Module;
+import org.jboss.dependency.spi.DependencyInfo;
+import org.jboss.dependency.spi.DependencyItem;
 import org.jboss.dependency.spi.ScopeInfo;
+import org.jboss.deployers.client.spi.main.MainDeployer;
 import org.jboss.deployers.spi.DeploymentException;
+import org.jboss.deployers.spi.attachments.MutableAttachments;
 import org.jboss.deployers.spi.deployer.DeploymentStages;
+import org.jboss.deployers.structure.spi.ClassLoaderFactory;
+import org.jboss.deployers.structure.spi.DeploymentResourceLoader;
 import org.jboss.deployers.structure.spi.DeploymentUnit;
+import org.jboss.deployers.structure.spi.DeploymentUnitVisitor;
 import org.jboss.deployers.vfs.spi.deployer.AbstractSimpleVFSRealDeployer;
 import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit;
 import org.jboss.kernel.Kernel;
 import org.jboss.kernel.plugins.dependency.AbstractKernelControllerContext;
 import org.jboss.kernel.spi.dependency.KernelController;
 import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.metadata.spi.MetaData;
+import org.jboss.metadata.spi.MutableMetaData;
+import org.jboss.metadata.spi.repository.MutableMetaDataRepository;
+import org.jboss.metadata.spi.scope.CommonLevels;
 import org.jboss.metadata.spi.scope.Scope;
 import org.jboss.metadata.spi.scope.ScopeKey;
+import org.jboss.metadata.spi.scope.ScopeLevel;
 
 /**
  * Deployer for deployments containing AOP metadata. It makes sure that the metadata is deployed to the 
@@ -259,7 +273,9 @@
             for (BeanMetaData bean : aopBeans)
             {
                //Register the component deployment context so we get the correct mutable metadata scope
-               DeploymentUnit componentUnit = deployComponentDeploymentContext(unit, bean);
+               //This has been replaced by a "fake" implementation to avoid the overhead of the real one
+               //which registers everything in JMX, which is pointless since we throw it away immediately
+               FakeComponentUnit componentUnit = deployComponentDeploymentContext(unit, bean);
                try
                {
                   beanMetaDataDeployer.deploy(componentUnit, bean);
@@ -269,7 +285,7 @@
                {
                   //Unregister the component deployment context so that this bean does not get deployed
                   //again by the real BeanMetaDataDeployer
-                  undeployComponentDeploymentContext(unit, bean);
+                  undeployComponentDeploymentContext(componentUnit, bean);
                }
             }
          }
@@ -311,19 +327,22 @@
    /**
     * Wrap the deployment unit in a component deployment unit similar to what the KernelDeploymentDeployer does
     */
-   private DeploymentUnit deployComponentDeploymentContext(DeploymentUnit unit, BeanMetaData deployment)
+   private FakeComponentUnit deployComponentDeploymentContext(VFSDeploymentUnit unit, BeanMetaData deployment)
    {
-      DeploymentUnit componentUnit = unit.addComponent(deployment.getName());
-      componentUnit.addAttachment(BeanMetaData.class.getName(), deployment);
-      return componentUnit;
+      //This used to make the following calls which has the overhead of registering the unit in JMX.
+      //All we really want are the scopes, which is handled by FakeComponentUnit
+//      DeploymentUnit componentUnit = unit.addComponent(deployment.getName());
+//      componentUnit.addAttachment(BeanMetaData.class.getName(), deployment);
+//      return componentUnit;
+      return new FakeComponentUnit(unit, deployment);
    }
    
    /**
     * Undeploy the component deployment unit similar to what the KernelDeploymentDeployer does 
     */
-   private void undeployComponentDeploymentContext(DeploymentUnit unit, BeanMetaData bean)
+   private void undeployComponentDeploymentContext(FakeComponentUnit unit, BeanMetaData bean)
    {
-      unit.removeComponent(bean.getName());
+      unit.cleanup();
    }
    
    private class MyBeanMetaDataDeployer
@@ -331,7 +350,7 @@
       /**
        * Copied from the real org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataDeployer
        */
-      private void deploy(DeploymentUnit unit, BeanMetaData deployment) throws DeploymentException
+      private void deploy(FakeComponentUnit unit, BeanMetaData deployment) throws DeploymentException
       {
          // No explicit classloader, use the deployment's classloader
          if (deployment.getClassLoader() == null)
@@ -357,6 +376,21 @@
             mergeScopes(scopeInfo.getMutableScope(), unit.getMutableScope());
          }
          
+//         KernelControllerContext context = new AbstractKernelControllerContext(null, deployment, null);
+//         ScopeInfo scopeInfo2 = context.getScopeInfo();
+//         if (scopeInfo2 != null)
+//         {
+//            ScopeKey key = unit.getScope().clone();
+//            key.removeScopeLevel(CommonLevels.INSTANCE);
+//            key.addScope(CommonLevels.INSTANCE, deployment.getName());
+//            
+//            ScopeKey mutable = new ScopeKey();
+//            key.addScope(CommonLevels.INSTANCE, deployment.getName());
+//            
+//            mergeScopes(scopeInfo2.getScope(), key);
+//            mergeScopes(scopeInfo2.getMutableScope(), mutable);
+//         }
+         
          try
          {
             //System.out.println("==============> Installing " + context.getName());
@@ -422,14 +456,14 @@
       private static final long serialVersionUID = 1L;
       
       /** The deployment unit */
-      private DeploymentUnit unit;
+      private FakeComponentUnit unit;
 
       /**
        * Create a new DeploymentClassLoaderMetaData.
        * 
        * @param unit the deployment unit
        */
-      public DeploymentClassLoaderMetaData(DeploymentUnit unit)
+      public DeploymentClassLoaderMetaData(FakeComponentUnit unit)
       {
          if (unit == null)
             throw new IllegalArgumentException("Null unit");
@@ -442,4 +476,90 @@
          return new AbstractValueMetaData(unit.getClassLoader());
       }
    }
+   
+   /**
+    * BeanMetaDatadeployer uses AbstractComponentUnit per bean, but that has the overhead of
+    * registering things in JMX. Create a Fake one here to encapsulate the methods that we use
+    * without registering things in JMX
+    * 
+    * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+    * @version $Revision: 1.1 $
+    */
+   private static class FakeComponentUnit
+   {
+      VFSDeploymentUnit parent;
+      BeanMetaData bmd;
+      ScopeKey scope;
+      ScopeKey mutableScope;
+      
+      FakeComponentUnit(VFSDeploymentUnit parent, BeanMetaData bmd)
+      {
+         this.parent = parent;
+         this.bmd = bmd;
+      }
+      
+      ScopeKey getScope()
+      {
+         if (scope == null)
+         {
+            ScopeKey key = parent.getScope().clone();
+            key.removeScopeLevel(CommonLevels.INSTANCE);
+            key.addScope(CommonLevels.INSTANCE, bmd.getName());
+         }
+         return scope;
+      }
+      
+      ScopeKey getMutableScope()
+      {
+         if (mutableScope == null)
+         {
+            mutableScope = new ScopeKey();
+            mutableScope.addScope(CommonLevels.INSTANCE, bmd.getName());
+         }
+         return mutableScope;
+      }
+
+      ClassLoader getClassLoader()
+      {
+         return parent.getClassLoader();
+      }
+      
+      String getName()
+      {
+         return bmd.getName();
+      }
+      
+      void cleanup()
+      {
+         MutableMetaDataRepository repository = null; 
+         DeploymentUnit unit = parent;
+         while (repository == null && unit != null)
+         {
+            repository = unit.getAttachment(MutableMetaDataRepository.class);
+            unit = parent.getParent();
+         }
+         if (repository == null)
+         {
+            return;
+         }
+         
+         try
+         {
+            ScopeKey scope = getScope();
+            repository.removeMetaDataRetrieval(scope);
+         }
+         catch (Throwable ignored)
+         {
+         }
+
+         try
+         {
+            ScopeKey scope = getMutableScope();
+            repository.removeMetaDataRetrieval(scope);
+         }
+         catch (Throwable ignored)
+         {
+         }
+      }
+   }
 }




More information about the jboss-cvs-commits mailing list