[jboss-cvs] JBossAS SVN: r75778 - in trunk: server/src/etc/conf/default and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Jul 14 11:31:30 EDT 2008


Author: kabir.khan at jboss.com
Date: 2008-07-14 11:31:30 -0400 (Mon, 14 Jul 2008)
New Revision: 75778

Added:
   trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AOPAnnotationMetaDataParserDeployer.java
   trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AOPClassLoaderDeployer.java
   trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AOPDeploymentAopMetaDataDeployer.java
   trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AbstractAopMetaDataDeployer.java
   trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AliasesImpl.java
   trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AopMetaDataDeployerOutput.java
   trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AspectDeployer.java
   trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/ClassLoaderDomainScope.java
   trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/ClassLoaderDomainScopeFactory.java
   trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/ClassLoaderDomainScopeImpl.java
Removed:
   trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/temp/
Modified:
   trunk/server/src/etc/conf/default/deployers.xml
Log:
[JBAS-5766] Copy new deployers to permanent location

Added: trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AOPAnnotationMetaDataParserDeployer.java
===================================================================
--- trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AOPAnnotationMetaDataParserDeployer.java	                        (rev 0)
+++ trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AOPAnnotationMetaDataParserDeployer.java	2008-07-14 15:31:30 UTC (rev 75778)
@@ -0,0 +1,186 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, 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.aop.asintegration.jboss5;
+
+import java.io.BufferedInputStream;
+import java.io.DataInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import javassist.bytecode.ClassFile;
+
+import org.jboss.aop.AspectAnnotationLoader;
+import org.jboss.aop.microcontainer.beans.metadata.AOPDeployment;
+import org.jboss.aop.microcontainer.beans.metadata.AspectManagerAwareBeanMetaDataFactory;
+//import org.jboss.aop.microcontainer.beans.metadata.MicrocontainerAnnotationLoaderStrategy;
+import org.jboss.beans.metadata.spi.BeanMetaDataFactory;
+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.deployers.vfs.spi.structure.VFSDeploymentUnit;
+import org.jboss.virtual.VirtualFile;
+import org.jboss.virtual.VirtualFileFilter;
+import org.jboss.virtual.VisitorAttributes;
+import org.jboss.virtual.plugins.context.jar.JarUtils;
+import org.jboss.virtual.plugins.vfs.helpers.FilterVirtualFileVisitor;
+import org.jboss.virtual.plugins.vfs.helpers.SuffixesExcludeFilter;
+
+/**
+ * Reads the annotations and converts them into AOP metadata to be deployed properly 
+ * by the AOPDeploymentAopMetaDataDeployer
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class AOPAnnotationMetaDataParserDeployer extends AbstractDeployer
+{
+//   public AOPAnnotationMetaDataParserDeployer(int xmlParserOrder)
+//   {
+//      super.setOutput(AOPDeployment.class);
+//      super.setStage(DeploymentStages.PARSE);
+//      //Make this come after the AOPXMLMetaDataParserDeployer
+//      super.setRelativeOrder(xmlParserOrder + 1);
+//   }
+//
+   public void deploy(DeploymentUnit unit) throws DeploymentException
+   {
+//      // Ignore non-vfs deployments
+//      if (unit instanceof VFSDeploymentUnit == false)
+//      {
+//         log.trace("Not a vfs deployment: " + unit.getName());
+//         return;
+//      }
+//      // See if the suffix matches the .aop requirement
+//      if (unit.getSimpleName().endsWith(".aop") == false)
+//      {
+//         log.trace("Unit name does not end in .ear: " + unit.getSimpleName());
+//         return;
+//      }
+//      internalDeploy((VFSDeploymentUnit)unit);
+   }
+//   
+//   private void internalDeploy(VFSDeploymentUnit unit) throws DeploymentException
+//   {
+//      MicrocontainerAnnotationLoaderStrategy strategy = new MicrocontainerAnnotationLoaderStrategy(); 
+//      AspectAnnotationLoader loader = new AspectAnnotationLoader(null, strategy);
+//      
+//      List<VirtualFile> files = getClasses(unit);
+//      for(VirtualFile file : files)
+//      {
+//         try
+//         {
+//            ClassFile cf = loadClassFile(file);
+//            log.debug("Deploying possibly annotated class " + cf.getName());
+//            loader.deployClassFile(cf);
+//         }
+//         catch (Exception e)
+//         {
+//            throw new DeploymentException("Error reading annotations for " + file, e);
+//         }
+//      }
+//      
+//      List<AspectManagerAwareBeanMetaDataFactory> factories = strategy.getFactories();
+//      
+//      AOPDeployment deployment = unit.getAttachment(AOPDeployment.class);
+//      if (factories != null && factories.size() > 0)
+//      {
+//         if (deployment == null)
+//         {
+//            deployment = new AOPDeployment();
+//            unit.getTransientManagedObjects().addAttachment(AOPDeployment.class.getName(), deployment, AOPDeployment.class);
+//            deployment.setBeanFactories(new ArrayList<BeanMetaDataFactory>());
+//         }
+//         System.out.println(System.identityHashCode(deployment.getBeanFactories()));
+//         deployment.getBeanFactories().addAll(factories);
+//      }  
+//   }
+//
+//   private ClassFile loadClassFile(VirtualFile file)
+//   {
+//      DataInputStream din = null;
+//      ClassFile cf = null;
+//      try
+//      {
+//         InputStream in = file.openStream();
+//         din = new DataInputStream(new BufferedInputStream(in));
+//         cf = new ClassFile(din);
+//      }
+//      catch (IOException e)
+//      {
+//         throw new RuntimeException("Error reading " + file, e);
+//      }
+//      finally
+//      {
+//         try
+//         {
+//            din.close();
+//         }
+//         catch (IOException ignored)
+//         {
+//         }
+//      }
+//      
+//      return cf;
+//   }
+//
+//   private List<VirtualFile> getClasses(VFSDeploymentUnit unit)
+//   {
+//      VisitorAttributes va = new VisitorAttributes();
+//      va.setLeavesOnly(true);
+//      ClassFileFilter filter = new ClassFileFilter();
+//      SuffixesExcludeFilter noJars = new SuffixesExcludeFilter(JarUtils.getSuffixes());
+//      va.setRecurseFilter(noJars);
+//      FilterVirtualFileVisitor visitor = new FilterVirtualFileVisitor(filter, va);
+//
+//      for (VirtualFile vf : unit.getClassPath())
+//      {
+//         try
+//         {
+//            vf.visit(visitor);
+//         }
+//         catch (IOException e)
+//         {
+//            throw new RuntimeException(e);
+//         }
+//      }
+//      return visitor.getMatched();
+//
+//   }
+//   
+//   private static class ClassFileFilter implements VirtualFileFilter
+//   {
+//      public boolean accepts(VirtualFile file)
+//      {
+//         try
+//         {
+//            return file.isLeaf() && file.getName().endsWith(".class");
+//         }
+//         catch (IOException e)
+//         {
+//            throw new RuntimeException("Error visiting file: " + file.getName(), e);
+//         }
+//      }
+//   }
+}

Copied: trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AOPClassLoaderDeployer.java (from rev 75762, trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/temp/AOPClassLoaderDeployer.java)
===================================================================
--- trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AOPClassLoaderDeployer.java	                        (rev 0)
+++ trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AOPClassLoaderDeployer.java	2008-07-14 15:31:30 UTC (rev 75778)
@@ -0,0 +1,93 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, 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.aop.asintegration.jboss5;
+
+import org.jboss.aop.AspectManager;
+import org.jboss.aop.Domain;
+import org.jboss.aop.classpool.AOPClassLoaderScopingPolicy;
+import org.jboss.aop.domain.DomainInitializer;
+import org.jboss.deployers.spi.DeploymentException;
+import org.jboss.deployers.spi.deployer.DeploymentStages;
+import org.jboss.deployers.vfs.spi.deployer.AbstractVFSRealDeployer;
+import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class AOPClassLoaderDeployer extends AbstractVFSRealDeployer
+{
+   AspectManager aspectManager;
+   
+   public AOPClassLoaderDeployer(int xmlRelativeOrder)
+   {
+      setStage(DeploymentStages.CLASSLOADER);
+      //This needs to come after the classloader deployer
+      setRelativeOrder(xmlRelativeOrder + 1);
+   }
+
+   public AspectManager getAspectManager()
+   {
+      return aspectManager;
+   }
+
+   public void setAspectManager(AspectManager aspectManager)
+   {
+      this.aspectManager = aspectManager;
+   }
+
+   @Override
+   public void deploy(VFSDeploymentUnit unit) throws DeploymentException
+   {
+      //Scoped AOP deployments are only available when deployed as part of a scoped sar, ear etc.
+      //It can contain an aop.xml file, or it can be part of a .aop file
+      //Linking a standalone -aop.xml file onto a scoped deployment is not possible at the moment
+      AOPClassLoaderScopingPolicy policy = AspectManager.getClassLoaderScopingPolicy();
+
+      AspectManager manager = aspectManager;
+      if (policy != null)
+      {
+         if (policy instanceof DomainInitializer == false)
+         {
+            throw new RuntimeException(policy + " must implement DomainInitializer");
+         }
+         DomainInitializer initializer = (DomainInitializer)policy;
+         Domain domain  = initializer.initializeDomain(unit);
+         if (domain != null)
+         {
+            manager = domain;
+         }
+      }
+      
+      unit.getTransientManagedObjects().addAttachment(AspectManager.class, manager);
+   }
+
+   @Override
+   public void undeploy(VFSDeploymentUnit unit)
+   {
+      if (unit.getTopLevel() == unit)
+      {
+         aspectManager.unregisterClassLoader(unit.getClassLoader());
+      }
+   }
+}

Copied: trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AOPDeploymentAopMetaDataDeployer.java (from rev 75762, trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/temp/AOPDeploymentAopMetaDataDeployer.java)
===================================================================
--- trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AOPDeploymentAopMetaDataDeployer.java	                        (rev 0)
+++ trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AOPDeploymentAopMetaDataDeployer.java	2008-07-14 15:31:30 UTC (rev 75778)
@@ -0,0 +1,63 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, Red Hat Middleware LLC., 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.aop.asintegration.jboss5;
+
+import java.util.List;
+
+import org.jboss.aop.microcontainer.beans.metadata.AOPDeployment;
+import org.jboss.beans.metadata.spi.BeanMetaDataFactory;
+import org.jboss.deployers.spi.DeploymentException;
+import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit;
+
+/**
+ * Deployer for Aspects
+ *
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ * @author <a href="mailto:kabir.khan at jboss.org">Kabir Khan</a>
+ * @author adrian at jboss.org
+ */
+public class AOPDeploymentAopMetaDataDeployer extends AbstractAopMetaDataDeployer<AOPDeployment>
+{
+   public AOPDeploymentAopMetaDataDeployer()
+   {
+      super(AOPDeployment.class);
+   }
+
+   @Override
+   public void deploy(VFSDeploymentUnit unit, AOPDeployment aopDeployment) throws DeploymentException
+   {
+      super.deploy(unit, aopDeployment);
+   }
+   
+   @Override
+   public void undeploy(VFSDeploymentUnit unit, AOPDeployment aopDeployment)
+   {
+      super.undeploy(unit, aopDeployment);
+   }
+
+
+   @Override
+   protected List<BeanMetaDataFactory> getFactories(AOPDeployment deployment)
+   {
+      return deployment.getBeanFactories();
+   }
+}

