[jboss-cvs] JBossAS SVN: r91343 - in projects/jboss-jca/trunk/sjc/src/main/java/org/jboss/jca/sjc: deployers/ra and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Jul 16 09:14:43 EDT 2009


Author: jesper.pedersen
Date: 2009-07-16 09:14:43 -0400 (Thu, 16 Jul 2009)
New Revision: 91343

Added:
   projects/jboss-jca/trunk/sjc/src/main/java/org/jboss/jca/sjc/annotationscanner/SecurityActions.java
Modified:
   projects/jboss-jca/trunk/sjc/src/main/java/org/jboss/jca/sjc/annotationscanner/AnnotationScanner.java
   projects/jboss-jca/trunk/sjc/src/main/java/org/jboss/jca/sjc/deployers/ra/RADeployer.java
Log:
[JBJCA-101] SJC/RADeployer: Annotations (Part 2)

Modified: projects/jboss-jca/trunk/sjc/src/main/java/org/jboss/jca/sjc/annotationscanner/AnnotationScanner.java
===================================================================
--- projects/jboss-jca/trunk/sjc/src/main/java/org/jboss/jca/sjc/annotationscanner/AnnotationScanner.java	2009-07-16 12:40:48 UTC (rev 91342)
+++ projects/jboss-jca/trunk/sjc/src/main/java/org/jboss/jca/sjc/annotationscanner/AnnotationScanner.java	2009-07-16 13:14:43 UTC (rev 91343)
@@ -65,14 +65,32 @@
     */
    public static Map<Class, List<Annotation>> scan(URL[] urls)
    {
+      return scan(urls, (ClassLoader)null);
+   }
+
+   /**
+    * Scan
+    * @param urls The URLs with class files
+    * @param cls Additional class loaders
+    * @return The map of annotations
+    */
+   public static Map<Class, List<Annotation>> scan(URL[] urls, ClassLoader... cls)
+   {
       Map<Class, List<Annotation>> result = new HashMap<Class, List<Annotation>>();
 
       long start = System.currentTimeMillis();
 
-      URLClassLoader cl = new URLClassLoader(urls, null);
+      URLClassLoader cl = SecurityActions.createURLCLassLoader(urls, null);
 
       ClassPool cp = new ClassPool();
       cp.appendClassPath(new LoaderClassPath(cl));
+      if (cls != null)
+      {
+         for (ClassLoader c : cls)
+         {
+            cp.appendClassPath(new LoaderClassPath(c));
+         }
+      }
 
       List<String> classes = getClassNames(urls);
       if (classes != null)

Added: projects/jboss-jca/trunk/sjc/src/main/java/org/jboss/jca/sjc/annotationscanner/SecurityActions.java
===================================================================
--- projects/jboss-jca/trunk/sjc/src/main/java/org/jboss/jca/sjc/annotationscanner/SecurityActions.java	                        (rev 0)
+++ projects/jboss-jca/trunk/sjc/src/main/java/org/jboss/jca/sjc/annotationscanner/SecurityActions.java	2009-07-16 13:14:43 UTC (rev 91343)
@@ -0,0 +1,139 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008-2009, 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.jca.sjc.annotationscanner;
+
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.Properties;
+
+/**
+ * Privileged Blocks
+ * @author <a href="mailto:jesper.pedersen at jboss.org">Jesper Pedersen</a>
+ */
+class SecurityActions
+{ 
+   /**
+    * Constructor
+    */
+   private SecurityActions()
+   {
+   }
+
+   /**
+    * Get the thread context class loader
+    * @return The class loader
+    */
+   static ClassLoader getThreadContextClassLoader()
+   {
+      return (ClassLoader)AccessController.doPrivileged(new PrivilegedAction<Object>() 
+      {
+         public Object run()
+         {
+            return Thread.currentThread().getContextClassLoader();
+         }
+      });
+   }
+
+   /**
+    * Set the thread context class loader
+    * @param cl The class loader
+    */
+   static void setThreadContextClassLoader(final ClassLoader cl)
+   {
+      AccessController.doPrivileged(new PrivilegedAction<Object>() 
+      {
+         public Object run()
+         {
+            Thread.currentThread().setContextClassLoader(cl);
+            return null;
+         }
+      });
+   }
+
+   /**
+    * Get the system properties
+    * @return The properties
+    */
+   static Properties getSystemProperties()
+   {
+      return (Properties)AccessController.doPrivileged(new PrivilegedAction<Object>() 
+      {
+         public Object run()
+         {
+            return System.getProperties();
+         }
+      });
+   }
+
+   /**
+    * Get a system property
+    * @param name The property name
+    * @return The property value
+    */
+   static String getSystemProperty(final String name)
+   {
+      return (String)AccessController.doPrivileged(new PrivilegedAction<Object>() 
+      {
+         public Object run()
+         {
+            return System.getProperty(name);
+         }
+      });
+   }
+
+   /**
+    * Set a system property
+    * @param name The property name
+    * @param value The property value
+    */
+   static void setSystemProperty(final String name, final String value)
+   {
+      AccessController.doPrivileged(new PrivilegedAction<Object>() 
+      {
+         public Object run()
+         {
+            System.setProperty(name, value);
+            return null;
+         }
+      });
+   }
+
+   /**
+    * Create an URLClassLoader
+    * @param urls The urls
+    * @param parent The parent class loader
+    * @return The class loader
+    */
+   static URLClassLoader createURLCLassLoader(final URL[] urls, final ClassLoader parent)
+   {
+      return (URLClassLoader)AccessController.doPrivileged(new PrivilegedAction<Object>() 
+      {
+         public Object run()
+         {
+            return new URLClassLoader(urls, parent);
+         }
+      });
+   }
+}

Modified: projects/jboss-jca/trunk/sjc/src/main/java/org/jboss/jca/sjc/deployers/ra/RADeployer.java
===================================================================
--- projects/jboss-jca/trunk/sjc/src/main/java/org/jboss/jca/sjc/deployers/ra/RADeployer.java	2009-07-16 12:40:48 UTC (rev 91342)
+++ projects/jboss-jca/trunk/sjc/src/main/java/org/jboss/jca/sjc/deployers/ra/RADeployer.java	2009-07-16 13:14:43 UTC (rev 91343)
@@ -75,68 +75,77 @@
 
       log.info("Deploying: " + f.getAbsolutePath());
 
-      File root = null;
+      ClassLoader oldTCCL = SecurityActions.getThreadContextClassLoader();
+      try
+      {
+         File root = null;
 
-      if (f.isFile())
-      {
-         File destination = new File(SecurityActions.getSystemProperty("jboss.jca.home"), "/tmp/");
-         root = ExtractUtil.extract(f, destination);
-      }
-      else
-      {
-         root = f;
-      }
+         if (f.isFile())
+         {
+            File destination = new File(SecurityActions.getSystemProperty("jboss.jca.home"), "/tmp/");
+            root = ExtractUtil.extract(f, destination);
+         }
+         else
+         {
+            root = f;
+         }
       
-      // Create classloader
-      URL[] urls = getUrls(root);
-      URLClassLoader cl = SecurityActions.createURLCLassLoader(urls, parent);
+         // Create classloader
+         URL[] urls = getUrls(root);
+         URLClassLoader cl = SecurityActions.createURLCLassLoader(urls, parent);
+         SecurityActions.setThreadContextClassLoader(cl);
 
-      // Parse metadata
-      ConnectorMetaData cmd = Metadata.getStandardMetaData(root);
-      JBossRAMetaData jrmd = Metadata.getJBossMetaData(root);
+         // Parse metadata
+         ConnectorMetaData cmd = Metadata.getStandardMetaData(root);
+         JBossRAMetaData jrmd = Metadata.getJBossMetaData(root);
 
-      // Process annotations
-      if (cmd == null || cmd.is16())
-      {
-         Map<Class, List<Annotation>> annotations = AnnotationScanner.scan(cl.getURLs());
+         // Process annotations
+         if (cmd == null || cmd.is16())
+         {
+            Map<Class, List<Annotation>> annotations = AnnotationScanner.scan(cl.getURLs(), cl);
 
-         boolean isMetadataComplete = false;
-         if (cmd != null)
-         {
-            if (cmd instanceof JCA16MetaData)
+            boolean isMetadataComplete = false;
+            if (cmd != null)
             {
-               JCA16MetaData jmd = (JCA16MetaData)cmd;
-               isMetadataComplete = jmd.isMetadataComplete();
+               if (cmd instanceof JCA16MetaData)
+               {
+                  JCA16MetaData jmd = (JCA16MetaData)cmd;
+                  isMetadataComplete = jmd.isMetadataComplete();
+               }
+               else if (cmd instanceof JCA16DefaultNSMetaData)
+               {
+                  JCA16DefaultNSMetaData jmd = (JCA16DefaultNSMetaData)cmd;
+                  isMetadataComplete = jmd.isMetadataComplete();
+               }
+               else if (cmd instanceof JCA16DTDMetaData)
+               {
+                  JCA16DTDMetaData jmd = (JCA16DTDMetaData)cmd;
+                  isMetadataComplete = jmd.isMetadataComplete();
+               }
             }
-            else if (cmd instanceof JCA16DefaultNSMetaData)
-            {
-               JCA16DefaultNSMetaData jmd = (JCA16DefaultNSMetaData)cmd;
-               isMetadataComplete = jmd.isMetadataComplete();
-            }
-            else if (cmd instanceof JCA16DTDMetaData)
-            {
-               JCA16DTDMetaData jmd = (JCA16DTDMetaData)cmd;
-               isMetadataComplete = jmd.isMetadataComplete();
-            }
+            
+            if (cmd == null || !isMetadataComplete)
+               cmd = Annotations.process(cmd, annotations);
          }
+         
+         // Merge metadata
+         
+         // Validate metadata
+         
+         // Create objects
+         
+         // Inject values
 
-         if (cmd == null || !isMetadataComplete)
-            cmd = Annotations.process(cmd, annotations);
+         // Bean validation
+         
+         // Activate deployment
+
+         return new RADeployment(f.getName(), cl);
       }
-
-      // Merge metadata
-
-      // Validate metadata
-
-      // Create objects
-
-      // Inject values
-
-      // Bean validation
-
-      // Activate deployment
-
-      return new RADeployment(f.getName(), cl);
+      finally
+      {
+         SecurityActions.setThreadContextClassLoader(oldTCCL);
+      }
    }
 
    /**




More information about the jboss-cvs-commits mailing list