[jboss-cvs] JBossAS SVN: r86041 - in projects/aop/branches/Branch_2_1: deployers and 8 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed Mar 18 06:22:30 EDT 2009
Author: stalep
Date: 2009-03-18 06:22:30 -0400 (Wed, 18 Mar 2009)
New Revision: 86041
Added:
projects/aop/branches/Branch_2_1/deployers/
projects/aop/branches/Branch_2_1/deployers/pom.xml
projects/aop/branches/Branch_2_1/deployers/src/
projects/aop/branches/Branch_2_1/deployers/src/main/
projects/aop/branches/Branch_2_1/deployers/src/main/java/
projects/aop/branches/Branch_2_1/deployers/src/main/java/org/
projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/
projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/
projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/
projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/
projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/AOPAnnotationMetaDataParserDeployer.java
projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/AOPClassLoaderDeployer.java
projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/AOPDeploymentAopMetaDataDeployer.java
projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/AbstractAopMetaDataDeployer.java
projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/AliasesImpl.java
projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/AopMetaDataDeployerOutput.java
projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/BeansDeploymentAopMetaDataDeployer.java
projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/ClassLoaderDomainScope.java
projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/ClassLoaderDomainScopeFactory.java
projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/ClassLoaderDomainScopeImpl.java
Modified:
projects/aop/branches/Branch_2_1/pom.xml
Log:
[JBAOP-708]
added aop deployers from as repo
Added: projects/aop/branches/Branch_2_1/deployers/pom.xml
===================================================================
--- projects/aop/branches/Branch_2_1/deployers/pom.xml (rev 0)
+++ projects/aop/branches/Branch_2_1/deployers/pom.xml 2009-03-18 10:22:30 UTC (rev 86041)
@@ -0,0 +1,60 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <parent>
+ <artifactId>jboss-aop-parent</artifactId>
+ <groupId>org.jboss.aop</groupId>
+ <version>2.1.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>jboss-aop-deployers</artifactId>
+ <name>JBoss AOP Deployers</name>
+ <description>JBoss AOP Deployers</description>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.4.3</version>
+ <configuration>
+ <testFailureIgnore>true</testFailureIgnore>
+ <forkMode>always</forkMode>
+ <redirectTestOutputToFile>true</redirectTestOutputToFile>
+ <skip>true</skip>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.jboss.aop</groupId>
+ <artifactId>jboss-aop</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.aop</groupId>
+ <artifactId>jboss-aop-asintegration-mc</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss</groupId>
+ <artifactId>jboss-vfs</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-kernel</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-aop-mc-int</artifactId>
+ </dependency>
+ </dependencies>
+</project>
Added: projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/AOPAnnotationMetaDataParserDeployer.java
===================================================================
--- projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/AOPAnnotationMetaDataParserDeployer.java (rev 0)
+++ projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/AOPAnnotationMetaDataParserDeployer.java 2009-03-18 10:22:30 UTC (rev 86041)
@@ -0,0 +1,188 @@
+/*
+* 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: 82920 $
+ */
+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 .aop: " + 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.addAttachment(AOPDeployment.class.getName(), deployment, AOPDeployment.class);
+ }
+ if (deployment.getBeanFactories() == null)
+ {
+ deployment.setBeanFactories(new ArrayList<BeanMetaDataFactory>());
+ }
+ 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);
+ }
+ }
+ }
+}
Added: projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/AOPClassLoaderDeployer.java
===================================================================
--- projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/AOPClassLoaderDeployer.java (rev 0)
+++ projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/AOPClassLoaderDeployer.java 2009-03-18 10:22:30 UTC (rev 86041)
@@ -0,0 +1,82 @@
+/*
+* 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.deployers.spi.DeploymentException;
+import org.jboss.deployers.spi.deployer.DeploymentStages;
+import org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer;
+import org.jboss.deployers.structure.spi.DeploymentUnit;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 82920 $
+ */
+public class AOPClassLoaderDeployer extends AbstractRealDeployer
+{
+ AspectManager aspectManager;
+
+ public AOPClassLoaderDeployer()
+ {
+ setStage(DeploymentStages.CLASSLOADER);
+
+ //This makes it come after the ClassLoaderDeployer
+ addInput(ClassLoader.class);
+ }
+
+ public AspectManager getAspectManager()
+ {
+ return aspectManager;
+ }
+
+ public void setAspectManager(AspectManager aspectManager)
+ {
+ this.aspectManager = aspectManager;
+ }
+
+ @Override
+ protected void internalDeploy(DeploymentUnit 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
+
+ AspectManager manager = aspectManager;
+ Domain domain = AOPClassLoaderInitializer.initializeForUnit(unit);
+ if (domain != null)
+ {
+ manager = domain;
+ }
+ log.debug("Adding AspectManager attachment " + manager + " for " + unit);
+ unit.addAttachment(AspectManager.class, manager);
+ }
+
+ @Override
+ public void internalUndeploy(DeploymentUnit unit)
+ {
+ AOPClassLoaderInitializer.unregisterLoaders(aspectManager, unit);
+ }
+
+
+
+}
Added: projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/AOPDeploymentAopMetaDataDeployer.java
===================================================================
--- projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/AOPDeploymentAopMetaDataDeployer.java (rev 0)
+++ projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/AOPDeploymentAopMetaDataDeployer.java 2009-03-18 10:22:30 UTC (rev 86041)
@@ -0,0 +1,61 @@
+/*
+* 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 in a -aop.xml or .aop
+ *
+ * @author <a href="mailto:kabir.khan at jboss.org">Kabir Khan</a>
+ */
+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();
+ }
+}
Added: projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/AbstractAopMetaDataDeployer.java
===================================================================
--- projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/AbstractAopMetaDataDeployer.java (rev 0)
+++ projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/AbstractAopMetaDataDeployer.java 2009-03-18 10:22:30 UTC (rev 86041)
@@ -0,0 +1,554 @@
+/*
+* 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.Collection;
+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.dependency.spi.ScopeInfo;
+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;
+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;
+
+/**
+ * Deployer for deployments containing AOP metadata. It makes sure that the metadata is deployed to the
+ * right aop domain in the case of scoped classloaders. The AOP metadata is stripped out of the deployment
+ * to avoid deploying it twice.
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 82920 $
+ */
+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.addAttachment(AopMetaDataDeployerOutput.class, output);
+
+ if (extractAopBeanMetaDataFactories(unit, deployment, output))
+ {
+ AspectManager correctManager = unit.getAttachment(AspectManager.class);
+ log.debug("Got AspectManager attachment " + correctManager + " for " + unit);
+ 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);
+ }
+ }
+ log.debug("Finished deploying " + unit);
+ }
+
+
+ /**
+ * 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);
+ }
+
+ 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());
+ unit.getMutableMetaData().addMetaData(scopedManager, AspectManager.class);
+
+ try
+ {
+ controller.install(builder.getBeanMetaData(), scopedManager);
+ return name;
+ }
+ catch (Throwable e)
+ {
+ 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);
+ unit.getMutableMetaData().addAnnotation(output.getScopeAnnotation());
+ }
+
+ 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)
+ {
+ //Register the component deployment context so we get the correct mutable metadata scope
+ //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);
+ done.add(bean);
+ }
+ finally
+ {
+ //Unregister the component deployment context so that this bean does not get deployed
+ //again by the real BeanMetaDataDeployer
+ undeployComponentDeploymentContext(componentUnit, 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)
+ {
+ if (output != null)
+ {
+ 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);
+ }
+ }
+ }
+ }
+
+ /**
+ * Wrap the deployment unit in a component deployment unit similar to what the KernelDeploymentDeployer does
+ */
+ private FakeComponentUnit deployComponentDeploymentContext(VFSDeploymentUnit unit, BeanMetaData deployment)
+ {
+ //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(FakeComponentUnit unit, BeanMetaData bean)
+ {
+ unit.cleanup();
+ }
+
+ private class MyBeanMetaDataDeployer
+ {
+ /**
+ * Copied from the real org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataDeployer
+ */
+ private void deploy(FakeComponentUnit 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);
+ //Make sure that the metadata from the deployment gets put into the context
+ ScopeInfo scopeInfo = context.getScopeInfo();
+ if (scopeInfo != null)
+ {
+ mergeScopes(scopeInfo.getScope(), unit.getScope());
+ 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());
+ 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
+ * Merge scope keys.
+ *
+ * @param contextKey the context key
+ * @param unitKey the unit key
+ */
+ protected void mergeScopes(ScopeKey contextKey, ScopeKey unitKey)
+ {
+ if (contextKey == null)
+ return;
+ if (unitKey == null)
+ return;
+
+ Collection<Scope> unitScopes = unitKey.getScopes();
+ if (unitScopes == null || unitScopes.isEmpty())
+ return;
+
+ for (Scope scope : unitScopes)
+ contextKey.addScope(scope);
+ }
+
+ /**
+ * 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 FakeComponentUnit unit;
+
+ /**
+ * Create a new DeploymentClassLoaderMetaData.
+ *
+ * @param unit the deployment unit
+ */
+ public DeploymentClassLoaderMetaData(FakeComponentUnit unit)
+ {
+ if (unit == null)
+ throw new IllegalArgumentException("Null unit");
+ this.unit = unit;
+ }
+
+ @Override
+ public ValueMetaData getClassLoader()
+ {
+ 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: 82920 $
+ */
+ 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)
+ {
+ }
+ }
+ }
+}
Added: projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/AliasesImpl.java
===================================================================
--- projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/AliasesImpl.java (rev 0)
+++ projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/AliasesImpl.java 2009-03-18 10:22:30 UTC (rev 86041)
@@ -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: 82920 $
+ */
+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;
+ }
+
+}
Added: projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/AopMetaDataDeployerOutput.java
===================================================================
--- projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/AopMetaDataDeployerOutput.java (rev 0)
+++ projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/AopMetaDataDeployerOutput.java 2009-03-18 10:22:30 UTC (rev 86041)
@@ -0,0 +1,143 @@
+/*
+* 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 java.util.Set;
+
+import org.jboss.aop.microcontainer.beans.Aspect;
+import org.jboss.aop.microcontainer.beans.metadata.AspectManagerAwareBeanMetaDataFactory;
+import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.beans.metadata.spi.PropertyMetaData;
+import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 82920 $
+ */
+class AopMetaDataDeployerOutput
+{
+ List<AspectManagerAwareBeanMetaDataFactory> factories;
+ List<BeanMetaData> beans;
+ boolean scoped;
+ String scopedAspectManagerBeanName;
+ String domainName;
+ int sequence;
+ ClassLoaderDomainScope scopeAnnotation;
+
+ AopMetaDataDeployerOutput()
+ {
+
+ }
+
+ String getScopedAspectManagerBeanName()
+ {
+ return scopedAspectManagerBeanName;
+ }
+
+ ClassLoaderDomainScope getScopeAnnotation()
+ {
+ return scopeAnnotation;
+ }
+
+ 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;
+ if (domainName == null)
+ {
+ throw new IllegalStateException("Should not have null domainName for scoped bean");
+ }
+ scopeAnnotation = new ClassLoaderDomainScopeImpl(domainName);
+ }
+
+ 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
+ builder.addAnnotation(scopeAnnotation);
+
+ //set the new name used by the controller for managing beans
+ builder.setName(newName);
+
+ //Debug stuff
+ if (bean.getBean().equals(Aspect.class.getName()))
+ {
+ Object scope = null;
+ Set<PropertyMetaData> properties = bean.getProperties();
+ for (PropertyMetaData property : properties)
+ {
+ if (property.getName().equals("scope"))
+ {
+ scope = property.getValue().getUnderlyingValue();
+ }
+ }
+ }
+ }
+ }
+}
Added: projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/BeansDeploymentAopMetaDataDeployer.java
===================================================================
--- projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/BeansDeploymentAopMetaDataDeployer.java (rev 0)
+++ projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/BeansDeploymentAopMetaDataDeployer.java 2009-03-18 10:22:30 UTC (rev 86041)
@@ -0,0 +1,62 @@
+/*
+* 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.beans.metadata.spi.BeanMetaDataFactory;
+import org.jboss.deployers.spi.DeploymentException;
+import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit;
+import org.jboss.kernel.spi.deployment.KernelDeployment;
+
+/**
+ * Deployer for Aspects in a -beans.xml
+ *
+ * @author <a href="mailto:kabir.khan at jboss.org">Kabir Khan</a>
+ */
+public class BeansDeploymentAopMetaDataDeployer extends AbstractAopMetaDataDeployer<KernelDeployment>
+{
+ public BeansDeploymentAopMetaDataDeployer()
+ {
+ super(KernelDeployment.class);
+ }
+
+ @Override
+ public void deploy(VFSDeploymentUnit unit, KernelDeployment kernelDeployment) throws DeploymentException
+ {
+ super.deploy(unit, kernelDeployment);
+ }
+
+ @Override
+ public void undeploy(VFSDeploymentUnit unit, KernelDeployment kernelDeployment)
+ {
+ super.undeploy(unit, kernelDeployment);
+ }
+
+
+ @Override
+ protected List<BeanMetaDataFactory> getFactories(KernelDeployment kernelDeployment)
+ {
+ return kernelDeployment.getBeanFactories();
+ }
+
+}
Added: projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/ClassLoaderDomainScope.java
===================================================================
--- projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/ClassLoaderDomainScope.java (rev 0)
+++ projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/ClassLoaderDomainScope.java 2009-03-18 10:22:30 UTC (rev 86041)
@@ -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: 82920 $
+ */
+ at ScopeFactoryLookup(ClassLoaderDomainScopeFactory.class)
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target({ElementType.TYPE})
+public @interface ClassLoaderDomainScope
+{
+ String value();
+}
Added: projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/ClassLoaderDomainScopeFactory.java
===================================================================
--- projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/ClassLoaderDomainScopeFactory.java (rev 0)
+++ projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/ClassLoaderDomainScopeFactory.java 2009-03-18 10:22:30 UTC (rev 86041)
@@ -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: 82920 $
+ */
+public class ClassLoaderDomainScopeFactory implements ScopeFactory<ClassLoaderDomainScope>
+{
+ public Scope create(ClassLoaderDomainScope annotation)
+ {
+ return new Scope(new ScopeLevel(CommonLevels.APPLICATION.getLevel() + 10, "ClassLoaderDomainScope"), annotation.value());
+ }
+
+}
Added: projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/ClassLoaderDomainScopeImpl.java
===================================================================
--- projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/ClassLoaderDomainScopeImpl.java (rev 0)
+++ projects/aop/branches/Branch_2_1/deployers/src/main/java/org/jboss/aop/asintegration/jboss5/ClassLoaderDomainScopeImpl.java 2009-03-18 10:22:30 UTC (rev 86041)
@@ -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: 82920 $
+ */
+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: projects/aop/branches/Branch_2_1/pom.xml
===================================================================
--- projects/aop/branches/Branch_2_1/pom.xml 2009-03-18 10:19:40 UTC (rev 86040)
+++ projects/aop/branches/Branch_2_1/pom.xml 2009-03-18 10:22:30 UTC (rev 86041)
@@ -29,6 +29,8 @@
<version.org.jboss.integration>5.0.3.GA</version.org.jboss.integration>
<version.org.jboss.jboss-reflect>2.0.2.GA</version.org.jboss.jboss-reflect>
<version.org.jboss.jboss-vfs>2.1.0.GA</version.org.jboss.jboss-vfs>
+ <version.org.jboss.microcontainer.jboss-kernel>2.0.4.GA</version.org.jboss.microcontainer.jboss-kernel>
+ <version.org.jboss.microcontainer.jboss-aop-mc-int>2.0.4.GA</version.org.jboss.microcontainer.jboss-aop-mc-int>
<version.org.jboss.logging>2.0.5.GA</version.org.jboss.logging>
<version.org.jboss.man>2.0.0.GA</version.org.jboss.man>
<version.org.jboss.mdr>2.0.1.GA</version.org.jboss.mdr>
@@ -82,6 +84,7 @@
<module>asintegration-jmx</module>
<module>asintegration-mc</module>
<module>aophelper</module>
+ <module>deployers</module>
<module>build</module>
</modules>
@@ -411,6 +414,16 @@
<version>${version.org.jboss.integration}</version>
</dependency>
<dependency>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-kernel</artifactId>
+ <version>${version.org.jboss.microcontainer.jboss-kernel}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-aop-mc-int</artifactId>
+ <version>${version.org.jboss.microcontainer.jboss-aop-mc-int}</version>
+ </dependency>
+ <dependency>
<groupId>org.jboss.javaee</groupId>
<artifactId>jboss-jca-api</artifactId>
<version>1.5.0.CR2</version>
More information about the jboss-cvs-commits
mailing list