Copied: trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AbstractAopMetaDataDeployer.java (from rev 75762, trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/temp/AbstractAopMetaDataDeployer.java)
===================================================================
--- trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AbstractAopMetaDataDeployer.java	                        (rev 0)
+++ trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AbstractAopMetaDataDeployer.java	2008-07-14 15:31:30 UTC (rev 75778)
@@ -0,0 +1,372 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, 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.aop.asintegration.jboss5;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.jboss.aop.AspectManager;
+import org.jboss.aop.microcontainer.beans.metadata.AspectManagerAwareBeanMetaDataFactory;
+import org.jboss.beans.metadata.plugins.AbstractClassLoaderMetaData;
+import org.jboss.beans.metadata.plugins.AbstractValueMetaData;
+import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.beans.metadata.spi.BeanMetaDataFactory;
+import org.jboss.beans.metadata.spi.ClassLoaderMetaData;
+import org.jboss.beans.metadata.spi.ValueMetaData;
+import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
+import org.jboss.classloader.spi.ClassLoaderSystem;
+import org.jboss.classloading.spi.dependency.Module;
+import org.jboss.deployers.spi.DeploymentException;
+import org.jboss.deployers.spi.deployer.DeploymentStages;
+import org.jboss.deployers.structure.spi.DeploymentUnit;
+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;
+
+/**
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public abstract class AbstractAopMetaDataDeployer<T> extends AbstractSimpleVFSRealDeployer<T>
+{
+   private AspectManager aspectManager;
+   private KernelController controller;
+   private MyBeanMetaDataDeployer beanMetaDataDeployer = new MyBeanMetaDataDeployer();
+   private static int sequence;
+   
+   
+   public AbstractAopMetaDataDeployer(Class<T> input)
+   {
+      super(input);
+      super.setStage(DeploymentStages.POST_CLASSLOADER);
+      super.setOutput(AopMetaDataDeployerOutput.class);
+   }
+
+   /**
+    * Get the aspectManager.
+    * 
+    * @return the aspectManager.
+    */
+   public AspectManager getAspectManager()
+   {
+      return aspectManager;
+   }
+
+   /**
+    * Set the aspectManager.
+    * 
+    * @param aspectManager the aspectManager.
+    */
+   public void setAspectManager(AspectManager aspectManager)
+   {
+      this.aspectManager = aspectManager;
+   }
+   
+   /**
+    * Set the kernel.
+    * 
+    * @param kernel the kernel
+    */
+   public void setKernel(Kernel kernel)
+   {
+      this.controller = kernel.getController();
+   }
+   
+   /**
+    * Method for subclasses to call upon deployment 
+    */
+   @Override
+   public void deploy(VFSDeploymentUnit unit, T deployment) throws DeploymentException
+   {
+      log.debug("Deploying " + unit + " " + deployment);
+      
+      AopMetaDataDeployerOutput output = new AopMetaDataDeployerOutput();
+      unit.getTransientManagedObjects().addAttachment(AopMetaDataDeployerOutput.class, output);
+      
+      if (extractAopBeanMetaDataFactories(unit, deployment, output))
+      {
+         AspectManager correctManager = unit.getAttachment(AspectManager.class);
+         if (correctManager != aspectManager)
+         {
+            int sequence = getSequence();
+            String scopedManagerName = registerScopedManagerBean(sequence, unit, correctManager, output);
+            massageScopedDeployment(sequence, unit, deployment, output, scopedManagerName);
+         }
+      }
+      
+      try
+      {
+         deployBeans(unit, output);
+      }
+      catch (Throwable t)
+      {
+         unregisterScopedManagerBean(output.getScopedAspectManagerBeanName(), false);
+         if (t instanceof DeploymentException)
+         {
+            throw (DeploymentException)t;
+         }
+         else
+         {
+            throw new DeploymentException(t);
+         }
+      }
+   }
+
+   
+   /**
+    * Method for subclasses to call upon undeployment 
+    */
+   @Override
+   public void undeploy(VFSDeploymentUnit unit, T deployment)
+   {
+      log.debug("Undeploying " + unit + " " + deployment);
+      
+      AopMetaDataDeployerOutput output = unit.getAttachment(AopMetaDataDeployerOutput.class);
+      
+      undeployBeans(unit, output);
+      
+      unregisterScopedManagerBean(output.getScopedAspectManagerBeanName(), true);
+   }
+
+   protected abstract List<BeanMetaDataFactory> getFactories(T deployment);
+   
+   private boolean extractAopBeanMetaDataFactories(VFSDeploymentUnit unit, T deployment, AopMetaDataDeployerOutput output)
+   {
+      log.debug("Extracting aop bean metadata factories for  " + unit);
+      List<AspectManagerAwareBeanMetaDataFactory> aopFactories = new ArrayList<AspectManagerAwareBeanMetaDataFactory>();
+      
+      List<BeanMetaDataFactory> factories = getFactories(deployment);
+      if (factories != null && factories.size() > 0)
+      {
+         for (Iterator<BeanMetaDataFactory> it = factories.iterator() ; it.hasNext() ; )
+         {
+            BeanMetaDataFactory factory = it.next();
+            if (factory instanceof AspectManagerAwareBeanMetaDataFactory)
+            {
+               it.remove();
+               aopFactories.add((AspectManagerAwareBeanMetaDataFactory)factory);
+            }
+         }     
+      }
+      
+      if (aopFactories.size() > 0)
+      {
+         output.setFactories(aopFactories);
+         return true;
+      }
+      return false;
+   }
+   
+   private String registerScopedManagerBean(int sequence, VFSDeploymentUnit unit, AspectManager scopedManager, AopMetaDataDeployerOutput output) throws DeploymentException
+   {
+      String name = "ScopedManager_" + getSequence() + "_" + unit.getName();
+      BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder(name, scopedManager.getClass().getName());
+      
+      try
+      {
+         controller.install(builder.getBeanMetaData(), scopedManager);
+         return name;
+      }
+      catch (Throwable e)
+      {
+         unregisterScopedManagerBean(name, false);
+         throw new DeploymentException("Error registering scoped manager" + name + " " + scopedManager, e);
+      }
+   }
+ 
+   private synchronized int getSequence()
+   {
+      return ++sequence;
+   }
+   
+   private void unregisterScopedManagerBean(String name, boolean logError)
+   {
+      if (name == null)
+      {
+         return;
+      }
+      
+      try
+      {
+         controller.uninstall(name);
+      }
+      catch(Throwable t)
+      {
+         if (logError)
+         {
+            log.debug("Error unregistering scoped aspect manager " + name, t);
+         }
+      }
+   }
+   
+   private void massageScopedDeployment(int sequence, VFSDeploymentUnit unit, T deployment, AopMetaDataDeployerOutput output, String scopedManagerName) throws DeploymentException
+   {
+      log.debug("Massaging scoped deployment " + unit + " setting manager to " + scopedManagerName);
+      String domainName = getDomainName(unit);
+      output.setScopedInformation(scopedManagerName, domainName, sequence);
+   }
+   
+   private String getDomainName(VFSDeploymentUnit unit)
+   {
+      Module module = unit.getTopLevel().getAttachment(Module.class);
+      if (module != null && !module.getDeterminedDomainName().equals(ClassLoaderSystem.DEFAULT_DOMAIN_NAME))
+      {
+         return module.getDeterminedDomainName();
+      }
+      
+      return null;
+   }
+   
+   private void deployBeans(VFSDeploymentUnit unit, AopMetaDataDeployerOutput output) throws DeploymentException
+   {
+      List<BeanMetaData> aopBeans = output.getBeans();
+      List<BeanMetaData> done = new ArrayList<BeanMetaData>();
+      try
+      {
+         if (aopBeans != null && aopBeans.size() > 0)
+         {
+            for (BeanMetaData bean : aopBeans)
+            {
+               beanMetaDataDeployer.deploy(unit, bean);
+               done.add(bean);
+            }
+         }
+      }
+      catch (Throwable t)
+      {
+         for (int i = done.size() - 1 ; i >= 0 ; i--)
+         {
+            try
+            {
+               beanMetaDataDeployer.undeploy(unit, done.get(i));
+               controller.uninstall(done.get(i));
+            }
+            catch (Throwable e)
+            {
+               log.debug("Error undeploying " + done.get(i) + " for " + unit);
+            }
+         }
+         throw new DeploymentException(t);
+      }
+   }
+   
+   private void undeployBeans(VFSDeploymentUnit unit, AopMetaDataDeployerOutput output)
+   {
+      List<BeanMetaData> aopBeans = output.getBeans();
+      if (aopBeans != null && aopBeans.size() > 0)
+      {
+         for (int i = aopBeans.size() - 1 ; i >= 0 ; i--)
+         {
+            BeanMetaData bean = aopBeans.get(i);
+            beanMetaDataDeployer.undeploy(unit, bean);
+         }
+      }      
+   }
+   
+   private class MyBeanMetaDataDeployer
+   {   
+      /**
+       * Copied from the real org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataDeployer
+       */
+      private void deploy(DeploymentUnit unit, BeanMetaData deployment) throws DeploymentException
+      {
+         // No explicit classloader, use the deployment's classloader
+         if (deployment.getClassLoader() == null)
+         {
+            try
+            {
+               // Check the unit has a classloader
+               unit.getClassLoader();
+               // TODO clone the metadata?
+               deployment.setClassLoader(new DeploymentClassLoaderMetaData(unit));
+            }
+            catch (Exception e)
+            {
+               log.debug("Unable to retrieve classloader for deployment: " + unit.getName() + " reason=" + e.toString());
+            }
+         }
+         KernelControllerContext context = new AbstractKernelControllerContext(null, deployment, null);
+         try
+         {
+            controller.install(context);
+         }
+         catch (Throwable t)
+         {
+            throw DeploymentException.rethrowAsDeploymentException("Error deploying: " + deployment.getName(), t);
+         }
+      }
+   
+      /**
+       * Copied from the real org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataDeployer
+       */
+      private void undeploy(DeploymentUnit unit, BeanMetaData deployment)
+      {
+         try
+         {
+            controller.uninstall(deployment.getName());
+            
+            // Remove any classloader metadata we added (not necessary if we clone above)
+            ClassLoaderMetaData classLoader = deployment.getClassLoader();
+            if (classLoader instanceof DeploymentClassLoaderMetaData)
+               deployment.setClassLoader(null);
+         }
+         catch(Throwable t)
+         {
+            log.info("Error undeploying " + deployment + " for " + unit);
+         }
+      }
+   }
+   
+   /**
+    * Copied from BeanMetaDataDeployer
+    */
+   private static class DeploymentClassLoaderMetaData extends AbstractClassLoaderMetaData
+   {
+      /** The serialVersionUID */
+      private static final long serialVersionUID = 1L;
+      
+      /** The deployment unit */
+      private DeploymentUnit unit;
+
+      /**
+       * Create a new DeploymentClassLoaderMetaData.
+       * 
+       * @param unit the deployment unit
+       */
+      public DeploymentClassLoaderMetaData(DeploymentUnit unit)
+      {
+         if (unit == null)
+            throw new IllegalArgumentException("Null unit");
+         this.unit = unit;
+      }
+      
+      @Override
+      public ValueMetaData getClassLoader()
+      {
+         return new AbstractValueMetaData(unit.getClassLoader());
+      }
+   }
+}

