[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