[jboss-cvs] JBossAS SVN: r111076 - in projects/jboss-deployers/trunk: deployers-impl/src/main/java/org/jboss/deployers/plugins/classloading and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Mar 31 09:08:41 EDT 2011


Author: alesj
Date: 2011-03-31 09:08:41 -0400 (Thu, 31 Mar 2011)
New Revision: 111076

Added:
   projects/jboss-deployers/trunk/deployers-impl/src/main/java/org/jboss/deployers/plugins/classloading/AbstractTranslatorsDeployer.java
Modified:
   projects/jboss-deployers/trunk/pom.xml
Log:
[JBDEPLOY-273]; initial declarative translator support; TODO -- tests.


Copied: projects/jboss-deployers/trunk/deployers-impl/src/main/java/org/jboss/deployers/plugins/classloading/AbstractTranslatorsDeployer.java (from rev 110967, projects/jboss-deployers/trunk/deployers-impl/src/main/java/org/jboss/deployers/plugins/classloading/AbstractLevelClassLoaderSystemDeployer.java)
===================================================================
--- projects/jboss-deployers/trunk/deployers-impl/src/main/java/org/jboss/deployers/plugins/classloading/AbstractTranslatorsDeployer.java	                        (rev 0)
+++ projects/jboss-deployers/trunk/deployers-impl/src/main/java/org/jboss/deployers/plugins/classloading/AbstractTranslatorsDeployer.java	2011-03-31 13:08:41 UTC (rev 111076)
@@ -0,0 +1,161 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2007, 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.deployers.plugins.classloading;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.jboss.classloader.spi.ClassLoaderDomain;
+import org.jboss.classloader.spi.ClassLoaderPolicy;
+import org.jboss.classloader.spi.ClassLoaderSystem;
+import org.jboss.classloading.spi.dependency.Module;
+import org.jboss.classloading.spi.dependency.policy.ClassLoaderPolicyModule;
+import org.jboss.classloading.spi.metadata.ClassLoadingTranslatorMetaData;
+import org.jboss.classloading.spi.metadata.ClassLoadingTranslatorsMetaData;
+import org.jboss.classloading.spi.metadata.TranslatorScope;
+import org.jboss.classloading.spi.metadata.helpers.ReflectionTranslator;
+import org.jboss.deployers.spi.DeploymentException;
+import org.jboss.deployers.spi.deployer.DeploymentStages;
+import org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer;
+import org.jboss.deployers.structure.spi.DeploymentUnit;
+import org.jboss.util.loading.Translator;
+
+/**
+ * AbstractTranslatorsDeployer.
+ * 
+ * @author <a href="ales.justin at jboss.com">Ales Justin</a>
+ * @version $Revision: 1.1 $
+ */
+public class AbstractTranslatorsDeployer extends AbstractSimpleRealDeployer<ClassLoadingTranslatorsMetaData>
+{
+   /** Attachment key */
+   public static final String TRANSLATORS_KEY = "TRANSLATORS_KEY";
+
+   /** The classloader system */
+   private ClassLoaderSystem system;
+
+   public AbstractTranslatorsDeployer()
+   {
+      super(ClassLoadingTranslatorsMetaData.class);
+      // add this deployer right after ClassLoader is created
+      addInput(ClassLoader.class);
+      setStage(DeploymentStages.CLASSLOADER);
+   }
+
+   @Override
+   public void deploy(DeploymentUnit unit, ClassLoadingTranslatorsMetaData deployment) throws DeploymentException
+   {
+      Module module = unit.getAttachment(Module.class);
+      if (module == null || (module instanceof ClassLoaderPolicyModule == false))
+         return;
+
+      Map<Translator, TranslatorScope> added = new HashMap<Translator, TranslatorScope>();
+      try
+      {
+         List<ClassLoadingTranslatorMetaData> translators = deployment.getTranslators();
+         if (translators != null)
+         {
+            ClassLoaderPolicyModule clpm = (ClassLoaderPolicyModule) module;
+            ClassLoaderDomain domain = system.getDomain(module.getDeterminedDomainName());
+            ClassLoaderPolicy policy = clpm.getPolicy();
+            ClassLoader cl = unit.getClassLoader();
+
+            for (ClassLoadingTranslatorMetaData cltmd : translators)
+            {
+               TranslatorScope scope = cltmd.getScope();
+               if (scope == null)
+                  throw new IllegalArgumentException("Null scope for: " + cltmd);
+
+               String className = cltmd.getClassName();
+               Object instance = cl.loadClass(className).newInstance();
+               String methodName = cltmd.getMethod();
+               Translator translator;
+               if (methodName != null)
+                  translator = new ReflectionTranslator(instance, methodName);
+               else
+                  translator = Translator.class.cast(instance);
+
+               scope.addTranslator(system, domain, policy, translator);
+               added.put(translator, scope);
+            }
+
+            unit.addAttachment(TRANSLATORS_KEY, added);
+         }
+      }
+      catch (Exception e)
+      {
+         ClassLoaderPolicyModule clpm = (ClassLoaderPolicyModule) module;
+         ClassLoaderDomain domain = system.getDomain(module.getDeterminedDomainName());
+         ClassLoaderPolicy policy = clpm.getPolicy();
+
+         for (Map.Entry<Translator, TranslatorScope> entry : added.entrySet())
+         {
+            entry.getValue().removeTranslator(system, domain, policy, entry.getKey());
+         }
+
+         throw DeploymentException.rethrowAsDeploymentException("Error adding translators.", e);
+      }
+   }
+
+   @SuppressWarnings({"unchecked"})
+   @Override
+   public void undeploy(DeploymentUnit unit, ClassLoadingTranslatorsMetaData deployment)
+   {
+      Module module = unit.getAttachment(Module.class);
+      if (module == null || (module instanceof ClassLoaderPolicyModule == false))
+         return;
+
+      Map<Translator, TranslatorScope> added = unit.getAttachment(TRANSLATORS_KEY, Map.class);
+      if (added != null)
+      {
+         ClassLoaderPolicyModule clpm = (ClassLoaderPolicyModule) module;
+         ClassLoaderDomain domain = system.getDomain(module.getDeterminedDomainName());
+         ClassLoaderPolicy policy = clpm.getPolicy();
+
+         for (Map.Entry<Translator, TranslatorScope> entry : added.entrySet())
+         {
+            entry.getValue().removeTranslator(system, domain, policy, entry.getKey());
+         }
+      }
+   }
+
+   /**
+    * Get the system.
+    * 
+    * @return the system.
+    */
+   public ClassLoaderSystem getSystem()
+   {
+      return system;
+   }
+
+   /**
+    * Set the system.
+    * 
+    * @param system the system.
+    */
+   public void setSystem(ClassLoaderSystem system)
+   {
+      this.system = system;
+   }
+}

Modified: projects/jboss-deployers/trunk/pom.xml
===================================================================
--- projects/jboss-deployers/trunk/pom.xml	2011-03-31 12:49:42 UTC (rev 111075)
+++ projects/jboss-deployers/trunk/pom.xml	2011-03-31 13:08:41 UTC (rev 111076)
@@ -27,7 +27,7 @@
     <version.jboss.man>2.1.1.SP2</version.jboss.man>
     <version.jboss.mdr>2.2.0.GA</version.jboss.mdr>
     <version.jboss.kernel>2.2.0.GA</version.jboss.kernel>
-    <version.jboss.classloader>2.2.0.GA</version.jboss.classloader>
+    <version.jboss.classloader>2.2.0-SNAPSHOT</version.jboss.classloader>
     <version.jboss.scanning>1.0.0.Alpha6</version.jboss.scanning>
     <version.jboss.classloading.spi>6.0.0-Alpha8</version.jboss.classloading.spi>
     <version.jboss.common.core>2.2.17.GA</version.jboss.common.core>



More information about the jboss-cvs-commits mailing list