Copied: trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AliasesImpl.java (from rev 75762, trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/temp/AliasesImpl.java)
===================================================================
--- trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AliasesImpl.java	                        (rev 0)
+++ trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AliasesImpl.java	2008-07-14 15:31:30 UTC (rev 75778)
@@ -0,0 +1,57 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, 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.aop.asintegration.jboss5;
+
+import java.lang.annotation.Annotation;
+
+import org.jboss.beans.metadata.api.annotations.Aliases;
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class AliasesImpl implements Aliases
+{
+   String[] names;
+   
+   public AliasesImpl(String name)
+   {
+      super();
+      this.names = new String[] {name};
+   }
+
+   public boolean replace()
+   {
+      return false;
+   }
+
+   public String[] value()
+   {
+      return names;
+   }
+
+   public Class<? extends Annotation> annotationType()
+   {
+      return Aliases.class;
+   }
+
+}

Copied: trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AopMetaDataDeployerOutput.java (from rev 75762, trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/temp/AopMetaDataDeployerOutput.java)
===================================================================
--- trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AopMetaDataDeployerOutput.java	                        (rev 0)
+++ trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AopMetaDataDeployerOutput.java	2008-07-14 15:31:30 UTC (rev 75778)
@@ -0,0 +1,119 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, 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.aop.asintegration.jboss5;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.aop.microcontainer.beans.metadata.AspectManagerAwareBeanMetaDataFactory;
+import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+class AopMetaDataDeployerOutput
+{
+   List<AspectManagerAwareBeanMetaDataFactory> factories;
+   List<BeanMetaData> beans;
+   boolean scoped;
+   String scopedAspectManagerBeanName;
+   String domainName;
+   int sequence;
+   
+   AopMetaDataDeployerOutput()
+   {
+      
+   }
+
+   String getScopedAspectManagerBeanName()
+   {
+      return scopedAspectManagerBeanName;
+   }
+
+   void setFactories(List<AspectManagerAwareBeanMetaDataFactory> factories)
+   {
+      this.factories = factories;
+   }
+   
+   void setScopedInformation(String scopedAspectManagerBeanName, String domainName, int sequence)
+   {
+      scoped = true;
+      this.scopedAspectManagerBeanName = scopedAspectManagerBeanName;
+      this.domainName = domainName;
+      this.sequence = sequence;
+   }
+   
+   List<BeanMetaData> getBeans()
+   {
+      if (beans == null && factories != null && factories.size() > 0)
+      {
+         beans = new ArrayList<BeanMetaData>();
+         
+         for (AspectManagerAwareBeanMetaDataFactory factory : factories)
+         {
+            if (scopedAspectManagerBeanName != null)
+            {
+               factory.setManagerBean(scopedAspectManagerBeanName);
+               factory.setManagerProperty(null);
+            }
+
+            List<BeanMetaData> mybeans = factory.getBeans();
+            if (mybeans != null && mybeans.size() > 0)
+            {
+               for (BeanMetaData bean : mybeans)
+               {
+                  massageScopedBean(bean);
+               }
+               beans.addAll(mybeans);
+            }
+         }
+      }
+      return beans;
+   }
+
+   private void massageScopedBean(BeanMetaData bean)
+   {
+      if (scoped)
+      {         
+         String name = bean.getName();
+         String newName = "ScopedAlias_" + sequence + "_" + name;
+      
+         BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder(bean);
+         
+         //Set the alias to the original name
+         builder.addAnnotation(new AliasesImpl(name));
+         
+         //Set the domain name
+         if (domainName == null)
+         {
+            throw new IllegalStateException("Should not have null domainName for scoped bean");
+         }
+         builder.addAnnotation(new ClassLoaderDomainScopeImpl(domainName));
+      
+         //set the new name used by the controller for managing beans
+         builder.setName(newName);
+      }
+   }
+}

