[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