[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