Copied: trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AspectDeployer.java (from rev 75762, trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/temp/AspectDeployer.java)
===================================================================
--- trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AspectDeployer.java	                        (rev 0)
+++ trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/AspectDeployer.java	2008-07-14 15:31:30 UTC (rev 75778)
@@ -0,0 +1,396 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, Red Hat Middleware LLC., 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.aop.asintegration.jboss5;
+
+import java.io.BufferedInputStream;
+import java.io.DataInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import javassist.bytecode.ClassFile;
+
+import org.jboss.aop.AspectAnnotationLoader;
+import org.jboss.aop.AspectManager;
+import org.jboss.aop.AspectXmlLoader;
+import org.jboss.aop.Domain;
+import org.jboss.aop.classpool.AOPClassLoaderScopingPolicy;
+import org.jboss.aop.domain.DomainInitializer;
+import org.jboss.deployers.spi.DeploymentException;
+import org.jboss.deployers.spi.deployer.DeploymentStages;
+import org.jboss.deployers.vfs.spi.deployer.AbstractVFSRealDeployer;
+import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit;
+import org.jboss.virtual.VirtualFile;
+import org.jboss.virtual.VirtualFileFilter;
+import org.jboss.virtual.VisitorAttributes;
+import org.jboss.virtual.plugins.context.jar.JarUtils;
+import org.jboss.virtual.plugins.vfs.helpers.FilterVirtualFileVisitor;
+import org.jboss.virtual.plugins.vfs.helpers.SuffixesExcludeFilter;
+import org.w3c.dom.Document;
+
+/**
+ * Deployer for Aspects
+ *
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ * @author <a href="mailto:kabir.khan at jboss.org">Kabir Khan</a>
+ * @author adrian at jboss.org
+ */
+public class AspectDeployer extends AbstractVFSRealDeployer
+{
+   private static final String AOP_JAR_SUFFIX = ".aop";
+   private static final String AOP_DD_SUFFIX = "-aop.xml";
+
+   /** The aspect manager */
+   private AspectManager aspectManager;
+   
+   /**
+    * Create a new AspectDeployer.
+    */
+   public AspectDeployer()
+   {
+      setStage(DeploymentStages.POST_CLASSLOADER);
+   }
+
+   /**
+    * Get the aspectManager.
+    * 
+    * @return the aspectManager.
+    */
+   public AspectManager getAspectManager()
+   {
+      return aspectManager;
+   }
+
+   /**
+    * Set the aspectManager.
+    * 
+    * @param aspectManager the aspectManager.
+    */
+   public void setAspectManager(AspectManager aspectManager)
+   {
+      this.aspectManager = aspectManager;
+   }
+
+   /**
+    * Validate the configuration
+    */
+   public void create()
+   {
+      if (aspectManager == null)
+         throw new IllegalStateException("No aspect manager configured");
+   }
+   
+   public void deploy(VFSDeploymentUnit unit) throws DeploymentException
+   {
+      AspectManager manager = getCorrectManager(unit);
+      
+      List<VirtualFile> files = unit.getMetaDataFiles(null, AOP_DD_SUFFIX);
+
+      if (isAopArchiveOrFolder(unit))
+      {
+         deployAnnotations(manager, unit);
+      }
+      
+      if (files.size() > 0)
+      {
+         deployXml(manager, unit, files);
+      }
+   }
+   
+   public void undeploy(VFSDeploymentUnit unit)
+   {
+      try
+      {
+         AspectManager manager = getCorrectManager(unit);
+         List<VirtualFile> files = unit.getMetaDataFiles(null, AOP_DD_SUFFIX);
+   
+         if (isAopArchiveOrFolder(unit))
+         {
+            undeployAnnotations(manager, unit);
+         }
+         
+         if (files.size() > 0)
+         {
+            undeployXml(manager, unit, files);
+         }
+      }
+      finally
+      {
+         if (unit.getTopLevel() == unit)
+         {
+            aspectManager.unregisterClassLoader(unit.getClassLoader());
+         }
+      }
+   }
+
+   private void deployXml(AspectManager manager, VFSDeploymentUnit unit, List<VirtualFile> files) throws DeploymentException
+   {
+      log.info("Deploying xml into " + manager + " for " + unit.getClassLoader());   
+      
+      ArrayList<VirtualFile> deployedFiles = new ArrayList<VirtualFile>(files.size());
+      for (VirtualFile vf : files)
+      {
+         deployedFiles.add(vf);
+         try
+         {
+            log.debug("deploying: " + vf.toURL() + " into " + manager);
+            InputStream is = vf.openStream();
+            try
+            {
+               Document doc = AspectXmlLoader.loadDocument(is);
+               AspectXmlLoader loader = new AspectXmlLoader();
+      
+               loader.setManager(manager);
+               loader.setClassLoader(unit.getClassLoader());
+               loader.deployXML(doc, vf.toURL(), unit.getClassLoader());
+            }
+            finally
+            {
+               is.close();
+            }
+         }
+         catch (Exception e)
+         {
+            //Unwind things already installed, in the reverse order
+            for (int i = deployedFiles.size() - 1 ; i >= 0 ; i--)
+            {
+               undeployXml(manager, deployedFiles.get(i));
+            }
+            
+            throw DeploymentException.rethrowAsDeploymentException("Error deploying xml " + vf.getName() + " into " + manager, e);
+         }
+      }
+   }
+
+   private void undeployXml(AspectManager manager, VFSDeploymentUnit unit, List<VirtualFile> files)
+   {
+      for (VirtualFile vf : files)
+      {
+         undeployXml(manager, vf);
+      }
+   }
+   
+   private void undeployXml(AspectManager manager, VirtualFile vf)
+   {
+      try
+      {
+         log.debug("undeploying: " + vf.toURL() + " from " + manager);
+         InputStream is = vf.openStream();
+         try
+         {
+            Document doc = AspectXmlLoader.loadDocument(is);
+            AspectXmlLoader loader = new AspectXmlLoader();
+            
+            loader.setManager(manager);
+            loader.undeployXML(doc, vf.toURL());
+         }
+         finally
+         {
+            try
+            {
+               is.close();
+            }
+            catch(IOException ignore)
+            {
+            }
+         }
+      }
+      catch (Exception e)
+      {
+         log.warn("Error undeploying xml " + vf.getName() + " from " + manager, e);
+      }
+   }
+
+   private void deployAnnotations(AspectManager manager, VFSDeploymentUnit unit) throws DeploymentException
+   {
+      log.info("Deploying AOP annotations into " + manager + " for " + unit.getClassLoader());   
+
+      AspectAnnotationLoader loader = getAnnotationLoader(manager, unit); 
+      List<VirtualFile> files = getClasses(unit);
+      ArrayList<VirtualFile> deployedFiles = new ArrayList<VirtualFile>(files.size());
+      for(VirtualFile file : files)
+      {
+         try
+         {
+            ClassFile cf = loadClassFile(file);
+            log.debug("Deploying possibly annotated class " + cf.getName() + " into " + manager);
+            loader.deployClassFile(cf);
+         }
+         catch (Exception e)
+         {
+            //Unwind things already installed, in the reverse order
+            for (int i = deployedFiles.size() ; i >= 0 ; i-- )
+            {
+               undeployAnnotation(loader, deployedFiles.get(i));
+            }
+            throw new DeploymentException("Error reading annotations for " + file + " during deployment into " + manager, e);
+         }
+      }
+   }
+   
+   private void undeployAnnotations(AspectManager manager, VFSDeploymentUnit unit)
+   {
+      AspectAnnotationLoader loader = getAnnotationLoader(manager, unit); 
+      List<VirtualFile> files = getClasses(unit);
+      for(VirtualFile file : files)
+      {
+         undeployAnnotation(loader, file);
+      }
+   }
+
+   private void undeployAnnotation(AspectAnnotationLoader loader, VirtualFile file)
+   {
+      try
+      {
+         ClassFile cf = loadClassFile(file);
+         log.debug("Undeploying possibly annotated class " + cf.getName());
+         loader.undeployClassFile(cf);
+      }
+      catch (Exception e)
+      {
+         log.warn("Error reading annotations for " + file, e);
+      }
+   }
+   
+   private AspectAnnotationLoader getAnnotationLoader(AspectManager manager, VFSDeploymentUnit unit)
+   {
+      AspectAnnotationLoader loader = new AspectAnnotationLoader(manager);
+      loader.setClassLoader(unit.getClassLoader());
+      return loader;
+   }
+   
+   private ClassFile loadClassFile(VirtualFile file)
+   {
+      DataInputStream din = null;
+      ClassFile cf = null;
+      try
+      {
+         InputStream in = file.openStream();
+         din = new DataInputStream(new BufferedInputStream(in));
+         cf = new ClassFile(din);
+      }
+      catch (IOException e)
+      {
+         throw new RuntimeException("Error reading " + file, e);
+      }
+      finally
+      {
+         try
+         {
+            din.close();
+         }
+         catch (IOException ignored)
+         {
+         }
+      }
+      
+      return cf;
+   }
+   
+   private List<VirtualFile> getClasses(VFSDeploymentUnit unit)
+   {
+      VisitorAttributes va = new VisitorAttributes();
+      va.setLeavesOnly(true);
+      ClassFileFilter filter = new ClassFileFilter();
+      SuffixesExcludeFilter noJars = new SuffixesExcludeFilter(JarUtils.getSuffixes());
+      va.setRecurseFilter(noJars);
+      FilterVirtualFileVisitor visitor = new FilterVirtualFileVisitor(filter, va);
+
+      for (VirtualFile vf : unit.getClassPath())
+      {
+         try
+         {
+            vf.visit(visitor);
+         }
+         catch (IOException e)
+         {
+            throw new RuntimeException(e);
+         }
+      }
+      return visitor.getMatched();
+
+   }
+   
+   private boolean isAopArchiveOrFolder(VFSDeploymentUnit unit)
+   {
+      String name = unit.getName();
+      
+      //If name is of format 'blah-blah.aop!/' get rid of the trailing '!' and '/', and see if it ends with .aop
+      int index = name.length();
+      if (name.charAt(name.length() - 1) == '/') 
+      {
+         index--;
+      }
+      if (name.charAt(name.length() - 2) == '!')
+      {
+         index--;
+      }
+      String realName = (index == name.length()) ? name : name.substring(0, index);
+      
+      return (realName.endsWith(AOP_JAR_SUFFIX));
+   }
+   
+   private AspectManager getCorrectManager(final VFSDeploymentUnit unit)
+   {
+      //Scoped AOP deployments are only available when deployed as part of a scoped sar, ear etc.
+      //It can contain an aop.xml file, or it can be part of a .aop file
+      //Linking a standalone -aop.xml file onto a scoped deployment is not possible at the moment
+      AOPClassLoaderScopingPolicy policy = AspectManager.getClassLoaderScopingPolicy();
+
+      Domain domain = null;
+      if (policy != null)
+      {
+         if (policy instanceof DomainInitializer == false)
+         {
+            throw new RuntimeException(policy + " must implement DomainInitializer");
+         }
+         DomainInitializer initializer = (DomainInitializer)policy;
+         domain = initializer.initializeDomain(unit); 
+      }
+      
+      if (domain != null)
+      {
+         return domain;
+      }
+      
+      return aspectManager;
+   }
+   
+   private static class ClassFileFilter implements VirtualFileFilter
+   {
+      public boolean accepts(VirtualFile file)
+      {
+         try
+         {
+            return file.isLeaf() && file.getName().endsWith(".class");
+         }
+         catch (IOException e)
+         {
+            throw new RuntimeException("Error visiting file: " + file.getName(), e);
+         }
+      }
+   }
+
+   
+   
+}

