[jboss-dev-forums] [Design of JBoss jBPM] - Re: jBPM Classloading
bwand
do-not-reply at jboss.com
Thu Mar 13 12:35:03 EDT 2008
Hi, I have refactored the code. Now it uses the JbpmConfiguration.Configs class to get the properties. I paste the complete ClassLoaderUtil class.
|
| package org.jbpm.util;
|
| import java.io.IOException;
| import java.io.InputStream;
| import java.util.Properties;
|
| import org.apache.commons.logging.Log;
| import org.apache.commons.logging.LogFactory;
| import org.jbpm.JbpmConfiguration;
| import org.jbpm.JbpmException;
| import org.jbpm.graph.def.ProcessDefinition;
| import org.jbpm.instantiation.ProcessClassLoader;
|
| /**
| * provides centralized classloader lookup.
| */
| public class ClassLoaderUtil {
| private static Log log = LogFactory.getLog(ClassLoaderUtil.class);
|
| public static Class loadClass(String className) {
| try {
| return getClassLoader().loadClass(className);
| } catch (ClassNotFoundException e) {
| throw new JbpmException("class not found '" + className + "'", e);
| }
| }
|
| public static ClassLoader getClassLoader() {
| if (JbpmConfiguration.Configs.hasObject("jbpm.classloader")) {
| String jbpmClassloader = JbpmConfiguration.Configs.getString("jbpm.classloader");
| String jbpmClassloaderClassname = JbpmConfiguration.Configs.getString("jbpm.classloader.classname");
|
| if (jbpmClassloader.equals("jbpm")) {
| return ClassLoaderUtil.class.getClassLoader();
| } else if (jbpmClassloader.equals("context")) {
| return Thread.currentThread().getContextClassLoader();
| } else if (jbpmClassloader.equals("custom")) {
| try {
| if (jbpmClassloaderClassname == null) {
| throw new JbpmException(
| "'jbpm.classloader' property set to 'custom' but 'jbpm.classloader.classname' is empty!");
| }
| return (ClassLoader) Thread.currentThread().getContextClassLoader().loadClass(
| jbpmClassloaderClassname).newInstance();
| } catch (InstantiationException e) {
| throw new JbpmException("Error instantiating custom classloader " + jbpmClassloaderClassname, e);
| } catch (IllegalAccessException e) {
| throw new JbpmException("Error accessing custom classloader " + jbpmClassloaderClassname, e);
| } catch (ClassNotFoundException e) {
| throw new JbpmException("Custom classloader " + jbpmClassloaderClassname + " not found ", e);
| }
| } else {
| throw new JbpmException("'jbpm.classloader' property set to '" + jbpmClassloader
| + "' but only the values 'jbpm'/'context'/'custom' are supported!");
| }
| } else {
| return ClassLoaderUtil.class.getClassLoader();
| }
| }
|
| public static InputStream getStream(String resource) {
| return getClassLoader().getResourceAsStream(resource);
| }
|
| public static Properties getProperties(String resource) {
| Properties properties = new Properties();
| try {
| properties.load(getStream(resource));
| } catch (IOException e) {
| throw new JbpmException("couldn't load properties file '" + resource + "'", e);
| }
| return properties;
| }
|
| /**
| * searches the given resource, first on the root of the classpath and if
| * not not found there, in the given directory. public static InputStream
| * getStream(String resource, String directory) { InputStream is =
| * getClassLoader().getResourceAsStream(resource); if (is==null) { is =
| * getClassLoader().getResourceAsStream(directory+"/"+resource); } return
| * is; }
| *
| * public static Properties getProperties(String resource, String directory) {
| * Properties properties = new Properties(); try {
| * properties.load(getStream(resource, directory)); } catch (IOException e) {
| * throw new JbpmException("couldn't load properties file '"+resource+"'",
| * e); } return properties; }
| */
|
| public static ClassLoader getProcessClassLoader(ProcessDefinition processDefinition) {
| return new ProcessClassLoader(getClassLoader(), processDefinition);
| }
|
| }
|
Since this is my only patch I will not need committers access. Koen you will take care of this patch? Does this match your expectations?
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4136377#4136377
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4136377
More information about the jboss-dev-forums
mailing list