Copied: trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/ClassLoaderDomainScope.java (from rev 75762, trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/temp/ClassLoaderDomainScope.java)
===================================================================
--- trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/ClassLoaderDomainScope.java	                        (rev 0)
+++ trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/ClassLoaderDomainScope.java	2008-07-14 15:31:30 UTC (rev 75778)
@@ -0,0 +1,42 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, 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.aop.asintegration.jboss5;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.jboss.metadata.spi.scope.ScopeFactoryLookup;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+ at ScopeFactoryLookup(ClassLoaderDomainScopeFactory.class)
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target({ElementType.TYPE})
+public @interface ClassLoaderDomainScope
+{
+   String value();
+}

Copied: trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/ClassLoaderDomainScopeFactory.java (from rev 75762, trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/temp/ClassLoaderDomainScopeFactory.java)
===================================================================
--- trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/ClassLoaderDomainScopeFactory.java	                        (rev 0)
+++ trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/ClassLoaderDomainScopeFactory.java	2008-07-14 15:31:30 UTC (rev 75778)
@@ -0,0 +1,41 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, 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.aop.asintegration.jboss5;
+
+import org.jboss.metadata.spi.scope.CommonLevels;
+import org.jboss.metadata.spi.scope.Scope;
+import org.jboss.metadata.spi.scope.ScopeFactory;
+import org.jboss.metadata.spi.scope.ScopeLevel;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class ClassLoaderDomainScopeFactory implements ScopeFactory<ClassLoaderDomainScope>
+{
+   public Scope create(ClassLoaderDomainScope annotation)
+   {
+      return new Scope(new ScopeLevel(CommonLevels.APPLICATION.getLevel() + 10, "ClassLoaderDomainScope"), annotation.value());
+   }
+
+}

Copied: trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/ClassLoaderDomainScopeImpl.java (from rev 75762, trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/temp/ClassLoaderDomainScopeImpl.java)
===================================================================
--- trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/ClassLoaderDomainScopeImpl.java	                        (rev 0)
+++ trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/ClassLoaderDomainScopeImpl.java	2008-07-14 15:31:30 UTC (rev 75778)
@@ -0,0 +1,50 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, 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.aop.asintegration.jboss5;
+
+import java.lang.annotation.Annotation;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class ClassLoaderDomainScopeImpl implements ClassLoaderDomainScope
+{
+   String name;
+   
+   public ClassLoaderDomainScopeImpl(String name)
+   {
+      this.name = name;
+   }
+   
+   public String value()
+   {
+      return name;
+   }
+
+   public Class<? extends Annotation> annotationType()
+   {
+      return ClassLoaderDomainScope.class;
+   }
+
+}

Modified: trunk/server/src/etc/conf/default/deployers.xml
===================================================================
--- trunk/server/src/etc/conf/default/deployers.xml	2008-07-14 15:14:00 UTC (rev 75777)
+++ trunk/server/src/etc/conf/default/deployers.xml	2008-07-14 15:31:30 UTC (rev 75778)
@@ -125,7 +125,6 @@
     </bean>
 
     <!-- AOP deployment -->
-    <!-- FIXME Replace with org.jboss.aop.deployers.AspectAppParsingDeployer once AOP is released -->
     <bean name="AspectAppParsingDeployer" class="org.jboss.aop.asintegration.jboss5.AspectAppParsingDeployer"/>
     <bean name="AspectDeployer" class="org.jboss.aop.deployers.AspectDeployer">
        <property name="type">aop</property>
@@ -133,13 +132,21 @@
    </bean>
 
    <!-- Use these instead of AspectDeployer
-   <bean name="AOPMetaDataParser" class="org.jboss.deployers.vfs.spi.deployer.SchemaResolverDeployer">
+   <bean name="AOPXMLMetaDataParserDeployer" class="org.jboss.deployers.vfs.spi.deployer.SchemaResolverDeployer">
       <constructor>
          <parameter>org.jboss.aop.microcontainer.beans.metadata.AOPDeployment</parameter>
       </constructor>
       <property name="suffix">-aop.xml</property>
    </bean>
-   <bean name="AOPUnregisterAMClassLoaderDeployer" class="org.jboss.aop.asintegration.jboss5.temp.AOPClassLoaderDeployer">
+   <bean name="AOPAnnotationMetaDataParserDeployer" class="org.jboss.aop.asintegration.jboss5.temp.AOPAnnotationMetaDataParserDeployer">
+      <constructor>
+         <parameter><inject bean="AOPXMLMetaDataParserDeployer" property="relativeOrder"/></parameter>
+      </constructor>
+   </bean>
+   <bean name="AOPClassLoaderDeployer" class="org.jboss.aop.asintegration.jboss5.temp.AOPClassLoaderDeployer">
+      <constructor>
+         <parameter><inject bean="ClassLoaderDeployer" property="relativeOrder"/></parameter>
+      </constructor>
       <property name="aspectManager"><inject bean="AspectManager" property="aspectManager"/></property>
    </bean>
    <bean name="AOPDeploymentAopMetaDataDeployer" class="org.jboss.aop.asintegration.jboss5.temp.AOPDeploymentAopMetaDataDeployer">




More information about the jboss-cvs-commits mailing list