[jbpm-commits] JBoss JBPM SVN: r5669 - in jbpm4/trunk/modules: jpdl/src/main/java/org/jbpm/jpdl/internal/activity and 21 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Fri Sep 25 10:04:46 EDT 2009


Author: tom.baeyens at jboss.com
Date: 2009-09-25 10:04:45 -0400 (Fri, 25 Sep 2009)
New Revision: 5669

Added:
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlBindingsParser.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/JbpmClassNotFoundException.java
   jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/classloading/
   jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/classloading/DelayedInstantiationTest.java
Removed:
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/CustomActivity.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/BindingsParser.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/hibernate/PvmNamingStrategy.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ObjectReference.java
Modified:
   jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/Configuration.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/CustomBinding.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/CompositeBuilder.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/CompositeExceptionHandlerBuilder.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/EventBuilder.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/EventExceptionHandlerBuilder.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/ExceptionHandlerBuilder.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/FlowBuilder.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/ObservableBuilder.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/TimerBuilder.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/GetStartFormResourceNameCmd.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/hibernate/ConverterType.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ActivityImpl.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventImpl.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventListenerReference.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExceptionHandlerImpl.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteActivity.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteEventListener.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/Signal.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/ProcessDeployer.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/stream/ResourceStreamInput.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/LifeCycleParser.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/ReflectUtil.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/WireContext.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/WireDefinition.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/AbstractCollectionBinding.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/HibernateConfigurationBinding.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/ScriptManagerBinding.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/TypesBinding.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/ClassDescriptor.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/ClassLoaderDescriptor.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/CollectionDescriptor.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/HibernateConfigurationDescriptor.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/ObjectDescriptor.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/PropertiesDescriptor.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/ReferenceDescriptor.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/operation/FieldOperation.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/xml/BindingParser.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/xml/WireParser.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/xml/Parse.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/xml/Parser.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/xml/ProblemList.java
   jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/activities/PrintLnBuilder.java
   jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/builder/BuilderTest.java
   jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/builder/TestBehaviourBuilder.java
   jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/internal/wire/ObjectWireTest.java
Log:
JBPM-2430 first cleanup of classloading

Modified: jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/Configuration.java
===================================================================
--- jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/Configuration.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/Configuration.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -86,10 +86,7 @@
   protected Configuration instantiate(String className) {
     Configuration implementation;
     try {
-      Class<?> implementationClass = Thread
-            .currentThread()
-            .getContextClassLoader()
-            .loadClass(className);
+      Class<?> implementationClass = Class.forName(className, true, getClassLoader()); 
       implementation = (Configuration) implementationClass.newInstance();
     } catch (Exception e) {
       throw new JbpmException("couldn't instantiate configuration of type "+className, e);

Deleted: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/CustomActivity.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/CustomActivity.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/CustomActivity.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -1,55 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt 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.jbpm.jpdl.internal.activity;
-
-import java.util.Map;
-
-import org.jbpm.api.activity.ActivityBehaviour;
-import org.jbpm.api.activity.ActivityExecution;
-import org.jbpm.api.activity.ExternalActivityBehaviour;
-
-
-/**
- * @author Tom Baeyens
- */
-public class CustomActivity extends JpdlExternalActivity {
-
-  private static final long serialVersionUID = 1L;
-
-  protected ActivityBehaviour customBehaviour;
-
-  public void signal(ActivityExecution execution, String signalName, Map<String, ? > parameters) throws Exception {
-    ExternalActivityBehaviour externalActivityBehaviour = (ExternalActivityBehaviour)customBehaviour;
-    externalActivityBehaviour.signal(execution, signalName, parameters);
-  }
-
-  public void execute(ActivityExecution execution) throws Exception {
-    customBehaviour.execute(execution);
-  }
-  
-  public ActivityBehaviour getCustomBehaviour() {
-    return customBehaviour;
-  }
-  public void setCustomBehaviour(ActivityBehaviour customBehaviour) {
-    this.customBehaviour = customBehaviour;
-  }
-}

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/CustomBinding.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/CustomBinding.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/CustomBinding.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -22,6 +22,7 @@
 package org.jbpm.jpdl.internal.activity;
 
 import org.jbpm.api.activity.ActivityBehaviour;
+import org.jbpm.pvm.internal.wire.JbpmClassNotFoundException;
 import org.jbpm.pvm.internal.wire.WireContext;
 import org.jbpm.pvm.internal.wire.binding.ObjectBinding;
 import org.jbpm.pvm.internal.wire.descriptor.ObjectDescriptor;
@@ -42,11 +43,13 @@
   }
 
   public Object parse(Element element, Parse parse, Parser parser) {
-    CustomActivity customActivity = new CustomActivity();
-    ObjectDescriptor descriptor = (ObjectDescriptor) 
-        objectBinding.parse(element, parse, wireParser);
-    ActivityBehaviour customActivityBehaviour = (ActivityBehaviour) WireContext.create(descriptor);
-    customActivity.setCustomBehaviour(customActivityBehaviour);
-    return customActivity;
+    ObjectDescriptor customActivitydescriptor = (ObjectDescriptor) objectBinding.parse(element, parse, wireParser);
+    try {
+      ActivityBehaviour customActivityBehaviour = (ActivityBehaviour) WireContext.create(customActivitydescriptor);
+      return customActivityBehaviour;
+      
+    } catch (JbpmClassNotFoundException e) {
+      return customActivitydescriptor;
+    }
   }
 }

Deleted: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/BindingsParser.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/BindingsParser.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/BindingsParser.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -1,69 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt 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.jbpm.jpdl.internal.xml;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.jbpm.internal.log.Log;
-import org.jbpm.pvm.internal.util.ReflectUtil;
-import org.jbpm.pvm.internal.util.XmlUtil;
-import org.jbpm.pvm.internal.xml.Binding;
-import org.jbpm.pvm.internal.xml.Parse;
-import org.jbpm.pvm.internal.xml.Parser;
-import org.w3c.dom.Element;
-
-/**
- * @author Tom Baeyens
- */
-public class BindingsParser extends Parser {
-
-  private static final Log log = Log.getLog(BindingsParser.class.getName());
-  
-  public Object parseDocumentElement(Element documentElement, Parse parse) {
-    List<Binding> bindings = new ArrayList<Binding>();
-    parse.setDocumentObject(bindings);
-    
-    for (Element bindingElement : XmlUtil.elements(documentElement)) {
-      Binding binding = instantiateBinding(bindingElement, parse);
-      bindings.add(binding);
-    }
-    
-    return bindings;
-  }
-
-  protected Binding instantiateBinding(Element bindingElement, Parse parse) {
-    String bindingClassName = XmlUtil.attribute(bindingElement, "binding", true, parse);
-    
-    log.trace("adding jpdl binding "+bindingClassName);
-    
-    if (bindingClassName!=null) {
-      try {
-        Class<?> bindingClass = ReflectUtil.loadClass(classLoader, bindingClassName);
-        return (Binding) bindingClass.newInstance();
-      } catch (Exception e) {
-        parse.addProblem("couldn't instantiate activity binding "+bindingClassName, e);
-      }
-    }
-    return null;
-  }
-}

Copied: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlBindingsParser.java (from rev 5660, jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/BindingsParser.java)
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlBindingsParser.java	                        (rev 0)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlBindingsParser.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -0,0 +1,69 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt 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.jbpm.jpdl.internal.xml;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jbpm.internal.log.Log;
+import org.jbpm.pvm.internal.util.XmlUtil;
+import org.jbpm.pvm.internal.xml.Binding;
+import org.jbpm.pvm.internal.xml.Parse;
+import org.jbpm.pvm.internal.xml.Parser;
+import org.w3c.dom.Element;
+
+/**
+ * @author Tom Baeyens
+ */
+public class JpdlBindingsParser extends Parser {
+
+  private static final Log log = Log.getLog(JpdlBindingsParser.class.getName());
+  
+  public Object parseDocumentElement(Element documentElement, Parse parse) {
+    List<Binding> bindings = new ArrayList<Binding>();
+    parse.setDocumentObject(bindings);
+    
+    for (Element bindingElement : XmlUtil.elements(documentElement)) {
+      Binding binding = instantiateBinding(bindingElement, parse);
+      bindings.add(binding);
+    }
+    
+    return bindings;
+  }
+
+  protected Binding instantiateBinding(Element bindingElement, Parse parse) {
+    String bindingClassName = XmlUtil.attribute(bindingElement, "binding", true, parse);
+    
+    log.trace("adding jpdl binding "+bindingClassName);
+    
+    if (bindingClassName!=null) {
+      try {
+        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+        Class<?> bindingClass = Class.forName(bindingClassName, true, classLoader);
+        return (Binding) bindingClass.newInstance();
+      } catch (Exception e) {
+        parse.addProblem("couldn't instantiate activity binding "+bindingClassName, e);
+      }
+    }
+    return null;
+  }
+}


Property changes on: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlBindingsParser.java
___________________________________________________________________
Name: svn:mergeinfo
   + 

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -31,6 +31,7 @@
 import java.util.Set;
 import java.util.StringTokenizer;
 
+import org.jbpm.api.JbpmException;
 import org.jbpm.api.activity.ActivityBehaviour;
 import org.jbpm.api.listener.EventListener;
 import org.jbpm.api.model.Event;
@@ -99,7 +100,7 @@
     "jbpm.user.eventlisteners.xml"
   }; 
 
-  static BindingsParser bindingsParser = new BindingsParser();
+  static JpdlBindingsParser jpdlBindingsParser = new JpdlBindingsParser();
   static final String CATEGORY_ACTIVITY = "activity";
   static final String CATEGORY_EVENT_LISTENER = "eventlistener";
 
@@ -118,12 +119,12 @@
     setBindings(bindings);
 
     for (String activityResource: DEFAULT_ACTIVITIES_RESOURCES) {
-      Enumeration<URL> resourceUrls = ReflectUtil.getResources(null, activityResource);
+      Enumeration<URL> resourceUrls = getResources(activityResource);
       if (resourceUrls.hasMoreElements()) {
         while (resourceUrls.hasMoreElements()) {
           URL resourceUrl = resourceUrls.nextElement();
           log.trace("loading jpdl activities from resource: "+resourceUrl);
-          List<JpdlBinding> activityBindings = (List<JpdlBinding>) bindingsParser.createParse()
+          List<JpdlBinding> activityBindings = (List<JpdlBinding>) jpdlBindingsParser.createParse()
             .setUrl(resourceUrl)
             .execute()
             .checkErrors("jpdl activities from "+resourceUrl.toString())
@@ -140,12 +141,12 @@
     }
 
     for (String eventListenerResource: DEFAULT_EVENTLISTENERS_RESOURCES) {
-      Enumeration<URL> resourceUrls = ReflectUtil.getResources(null, eventListenerResource);
+      Enumeration<URL> resourceUrls = getResources(eventListenerResource);
       if (resourceUrls.hasMoreElements()) {
         while (resourceUrls.hasMoreElements()) {
           URL resourceUrl = resourceUrls.nextElement();
           log.trace("loading jpdl eventlisteners from resource: "+resourceUrl);
-          List<JpdlBinding> activityBindings = (List<JpdlBinding>) bindingsParser.createParse()
+          List<JpdlBinding> activityBindings = (List<JpdlBinding>) jpdlBindingsParser.createParse()
             .setUrl(resourceUrl)
             .execute()
             .checkErrors("jpdl eventlisteners from "+resourceUrl.toString())
@@ -162,14 +163,25 @@
     }
   }
 
+  protected Enumeration<URL> getResources(String resourceName) {
+    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+    Enumeration<URL> resourceUrls;
+    try {
+      resourceUrls = classLoader.getResources(resourceName);
+    } catch (Exception e) {
+      throw new JbpmException("couldn't get resource urls for "+resourceName, e);
+    }
+    return resourceUrls;
+  }
+
   public Object parseDocumentElement(Element documentElement, Parse parse) {
     List<ProcessDefinitionImpl> processDefinitions = new ArrayList<ProcessDefinitionImpl>();
     
-    JpdlProcessDefinition processDefinition = (JpdlProcessDefinition) parse.getDocumentObject();
-    if (processDefinition==null) {
-      processDefinition = new JpdlProcessDefinition();
-      parse.setDocumentObject(processDefinition);
-    }
+    JpdlProcessDefinition processDefinition = new JpdlProcessDefinition();
+//    if (processDefinition==null) {
+//      processDefinition = new JpdlProcessDefinition();
+//      parse.setDocumentObject(processDefinition);
+//    }
     
     processDefinitions.add(processDefinition);
     
@@ -274,8 +286,14 @@
           }
         }
 
-        ActivityBehaviour activityBehaviour = (ActivityBehaviour) activityBinding.parse(nestedElement, parse, this);
-        activity.setBehaviour(activityBehaviour);
+        Object parseResult = activityBinding.parse(nestedElement, parse, this);
+        if (parseResult instanceof ActivityBehaviour) {
+          ActivityBehaviour activityBehaviour = (ActivityBehaviour) parseResult;
+          activity.setActivityBehaviour(activityBehaviour);
+        } else {
+          Descriptor activityBehaviourDescriptor = (Descriptor) parseResult;
+          activity.setActivityBehaviourDescriptor(activityBehaviourDescriptor);
+        }
 
         parseOnEvents(nestedElement, parse, activity);
 

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/CompositeBuilder.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/CompositeBuilder.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/CompositeBuilder.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -91,7 +91,7 @@
       throw new RuntimeException("activityDescriptor is null");
     }
     ActivityBuilder activityBuilder = new ActivityBuilder(this, activityName);
-    activityBuilder.activity.setBehaviour(activityDescriptor);
+    activityBuilder.activity.setActivityBehaviourDescriptor(activityDescriptor);
     return activityBuilder;
   }
 
@@ -104,7 +104,7 @@
       throw new RuntimeException("activity is null");
     }
     ActivityBuilder activityBuilder = new ActivityBuilder(this, activityName);
-    activityBuilder.activity.setBehaviour(activityBehaviour);
+    activityBuilder.activity.setActivityBehaviour(activityBehaviour);
     return activityBuilder;
   }
 

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/CompositeExceptionHandlerBuilder.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/CompositeExceptionHandlerBuilder.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/CompositeExceptionHandlerBuilder.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -53,11 +53,6 @@
     return this;
   }
 
-  public CompositeExceptionHandlerBuilder listener(String expression) {
-    super.addListener(expression);
-    return this;
-  }
-
   public CompositeBuilder endExceptionHandler() {
     return compositeBuilder;
   }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/EventBuilder.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/EventBuilder.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/EventBuilder.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -58,16 +58,6 @@
     return this;
   }
 
-  public EventBuilder listener(String expression) {
-    addListener(expression);
-    return this;
-  }
-
-  public EventBuilder listener(String expression, boolean propagation) {
-    addListener(expression, propagation);
-    return this;
-  }
-
   public EventBuilder property(String name, String value) {
     StringDescriptor descriptor = new StringDescriptor(name, value);
     getEvent().addProperty(descriptor);

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/EventExceptionHandlerBuilder.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/EventExceptionHandlerBuilder.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/EventExceptionHandlerBuilder.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -53,11 +53,6 @@
     return this;
   }
 
-  public EventExceptionHandlerBuilder listener(String expression) {
-    super.addListener(expression);
-    return this;
-  }
-
   public EventBuilder endExceptionHandler() {
     return eventBuilder;
   }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/ExceptionHandlerBuilder.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/ExceptionHandlerBuilder.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/ExceptionHandlerBuilder.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -44,10 +44,4 @@
   protected void addListener(Descriptor descriptor) {
     exceptionHandler.createEventListenerReference(descriptor);
   }
-
-  protected void addListener(String expression) {
-    exceptionHandler
-      .createEventListenerReference()
-      .setExpression(expression);
-  }
 }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/FlowBuilder.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/FlowBuilder.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/FlowBuilder.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -72,16 +72,6 @@
     return this;
   }
 
-  public FlowBuilder listener(String expression) {
-    addListener(expression);
-    return this;
-  }
-
-  public FlowBuilder listener(String expression, boolean propagation) {
-    addListener(expression, propagation);
-    return this;
-  }
-  
   public FlowBuilder property(String name, String value) {
     StringDescriptor descriptor = new StringDescriptor(name, value);
     transition.addProperty(descriptor);

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/ObservableBuilder.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/ObservableBuilder.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/ObservableBuilder.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -60,15 +60,6 @@
     eventListenerReference.setPropagationEnabled(propagation);
   }
 
-  protected void addListener(String expression) {
-    getEvent().createEventListenerReference(expression);
-  }
-
-  protected void addListener(String expression, boolean propagation) {
-    EventListenerReference eventListenerReference = getEvent().createEventListenerReference(expression);
-    eventListenerReference.setPropagationEnabled(propagation);
-  }
-
   protected EventImpl getEvent() {
     if (event==null) {
       this.event = observableElement.createEvent(eventName);

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/TimerBuilder.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/TimerBuilder.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/TimerBuilder.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -92,16 +92,6 @@
     return this;
   }
 
-  public TimerBuilder listener(String expression) {
-    addListener(expression);
-    return this;
-  }
-
-  public TimerBuilder listener(String expression, boolean propagation) {
-    addListener(expression, propagation);
-    return this;
-  }
-
   public CompositeBuilder endTimer() {
     return compositeBuilder;
   }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/GetStartFormResourceNameCmd.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/GetStartFormResourceNameCmd.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/GetStartFormResourceNameCmd.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -55,7 +55,7 @@
     
     ActivityImpl activity = processDefinition.getActivity(activityName);
     
-    ActivityBehaviour behaviour = activity.getBehaviour();
+    ActivityBehaviour behaviour = activity.getActivityBehaviour();
     if (behaviour instanceof FormBehaviour) {
       return ((FormBehaviour)behaviour).getFormResourceName();
     }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/hibernate/ConverterType.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/hibernate/ConverterType.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/hibernate/ConverterType.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -34,7 +34,6 @@
 import org.hibernate.usertype.ParameterizedType;
 import org.jbpm.api.JbpmException;
 import org.jbpm.pvm.internal.type.Converter;
-import org.jbpm.pvm.internal.util.ReflectUtil;
 
 /**
  * @author Tom Baeyens
@@ -82,7 +81,8 @@
     for(Object key : properties.keySet()) {
       String converterClassName = (String) key;
       try {
-        Class<?> converterClass = ReflectUtil.loadClass(null, converterClassName);
+        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+        Class<?> converterClass = Class.forName(converterClassName, true, classLoader);
         
         String converterName = properties.getProperty(converterClassName);
         converterNames.put(converterClass, converterName);

Deleted: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/hibernate/PvmNamingStrategy.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/hibernate/PvmNamingStrategy.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/hibernate/PvmNamingStrategy.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -1,145 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt 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.jbpm.pvm.internal.hibernate;
-
-import org.hibernate.cfg.ImprovedNamingStrategy;
-import org.hibernate.util.StringHelper;
-import org.jbpm.internal.log.Log;
-import org.jbpm.pvm.internal.util.ReflectUtil;
-
-/**
- * @author Tom Baeyens
- */
-public class PvmNamingStrategy extends ImprovedNamingStrategy {
-  
-  private static final long serialVersionUID = 1L;
-  private static final Log log = Log.getLog(PvmNamingStrategy.class.getName());
-
-  String prefix;
-  
-  public PvmNamingStrategy(String prefix) {
-    if (! "".equals(prefix)) {
-      this.prefix = prefix;
-    }
-  }
-
-  // TABLE NAMES //////////////////////////////////////////////////////////////
-  
-  public String classToTableName(String className) {
-    String name = ReflectUtil.getUnqualifiedClassName(className);
-    if (name.endsWith("Impl")) {
-      name = name.substring(0, name.length()-4);
-    }
-    name = prefix+name.toUpperCase();
-    if (log.isTraceEnabled()) {
-      log.trace("classToTableName("+className+") ==> "+name);
-    }
-    return name;
-  }
-
-  public String tableName(String tableName) {
-    if (prefix!=null) {
-      return prefix+tableName;
-    }
-    if (log.isTraceEnabled()) {
-      log.trace("tableName("+tableName+") ==> "+tableName);
-    }
-    return tableName;
-  }
-  
-  public String collectionTableName(String ownerEntity, String ownerEntityTable, String associatedEntity, String associatedEntityTable, String propertyName) {
-    String name = StringHelper.unqualify(propertyName);
-    name = prefix+name.toUpperCase()+"_"; 
-    if (log.isTraceEnabled()) {
-      log.trace("collectionTableName("+ownerEntity+", "+ownerEntityTable+", "+associatedEntity+", "+associatedEntityTable+", "+propertyName+") ==> "+name);
-    }
-    return name;
-  }
-
-  // COLUMN NAMES /////////////////////////////////////////////////////////////
-
-  public String propertyToColumnName(String propertyName) {
-    String name = propertyName;
-    
-    name = StringHelper.unqualify(name);
-    name = name.toUpperCase()+"_";
-    
-    if (log.isTraceEnabled()) {
-      log.trace("propertyToColumnName("+propertyName+") ==> "+name);
-    }
-
-    return name;
-  }
-  
-  public String logicalColumnName(String columnName, String propertyName) {
-    String name = (columnName!=null ? columnName : propertyName);
-    name = name.replace('.', '_');
-    name = name.toUpperCase();
-    if (!name.endsWith("_")) {
-      name = name+"_";
-    }
-    if (log.isTraceEnabled()) {
-      log.trace("logicalColumnName("+columnName+", "+propertyName+") ==> "+name);
-    }
-    return name;
-  }
-
-  public String columnName(String columnName) {
-    String name = columnName.toUpperCase();
-    if (log.isTraceEnabled()) {
-      log.trace("columnName("+columnName+") ==> "+name);
-    }
-    return name;
-  }
-
-  public String foreignKeyColumnName(String propertyName, String propertyEntityName, String propertyTableName, String referencedColumnName) {
-    String name = super.foreignKeyColumnName(propertyName, propertyEntityName, propertyTableName, referencedColumnName);
-    if (log.isTraceEnabled()) {
-      log.trace("foreignKeyColumnName("+propertyName+", "+propertyEntityName+", "+propertyTableName+", "+referencedColumnName+") ==> "+name);
-    }
-    return name;
-  }
-
-  public String logicalCollectionColumnName(String columnName, String propertyName, String referencedColumn) {
-    String name = super.logicalCollectionColumnName(columnName, propertyName, referencedColumn);
-    if (log.isTraceEnabled()) {
-      log.trace("logicalCollectionColumnName("+columnName+", "+propertyName+", "+referencedColumn+") ==> "+name);
-    }
-    return name;
-  }
-
-  public String logicalCollectionTableName(String tableName, String ownerEntityTable, String associatedEntityTable, String propertyName) {
-    String name = super.logicalCollectionTableName(tableName, ownerEntityTable, associatedEntityTable, propertyName);
-    if (log.isTraceEnabled()) {
-      log.trace("logicalCollectionTableName("+tableName+", "+ownerEntityTable+", "+associatedEntityTable+", "+propertyName+") ==> "+name);
-    }
-    return name;
-  }
-
-  public String joinKeyColumnName(String joinedColumn, String joinedTable) {
-    String name = super.joinKeyColumnName(joinedColumn, joinedTable);
-    if (log.isTraceEnabled()) {
-      log.trace("joinKeyColumnName("+joinedColumn+", "+joinedTable+") ==> "+name);
-    }
-    return name;
-  }
-}

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ActivityImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ActivityImpl.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ActivityImpl.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -26,9 +26,9 @@
 import java.util.List;
 import java.util.Map;
 
-import org.jbpm.api.JbpmException;
 import org.jbpm.api.activity.ActivityBehaviour;
 import org.jbpm.pvm.internal.wire.Descriptor;
+import org.jbpm.pvm.internal.wire.WireContext;
 
 /**
  * @author Tom Baeyens
@@ -37,7 +37,10 @@
 
   private static final long serialVersionUID = 1L;
   
-  protected ObjectReference<ActivityBehaviour> behaviourReference;
+  protected ActivityBehaviour activityBehaviour;
+  protected boolean isActivityBehaviourStateful = false;
+  protected Descriptor activityBehaviourDescriptor;
+  
   protected List<TransitionImpl> outgoingTransitions = new ArrayList<TransitionImpl>();
   protected List<TransitionImpl> incomingTransitions = new ArrayList<TransitionImpl>();
   protected TransitionImpl defaultOutgoingTransition;
@@ -277,46 +280,6 @@
     }
   }
 
-
-  // behaviour ////////////////////////////////////////////////////////////////
-
-  /** sets the given activity as the behaviour for this activity. 
-   * An object reference for the given activity is created. */ 
-  public void setBehaviour(ActivityBehaviour activityBehaviour) {
-    behaviourReference = new ObjectReference<ActivityBehaviour>(activityBehaviour);
-  }
-
-  /** sets the activity that can be created from the given descriptor as the 
-   * behaviour for this activity.   It is assumed that the descriptor will 
-   * create an {@link ActivityBehaviour}
-   * An object reference for the given descriptor is created. */ 
-  public void setBehaviour(Descriptor descriptor) {
-    behaviourReference = new ObjectReference<ActivityBehaviour>(descriptor);
-  }
-
-  /** sets the expression behaviour for this activity.  The evaluation of the 
-   * expression will replace the {@link ActivityBehaviour#execute(org.jbpm.pvm.Execution) Activity's execute method}.
-   * An object reference for the given descriptor is created. */ 
-  public void setBehaviour(String expression) {
-    behaviourReference = new ObjectReference<ActivityBehaviour>(expression);
-  }
-
-  public ObjectReference<ActivityBehaviour> getBehaviourReference() {
-    return behaviourReference;
-  }
-  
-  public void setBehaviourReference(ObjectReference<ActivityBehaviour> behaviourReference) {
-    this.behaviourReference = behaviourReference;
-  }
-
-  public ActivityBehaviour getBehaviour() {
-    ActivityBehaviour behaviour = ( behaviourReference!=null ? behaviourReference.get() : null);
-    if (behaviour==null) {
-      throw new JbpmException("no behaviour on "+this);
-    }
-    return behaviour;
-  }
-
   /** the leaving transitions, keyed by transition name.  If a transition with 
    * the same name occurs mutltiple times, the first one is returned.
    * Leaving transitions with a null value for their name are not included 
@@ -388,6 +351,22 @@
     return false;
   }
 
+  // customized getters and setters ///////////////////////////////////////////
+
+  public ActivityBehaviour getActivityBehaviour() {
+    if (activityBehaviour!=null) {
+      return activityBehaviour;
+    }
+    if (activityBehaviourDescriptor!=null) {
+      ActivityBehaviour createdBehaviour = (ActivityBehaviour) WireContext.create(activityBehaviourDescriptor);
+      if (!isActivityBehaviourStateful) {
+        activityBehaviour = createdBehaviour;
+      }
+      return createdBehaviour;
+    }
+    return null;
+  }
+  
   // getters and setters //////////////////////////////////////////////////////
   
   public ObservableElementImpl getParent() {
@@ -430,4 +409,19 @@
   public void setContinuation(Continuation continuation) {
     this.continuation = continuation;
   }
+  public void setActivityBehaviour(ActivityBehaviour activityBehaviour) {
+    this.activityBehaviour = activityBehaviour;
+  }
+  public Descriptor getActivityBehaviourDescriptor() {
+    return activityBehaviourDescriptor;
+  }
+  public void setActivityBehaviourDescriptor(Descriptor activityBehaviourDescriptor) {
+    this.activityBehaviourDescriptor = activityBehaviourDescriptor;
+  }
+  public boolean isActivityBehaviourStateful() {
+    return isActivityBehaviourStateful;
+  }
+  public void setActivityBehaviourStateful(boolean isActivityBehaviourStateful) {
+    this.isActivityBehaviourStateful = isActivityBehaviourStateful;
+  }
 }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventImpl.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventImpl.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -58,22 +58,16 @@
 
   public EventListenerReference createEventListenerReference(Descriptor descriptor) {
     EventListenerReference eventListenerReference = createEventListenerReference();
-    eventListenerReference.setDescriptor(descriptor);
+    eventListenerReference.setEventListenerDescriptor(descriptor);
     return eventListenerReference;
   }
   
   public EventListenerReference createEventListenerReference(EventListener eventListener) {
     EventListenerReference eventListenerReference = createEventListenerReference();
-    eventListenerReference.set(eventListener);
+    eventListenerReference.setEventListener(eventListener);
     return eventListenerReference;
   }
   
-  public EventListenerReference createEventListenerReference(String expression) {
-    EventListenerReference eventListenerReference = createEventListenerReference();
-    eventListenerReference.setExpression(expression);
-    return eventListenerReference;
-  }
-
   public boolean isAsync() {
     return ! (continuation==Continuation.SYNCHRONOUS);
   }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventListenerReference.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventListenerReference.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventListenerReference.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -22,14 +22,19 @@
 package org.jbpm.pvm.internal.model;
 
 import org.jbpm.api.listener.EventListener;
+import org.jbpm.pvm.internal.wire.Descriptor;
+import org.jbpm.pvm.internal.wire.WireContext;
 
 /**
  * @author Tom Baeyens
  */
-public class EventListenerReference extends ObjectReference<EventListener> {
+public class EventListenerReference extends ProcessElementImpl {
 
   private static final long serialVersionUID = 1L;
 
+  protected EventListener eventListener;
+  protected boolean isEventListenerStateful= false;
+  protected Descriptor eventListenerDescriptor;
   /** does this action accept propagated events ?  */
   protected boolean isPropagationEnabled = false;
   protected Continuation continuation = Continuation.SYNCHRONOUS;
@@ -48,10 +53,43 @@
     return Continuation.SYNCHRONOUS!=continuation;
   }
 
+  // customized getters and setters ///////////////////////////////////////////
+
+  public EventListener getEventListener() {
+    if (eventListener!=null) {
+      return eventListener;
+    }
+    if (eventListenerDescriptor!=null) {
+      EventListener createdEventListener = (EventListener) WireContext.create(eventListenerDescriptor);
+      if (!isEventListenerStateful) {
+        eventListener = createdEventListener;
+      }
+      return createdEventListener;
+    }
+    return null;
+  }
+
+  // getters and setters //////////////////////////////////////////////////////
+
   public Continuation getContinuation() {
     return continuation;
   }
   public void setContinuation(Continuation continuation) {
     this.continuation = continuation;
   }
+  public void setEventListener(EventListener eventListener) {
+    this.eventListener = eventListener;
+  }
+  public boolean isEventListenerStateful() {
+    return isEventListenerStateful;
+  }
+  public void setEventListenerStateful(boolean isEventListenerStateful) {
+    this.isEventListenerStateful = isEventListenerStateful;
+  }
+  public Descriptor getEventListenerDescriptor() {
+    return eventListenerDescriptor;
+  }
+  public void setEventListenerDescriptor(Descriptor eventListenerDescriptor) {
+    this.eventListenerDescriptor = eventListenerDescriptor;
+  }
 }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExceptionHandlerImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExceptionHandlerImpl.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExceptionHandlerImpl.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -49,51 +49,33 @@
   protected String exceptionClassName;
   protected boolean isTransactional;
   protected boolean isRethrowMasked;
-  protected List<ObjectReference<EventListener>> eventListenerReferences;
+  protected List<EventListenerReference> eventListenerReferences;
   protected String transitionName; // mutually exclusive with activityName
   protected String activityName;       // mutually exclusive with transitionName
   
   // construction methods /////////////////////////////////////////////////////
   
-  public ObjectReference<EventListener> createEventListenerReference(EventListener eventListener) {
-    ObjectReference<EventListener> eventListenerReference = createEventListenerReference();
-    eventListenerReference.set(eventListener);
+  public EventListenerReference createEventListenerReference(EventListener eventListener) {
+    EventListenerReference eventListenerReference = createEventListenerReference();
+    eventListenerReference.setEventListener(eventListener);
     return eventListenerReference;
   }
 
-  public ObjectReference<EventListener> createEventListenerReference(Descriptor descriptor) {
-    ObjectReference<EventListener> eventListenerReference = createEventListenerReference();
-    eventListenerReference.setDescriptor(descriptor);
+  public EventListenerReference createEventListenerReference(Descriptor descriptor) {
+    EventListenerReference eventListenerReference = createEventListenerReference();
+    eventListenerReference.setEventListenerDescriptor(descriptor);
     return eventListenerReference;
   }
 
-  public ObjectReference<EventListener> createActivityReference(String expression) {
-    ObjectReference<EventListener> eventListenerReference = createEventListenerReference();
-    eventListenerReference.setExpression(expression);
-    return eventListenerReference;
-  }
-
-  public ObjectReference<EventListener> createEventListenerReference() {
+  public EventListenerReference createEventListenerReference() {
     if (eventListenerReferences==null) {
-      eventListenerReferences = new ArrayList<ObjectReference<EventListener>>();
+      eventListenerReferences = new ArrayList<EventListenerReference>();
     }
-    ObjectReference<EventListener> actionObjectReference = new ObjectReference<EventListener>();
-    eventListenerReferences.add(actionObjectReference);
-    return actionObjectReference;
+    EventListenerReference eventListenerReference = new EventListenerReference();
+    eventListenerReferences.add(eventListenerReference);
+    return eventListenerReference;
   }
   
-  public List<EventListener> getEventListeners() {
-    if (eventListenerReferences==null) {
-      return null;
-    }
-    List<EventListener> eventListeners = new ArrayList<EventListener>(eventListenerReferences.size());
-    for (ObjectReference<EventListener> eventListenerReference : eventListenerReferences) {
-      EventListener eventListener = eventListenerReference.get();
-      eventListeners.add(eventListener);
-    }
-    return eventListeners;
-  }
-
   // runtime behaviour methods ////////////////////////////////////////////////
   
   public boolean matches(Exception exception) {
@@ -146,9 +128,9 @@
   
   void executeHandler(ExecutionImpl execution, Exception exception) {
     if (eventListenerReferences!=null) {
-      for (ObjectReference<EventListener> eventListenerReference: eventListenerReferences) {
+      for (EventListenerReference eventListenerReference: eventListenerReferences) {
         
-        EventListener eventListener = eventListenerReference.get();
+        EventListener eventListener = eventListenerReference.getEventListener();
         
         log.trace("executing "+eventListener+" for "+this);
         try {
@@ -265,10 +247,10 @@
   public void setRethrowMasked(boolean isRethrowMasked) {
     this.isRethrowMasked = isRethrowMasked;
   }
-  public List<ObjectReference<EventListener>> getEventListenerReferences() {
+  public List<EventListenerReference> getEventListenerReferences() {
     return eventListenerReferences;
   }
-  public void setEventListenerReferences(List<ObjectReference<EventListener>> activityReferences) {
-    this.eventListenerReferences = activityReferences;
+  public void setEventListenerReferences(List<EventListenerReference> eventListenerReferences) {
+    this.eventListenerReferences = eventListenerReferences;
   }
 }

Deleted: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ObjectReference.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ObjectReference.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ObjectReference.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -1,117 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt 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.jbpm.pvm.internal.model;
-
-import org.jbpm.pvm.internal.env.EnvironmentImpl;
-import org.jbpm.pvm.internal.wire.Descriptor;
-import org.jbpm.pvm.internal.wire.WireContext;
-import org.jbpm.pvm.internal.wire.WireDefinition;
-
-public class ObjectReference<T> extends ProcessElementImpl {
-  
-  private static final long serialVersionUID = 1L;
-  // private static final Log log = Log.getLog(ObjectReference.class.getName());
-
-  protected String expression;
-  protected String expressionLanguage;
-  protected Descriptor descriptor;
-  protected T object;
-
-  public ObjectReference() {
-  }
-
-  public ObjectReference(String expression) {
-    this.expression = expression;
-  }
-
-  public ObjectReference(Descriptor descriptor) {
-    this.descriptor = descriptor;
-  }
-
-  public ObjectReference(T object) {
-    this.object = object;
-  }
-  
-  public String toString() {
-    if (object!=null) {
-      return object.toString();
-    }
-    if (expression!=null) {
-      return expression;
-    }
-    if (descriptor!=null) {
-      return descriptor.toString();
-    }
-    return null;
-  }
-
-  public T get() {
-    if (object!=null) {
-      return object;
-    }
-    if (expression!=null) {
-      return resolveValueExpression();
-    }
-    if (descriptor!=null) {
-      return constructFromDescriptor();
-    }
-    return null;
-  }
-
-  public void set(T object) {
-    this.object = object;
-  }
-  
-  // object builders //////////////////////////////////////////////////////////
-
-  protected T constructFromDescriptor() {
-    return (T) WireContext.create(descriptor);
-  }
-
-  protected T resolveValueExpression() {
-    EnvironmentImpl environment = EnvironmentImpl.getCurrent();
-    return null;
-  }
-  
-  protected T resolveMethodExpression(EnvironmentImpl environment) {
-    return null;
-  }
-  
-  public void setDescriptor(Descriptor descriptor) {
-    this.descriptor = descriptor;
-  }
-  public Descriptor getDescriptor() {
-    return descriptor;
-  }
-  public void setExpression(String expression) {
-    this.expression = expression;
-  }
-  public T getObject() {
-    return object;
-  }
-  public void setObject(T object) {
-    this.object = object;
-  }
-  public String getExpression() {
-    return expression;
-  }
-}

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteActivity.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteActivity.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteActivity.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -51,7 +51,7 @@
       }
     }
     
-    ActivityBehaviour activityBehaviour = activity.getBehaviour();
+    ActivityBehaviour activityBehaviour = activity.getActivityBehaviour();
     
     try {
       execution.setPropagation(Propagation.UNSPECIFIED);

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteEventListener.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteEventListener.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteEventListener.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -74,7 +74,7 @@
       EventListenerReference eventListenerReference = eventListenerReferences.get(eventListenerIndex);
       ObservableElement eventSource = execution.getEventSource();
       if ((eventSource == observableElement) || (eventListenerReference.isPropagationEnabled())) {
-        EventListener eventListener = eventListenerReference.get();
+        EventListener eventListener = eventListenerReference.getEventListener();
         log.trace("executing " + eventListener + " for " + event);
         try {
           // TODO can/should this invocation be unified with the exception handler invocation of the event notification method?

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/Signal.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/Signal.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/Signal.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -61,7 +61,7 @@
       log.debug("signalling "+activity+", signalName="+signalName);
     }
 
-    ExternalActivityBehaviour externalActivityBehaviour = (ExternalActivityBehaviour) activity.getBehaviour();
+    ExternalActivityBehaviour externalActivityBehaviour = (ExternalActivityBehaviour) activity.getActivityBehaviour();
     
     try {
       execution.setPropagation(Propagation.UNSPECIFIED);

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/ProcessDeployer.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/ProcessDeployer.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/ProcessDeployer.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -62,38 +62,40 @@
         parse.setInputStream(inputStream);
         parse.execute();
         List<ProcessDefinitionImpl> processDefinitions = (List<ProcessDefinitionImpl>) parse.getDocumentObject();
-        for (ProcessDefinitionImpl processDefinition: processDefinitions) {
-          if ((processDefinition != null) && (processDefinition.getName() != null)) {
-            String processDefinitionName = processDefinition.getName();
-            
-            processDefinition.setSuspended(deployment.isSuspended());
-            
-            String imageResourceName = resourceName.substring(0, resourceName.lastIndexOf(extension))+".png";
-            if (deployment.getResourceNames().contains(imageResourceName)) {
-              processDefinition.setImageResourceName(imageResourceName);
-            }
+        if (processDefinitions!=null) {
+          for (ProcessDefinitionImpl processDefinition : processDefinitions) {
+            if ((processDefinition != null) && (processDefinition.getName() != null)) {
+              String processDefinitionName = processDefinition.getName();
 
-            processDefinition.setDeploymentDbid(deployment.getDbid());
+              processDefinition.setSuspended(deployment.isSuspended());
 
-            if (deployment.hasObjectProperties(processDefinitionName)) {
-              String key = deployment.getProcessDefinitionKey(processDefinitionName);
-              String id = deployment.getProcessDefinitionId(processDefinitionName);
-              Long version = deployment.getProcessDefinitionVersion(processDefinitionName);
-              processDefinition.setId(id);
-              processDefinition.setKey(key);
-              processDefinition.setVersion(version.intValue());
+              String imageResourceName = resourceName.substring(0, resourceName.lastIndexOf(extension)) + ".png";
+              if (deployment.getResourceNames().contains(imageResourceName)) {
+                processDefinition.setImageResourceName(imageResourceName);
+              }
 
-            } else {
-              checkKey(processDefinition, deployment);
-              checkVersion(processDefinition, deployment);
-              checkId(processDefinition, deployment);
+              processDefinition.setDeploymentDbid(deployment.getDbid());
 
-              deployment.setProcessDefinitionId(processDefinitionName, processDefinition.getId());
-              deployment.setProcessDefinitionKey(processDefinitionName, processDefinition.getKey());
-              deployment.setProcessDefinitionVersion(processDefinitionName, new Long(processDefinition.getVersion()));
+              if (deployment.hasObjectProperties(processDefinitionName)) {
+                String key = deployment.getProcessDefinitionKey(processDefinitionName);
+                String id = deployment.getProcessDefinitionId(processDefinitionName);
+                Long version = deployment.getProcessDefinitionVersion(processDefinitionName);
+                processDefinition.setId(id);
+                processDefinition.setKey(key);
+                processDefinition.setVersion(version.intValue());
+
+              } else {
+                checkKey(processDefinition, deployment);
+                checkVersion(processDefinition, deployment);
+                checkId(processDefinition, deployment);
+
+                deployment.setProcessDefinitionId(processDefinitionName, processDefinition.getId());
+                deployment.setProcessDefinitionKey(processDefinitionName, processDefinition.getKey());
+                deployment.setProcessDefinitionVersion(processDefinitionName, new Long(processDefinition.getVersion()));
+              }
+
+              deployment.addObject(processDefinitionName, processDefinition);
             }
-
-            deployment.addObject(processDefinitionName, processDefinition);
           }
         }
       }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/stream/ResourceStreamInput.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/stream/ResourceStreamInput.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/stream/ResourceStreamInput.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -24,7 +24,6 @@
 import java.io.InputStream;
 
 import org.jbpm.api.JbpmException;
-import org.jbpm.pvm.internal.util.ReflectUtil;
 
 /**
  * @author Tom Baeyens
@@ -50,7 +49,8 @@
   }
 
   public InputStream openStream() {
-    InputStream stream = ReflectUtil.getResourceAsStream(classLoader, resource);
+    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+    InputStream stream = classLoader.getResourceAsStream(resource);
     if (stream==null) {
       throw new JbpmException("resource "+resource+" does not exist");
     }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/LifeCycleParser.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/LifeCycleParser.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/LifeCycleParser.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -104,6 +104,6 @@
     }
     String stateName = element.getAttribute("name");
     ActivityImpl state = lifeCycleProcess.createActivity(stateName);
-    state.setBehaviour(new LifeCycleState());
+    state.setActivityBehaviour(new LifeCycleState());
   }
 }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/ReflectUtil.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/ReflectUtil.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/ReflectUtil.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -1,147 +1,36 @@
 package org.jbpm.pvm.internal.util;
 
-import java.io.InputStream;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
-import java.net.URL;
 import java.util.Arrays;
-import java.util.Enumeration;
 import java.util.List;
 
 import org.jbpm.api.JbpmException;
 import org.jbpm.internal.log.Log;
-import org.jbpm.pvm.internal.env.EnvironmentImpl;
 import org.jbpm.pvm.internal.wire.descriptor.ArgDescriptor;
 
 public abstract class ReflectUtil {
 
   private static Log log = Log.getLog(ReflectUtil.class.getName());
-
-  static ClassLoader resolveClassLoader(ClassLoader classLoader) {
-    // 1) if the user provided a classloader through the API, use that one
-    if (classLoader!=null) {
-      log.trace("using provided classloader");
-      return classLoader;
-    }
-    
-    // 2) if the user provided a classloader through the environment, use that one
-    EnvironmentImpl environment = EnvironmentImpl.getCurrent();
-    if (environment!=null) {
-      classLoader = environment.getClassLoader();
-      if (classLoader!=null) {
-        log.trace("using environment classloader");
-        return classLoader;
-      }
-    }
-
-    // 3) otherwise, use the current thread's context classloader
-    log.trace("using context classloader");
-    return Thread.currentThread().getContextClassLoader();
-  }
-
-  public static Class<?> loadClass(ClassLoader classLoader, String className) {
-    if (classLoader!=null) {
-      try {
-        return classLoader.loadClass(className);
-      } catch (ClassNotFoundException e) {
-        log.trace("couldn't load class "+className+" with given classloader "+classLoader);
-      }
-    }
-    try {
-      return Thread.currentThread().getContextClassLoader().loadClass(className);
-    } catch (ClassNotFoundException e) {
-      log.trace("couldn't load class "+className+" with context classloader "+classLoader);
-    }
-    try {
-      return ReflectUtil.class.getClassLoader().loadClass(className);
-    } catch (ClassNotFoundException e) {
-      log.trace("couldn't load class "+className+" with pvm lib classloader "+classLoader);
-    }
-    throw new JbpmException("couldn't load class "+className);
-  }
   
-  public static InputStream getResourceAsStream(ClassLoader classLoader, String resource) {
-    classLoader = resolveClassLoader(classLoader);
-    log.trace("getting resource as stream "+resource);
-    return classLoader.getResourceAsStream(resource);
+  /** searches for the field in the given class and in its super classes */
+  public static Field findField(Class<?> clazz, String fieldName) {
+    return findField(clazz, fieldName, clazz);
   }
-  
-  public static Enumeration<URL> getResources(ClassLoader classLoader, String resource) {
-    classLoader = resolveClassLoader(classLoader);
-    try {
-      log.trace("getting resources "+resource);
-      return classLoader.getResources(resource);
-    } catch (Exception e) {
-      throw new JbpmException("couldn't get resources "+resource, e);
-    }
-  }
-  
-  public static URL getResource(ClassLoader classLoader, String resource) {
-    classLoader = resolveClassLoader(classLoader);
-    try {
-      log.trace("getting resource "+resource);
-      return classLoader.getResource(resource);
-    } catch (Exception e) {
-      throw new JbpmException("couldn't get resources "+resource, e);
-    }
-  }
-  
-  public static Object instantiate(ClassLoader classLoader, String className) {
-    Object newObject;
-    try {
-      classLoader = resolveClassLoader(classLoader);
-      Class<?> clazz = loadClass(classLoader, className);
-      log.trace("instantiating "+className);
-      newObject = clazz.newInstance();
-    } catch (Exception e) {
-      throw new JbpmException("couldn't instantiate "+className, e);
-    }
-    return newObject;
-  }
 
-  public static Class<?>[] loadClasses(ClassLoader classLoader, List<String> constructorArgTypeNames) {
-    if (constructorArgTypeNames==null) return null;
-    Class<?>[] classes = new Class[constructorArgTypeNames.size()];
-    for (int i=0; i<constructorArgTypeNames.size(); i++) {
-      classLoader = resolveClassLoader(classLoader);
-      classes[i] = loadClass(classLoader, constructorArgTypeNames.get(i));
-    }
-    return classes;
-  }
-
-  public static <T> Constructor<T> getConstructor(Class<T> clazz, Class<?>[] parameterTypes) {
-    Constructor<T> constructor = null;
-    try {
-      constructor = clazz.getDeclaredConstructor(parameterTypes);
-      
-      if (log.isTraceEnabled()) log.trace("found constructor "+clazz.getName()+"("+Arrays.toString(parameterTypes)+")");
-      
-    } catch (SecurityException e) {
-      throw new JbpmException("wasn't allowed to get constructor '"+clazz.getName()+"("+getParameterTypesText(parameterTypes)+")'", e);
-    } catch (NoSuchMethodException e) {
-      throw new JbpmException("couldn't find constructor '"+clazz.getName()+"("+getParameterTypesText(parameterTypes)+")'", e);
-    }
-
-    return constructor;
-  }
-
-  public static Field getField(Class<?> clazz, String fieldName) {
-    return getField(clazz, fieldName, clazz);
-  }
-
-  private static Field getField(Class<?> clazz, String fieldName, Class<?> original) {
+  private static Field findField(Class<?> clazz, String fieldName, Class<?> original) {
     Field field = null;
 
     try {
       field = clazz.getDeclaredField(fieldName);
-      log.trace("found field "+fieldName+" in "+clazz.getName());
+      if (log.isTraceEnabled()) log.trace("found field "+fieldName+" in "+clazz.getName());
     } catch (SecurityException e) {
       throw new JbpmException("wasn't allowed to get field '"+clazz.getName()+"."+fieldName+"'", e);
     } catch (NoSuchFieldException e) {
       if (clazz.getSuperclass()!=null) {
-        return getField(clazz.getSuperclass(), fieldName, original);
+        return findField(clazz.getSuperclass(), fieldName, original);
       } else {
         throw new JbpmException("couldn't find field '"+original.getName()+"."+fieldName+"'", e);
       }
@@ -150,6 +39,7 @@
     return field;
   }
 
+  /** searches for the method in the given class and in its super classes */
   public static Method getMethod(Class<?> clazz, String methodName, Class<?>[] parameterTypes) {
     return getMethod(clazz, methodName, parameterTypes, clazz);
   }
@@ -160,8 +50,7 @@
     try {
       method = clazz.getDeclaredMethod(methodName, parameterTypes);
       
-      if (log.isTraceEnabled()) 
-        log.trace("found method "+clazz.getName()+"."+methodName+"("+Arrays.toString(parameterTypes)+")");
+      if (log.isTraceEnabled()) log.trace("found method "+clazz.getName()+"."+methodName+"("+Arrays.toString(parameterTypes)+")");
 
     } catch (SecurityException e) {
       throw new JbpmException("wasn't allowed to get method '"+clazz.getName()+"."+methodName+"("+getParameterTypesText(parameterTypes)+")'", e);
@@ -206,22 +95,20 @@
       throw new IllegalArgumentException("can't create new instance without clazz or constructor");
     }
 
-    String className = null;
     try {
-      log.trace("creating new instance for class '"+className+"' with args "+Arrays.toString(args));
+      if (log.isTraceEnabled()) log.trace("creating new instance for class '"+clazz.getName()+"' with args "+Arrays.toString(args));
       if (constructor==null) {
-        log.trace("getting default constructor");
+        if (log.isTraceEnabled()) log.trace("getting default constructor");
         constructor = clazz.getConstructor((Class[])null);
       }
-      className = constructor.getDeclaringClass().getName();
       if (!constructor.isAccessible()) {
-        log.trace("making constructor accessible");
+        if (log.isTraceEnabled()) log.trace("making constructor accessible");
         constructor.setAccessible(true);
       }
       return constructor.newInstance(args);
 
     } catch (Throwable t) {
-      throw new JbpmException("couldn't construct new '"+className+"' with args "+Arrays.toString(args), t);
+      throw new JbpmException("couldn't construct new '"+clazz.getName()+"' with args "+Arrays.toString(args), t);
     }
   }
   
@@ -231,7 +118,7 @@
     }
     try {
       Object value = field.get(object);
-      log.trace("got value '"+value+"' from field '"+field.getName()+"'");
+      if (log.isTraceEnabled()) log.trace("got value '"+value+"' from field '"+field.getName()+"'");
       return value;
     } catch (Exception e) {
       throw new JbpmException("couldn't get '"+field.getName()+"'", e);
@@ -243,9 +130,9 @@
       throw new NullPointerException("field is null");
     }
     try {
-      log.trace("setting field '"+field.getName()+"' to value '"+value+"'");
+      if (log.isTraceEnabled()) log.trace("setting field '"+field.getName()+"' to value '"+value+"'");
       if (!field.isAccessible()) {
-        log.trace("making field accessible");
+        if (log.isTraceEnabled()) log.trace("making field accessible");
         field.setAccessible(true);
       }
       field.set(object, value);
@@ -259,7 +146,7 @@
       throw new JbpmException("method is null");
     }
     try {
-      log.trace("invoking '"+method.getName()+"' on '"+target+"' with "+Arrays.toString(args));
+      if (log.isTraceEnabled()) log.trace("invoking '"+method.getName()+"' on '"+target+"' with "+Arrays.toString(args));
       if (!method.isAccessible()) {
         log.trace("making method accessible");
         method.setAccessible(true);
@@ -274,7 +161,7 @@
   }
 
   public static Method findMethod(Class<?> clazz, String methodName, List<ArgDescriptor> argDescriptors, Object[] args) {
-    log.trace("searching for method "+methodName+" in "+clazz.getName());
+    if (log.isTraceEnabled()) log.trace("searching for method "+methodName+" in "+clazz.getName());
     Method[] candidates = clazz.getDeclaredMethods();
     for (int i=0; i<candidates.length; i++) {
       Method candidate = candidates[i];
@@ -283,7 +170,7 @@
          ) {
 
         if (log.isTraceEnabled()) {
-          log.trace("found matching method "+clazz.getName()+"."+methodName);
+          if (log.isTraceEnabled()) log.trace("found matching method "+clazz.getName()+"."+methodName);
         }
         
         return candidate;

Added: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/JbpmClassNotFoundException.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/JbpmClassNotFoundException.java	                        (rev 0)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/JbpmClassNotFoundException.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -0,0 +1,40 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt 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.jbpm.pvm.internal.wire;
+
+import org.jbpm.api.JbpmException;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public class JbpmClassNotFoundException extends JbpmException {
+
+  private static final long serialVersionUID = 1L;
+
+  public JbpmClassNotFoundException(String msg, Throwable cause) {
+    super(msg, cause);
+  }
+  public JbpmClassNotFoundException(Throwable cause) {
+    super(cause);
+  }
+}


Property changes on: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/JbpmClassNotFoundException.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/WireContext.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/WireContext.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/WireContext.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -34,7 +34,6 @@
 import org.jbpm.pvm.internal.cfg.ProcessEngineImpl;
 import org.jbpm.pvm.internal.env.Context;
 import org.jbpm.pvm.internal.env.EnvironmentImpl;
-import org.jbpm.pvm.internal.env.EnvironmentFactory;
 import org.jbpm.pvm.internal.model.ProcessElementImpl;
 import org.jbpm.pvm.internal.util.Closable;
 import org.jbpm.pvm.internal.util.DefaultObservable;
@@ -202,7 +201,6 @@
   // member fields ////////////////////////////////////////////////////////////
 
   protected String name = "wire-context";
-  protected transient ClassLoader classLoader;
   protected WireDefinition wireDefinition;
 
   /** objects that are being instantiated or constructed */
@@ -233,7 +231,6 @@
   public WireContext(WireDefinition wireDefinition, String name) {
     this.wireDefinition = wireDefinition;
     this.name = name;
-    this.classLoader = (wireDefinition!=null ? wireDefinition.getClassLoader() : null);
     create();
   }
 
@@ -249,7 +246,6 @@
   public WireContext(WireDefinition wireDefinition, String name, boolean delayCreate) {
     this.wireDefinition = wireDefinition;
     this.name = name;
-    this.classLoader = (wireDefinition!=null ? wireDefinition.getClassLoader() : null);
 
     if (! delayCreate) {
       create();
@@ -669,21 +665,6 @@
            ) ;
   }
 
-  /** the class loader to use to create objects or if none was explicitely set in this wire context, 
-   * the default context class loader for the current thread. */
-  public ClassLoader getClassLoader() {
-    // if there is a specific classloader specified
-    if (classLoader!=null) {
-      return classLoader;
-    }
-    // otherwise, use the current environment classloader
-    return Thread.currentThread().getContextClassLoader();
-  }
-
-  public boolean hasClassLoader() {
-    return classLoader!=null;
-  }
-
   // search by class //////////////////////////////////////////////////////////
 
   /** searches for the first descriptor that defines an object of the given type.
@@ -730,9 +711,6 @@
   public String getName() {
     return name;
   }
-  public void setClassLoader(ClassLoader classLoader) {
-    this.classLoader = classLoader;
-  }
   public WireDefinition getWireDefinition() {
     return wireDefinition;
   }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/WireDefinition.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/WireDefinition.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/WireDefinition.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -44,7 +44,6 @@
   private static final long serialVersionUID = 1L;
   // static Log log = Log.getLog(WireDefinition.class.getName());
 
-  transient ClassLoader classLoader;
   /** maps object names to {@link Descriptor}s */
   Map<String, Descriptor> descriptors;
   Map<Class<?>, String> descriptorNames;
@@ -189,15 +188,6 @@
     }
   }
 
-  public ClassLoader getClassLoader() {
-    // if there is a specific classloader specified
-    if (classLoader!=null) {
-      return classLoader;
-    }
-    // otherwise, use the current environment classloader
-    return Thread.currentThread().getContextClassLoader();
-  }
-  
   public void addWireDefinition(WireDefinition wireDefinition) {
     if ( (wireDefinition!=null)
          && (wireDefinition.getDescriptors()!=null)
@@ -223,7 +213,4 @@
   public void setDescriptors(Map<String, Descriptor> descriptors) {
     this.descriptors = descriptors;
   }
-  public void setClassLoader(ClassLoader classLoader) {
-    this.classLoader = classLoader;
-  }
 }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/AbstractCollectionBinding.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/AbstractCollectionBinding.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/AbstractCollectionBinding.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -53,14 +53,15 @@
     }
 
     try {
-      Class<?> collectionClass = ReflectUtil.loadClass(parse.getClassLoader(), className);
+      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+      Class<?> collectionClass = Class.forName(className, true, classLoader);
       
       if (collectionInterface.isAssignableFrom(collectionClass)) {
         return true;
       } else {
         parse.addProblem("class "+ className+" is not a "+collectionInterface.getName());
       }
-    } catch (JbpmException e) {
+    } catch (Exception e) {
       parse.addProblem("class "+className+" could not be found");
     }
     return false;

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/HibernateConfigurationBinding.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/HibernateConfigurationBinding.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/HibernateConfigurationBinding.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -162,7 +162,9 @@
 
           if (configElement.hasAttribute("resource")) {
             String resource = configElement.getAttribute("resource");
-            streamSource = new ResourceStreamInput(resource, parse.getClassLoader());
+            
+            ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+            streamSource = new ResourceStreamInput(resource, classLoader);
           }
 
           if (configElement.hasAttribute("url")) {

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/ScriptManagerBinding.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/ScriptManagerBinding.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/ScriptManagerBinding.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -79,7 +79,8 @@
            && (factoryClassName!=null)
          ) {
         try {
-          Class<?> factoryClass = ReflectUtil.loadClass(parse.getClassLoader(), factoryClassName);
+          ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+          Class<?> factoryClass = Class.forName(factoryClassName, true, classLoader);
           ScriptEngineFactory scriptEngineFactory = (ScriptEngineFactory) factoryClass.newInstance();
           scriptEngineManager.registerEngineName(languageName, scriptEngineFactory);
         } catch (Exception e) {

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/TypesBinding.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/TypesBinding.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/TypesBinding.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -71,7 +71,8 @@
     
     if (element.hasAttribute("resource")) {
       String resource = element.getAttribute("resource");
-      streamSource = new ResourceStreamInput(resource, parse.getClassLoader());
+      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+      streamSource = new ResourceStreamInput(resource, classLoader);
       parser.importStream(streamSource, element, parse);
     }
     
@@ -158,9 +159,9 @@
     Converter converter = null;
     if (element.hasAttribute("converter")) {
       String converterClassName = element.getAttribute("converter");
-      ClassLoader classLoader = parse.getClassLoader();
       try {
-        Class<?> converterClass = ReflectUtil.loadClass(classLoader, converterClassName);
+        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+        Class<?> converterClass = Class.forName(converterClassName, true, classLoader);
         converter = (Converter) converterClass.newInstance();
       } catch (Exception e) {
         parse.addProblem("couldn't instantiate converter "+converterClassName, element);
@@ -185,9 +186,9 @@
     Class<?> variableClass = null;
     if (element.hasAttribute("variable-class")) {
       String variableClassName = element.getAttribute("variable-class"); 
-      ClassLoader classLoader = parse.getClassLoader();
       try {
-        variableClass = ReflectUtil.loadClass(classLoader, variableClassName);
+        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+        variableClass = Class.forName(variableClassName, true, classLoader);
       } catch (Exception e) {
         parse.addProblem("couldn't instantiate variable-class "+variableClassName, e);
       }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/ClassDescriptor.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/ClassDescriptor.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/ClassDescriptor.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -1,7 +1,5 @@
 package org.jbpm.pvm.internal.wire.descriptor;
 
-import org.jbpm.api.JbpmException;
-import org.jbpm.pvm.internal.util.ReflectUtil;
 import org.jbpm.pvm.internal.wire.WireContext;
 import org.jbpm.pvm.internal.wire.WireException;
 
@@ -22,10 +20,10 @@
    * @throws WireException if the class could not be loaded.
    */
   public Object construct(WireContext wireContext) {
-    ClassLoader classLoader = wireContext.getClassLoader();
     try {
-      return ReflectUtil.loadClass(classLoader, text);
-    } catch (JbpmException e) {
+      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+      return Class.forName(text, true, classLoader);
+    } catch (Exception e) {
       Throwable cause = (e.getCause()!=null ? e.getCause() : e);
       throw new WireException("couldn't load class '"+text+"': "+cause.getMessage(), cause);
     }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/ClassLoaderDescriptor.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/ClassLoaderDescriptor.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/ClassLoaderDescriptor.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -33,7 +33,7 @@
   private static final long serialVersionUID = 1L;
 
   public Object construct(WireContext wireContext) {
-    return wireContext.getClassLoader();
+    return Thread.currentThread().getContextClassLoader();
   }
 
   public Class<?> getType(WireDefinition wireDefinition) {

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/CollectionDescriptor.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/CollectionDescriptor.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/CollectionDescriptor.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -38,8 +38,8 @@
     Object object = null;
     try {
       // instantiate
-      ClassLoader classLoader = wireContext.getClassLoader();
-      Class<?> clazz = ReflectUtil.loadClass(classLoader, className);
+      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+      Class<?> clazz = Class.forName(className, true, classLoader);
       object = clazz.newInstance();
       
       if (isSynchronized) {

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/HibernateConfigurationDescriptor.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/HibernateConfigurationDescriptor.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/HibernateConfigurationDescriptor.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -55,10 +55,14 @@
     // instantiation of the configuration
     Configuration configuration = null;
     if (className!=null) {
-      ClassLoader classLoader = wireContext.getClassLoader();
-      log.trace("instantiating hibernate configuration class "+className);
-      Class<?> configurationClass = ReflectUtil.loadClass(classLoader, className);
-      configuration = (Configuration) ReflectUtil.newInstance(configurationClass);
+      try {
+        log.trace("instantiating hibernate configuration class "+className);
+        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+        Class<?> configurationClass = Class.forName(className, true, classLoader);
+        configuration = (Configuration) ReflectUtil.newInstance(configurationClass);
+      } catch (Exception e) {
+        throw new JbpmException("couldn't instantiate hibernate configuration class "+className, e);
+      }
     } else {
       log.trace("instantiating default hibernate configuration");
       configuration = new Configuration();
@@ -91,8 +95,9 @@
   public Class<?> getType(WireDefinition wireDefinition) {
     if (className!=null) {
       try {
-        return ReflectUtil.loadClass(wireDefinition.getClassLoader(), className);
-      } catch (JbpmException e) {
+        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+        return Class.forName(className, true, classLoader);
+      } catch (Exception e) {
         throw new WireException("couldn't create hibernate configuration '"+className+"': "+e.getMessage(), e.getCause());
       }
     }
@@ -193,8 +198,9 @@
       this.resource = resource;
     }
     public void apply(Object target, WireContext wireContext) {
+      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
       Configuration configuration = (Configuration) target;
-      configuration.addResource(resource, wireContext.getClassLoader());
+      configuration.addResource(resource, classLoader);
     }
     public String toString() {
       return "adding mapping resource "+resource+" to hibernate configuration";
@@ -225,7 +231,8 @@
     public void apply(Object target, WireContext wireContext) {
       Configuration configuration = (Configuration) target;
       try {
-        Class<?> persistentClass = wireContext.getClassLoader().loadClass(className);
+        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+        Class<?> persistentClass = Class.forName(className, true, classLoader);
         configuration.addClass(persistentClass);
       } catch (Exception e) {
         throw new JbpmException("couldn't add mapping for class "+className, e);

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/ObjectDescriptor.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/ObjectDescriptor.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/ObjectDescriptor.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -14,6 +14,7 @@
 import org.jbpm.pvm.internal.script.ScriptManager;
 import org.jbpm.pvm.internal.util.ReflectUtil;
 import org.jbpm.pvm.internal.wire.Descriptor;
+import org.jbpm.pvm.internal.wire.JbpmClassNotFoundException;
 import org.jbpm.pvm.internal.wire.WireContext;
 import org.jbpm.pvm.internal.wire.WireDefinition;
 import org.jbpm.pvm.internal.wire.WireException;
@@ -139,10 +140,10 @@
 
     if (className!=null) {
       try {
-        ClassLoader classLoader = wireContext.getClassLoader();
-        clazz = ReflectUtil.loadClass(classLoader, className);
+        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+        clazz = Class.forName(className, true, classLoader);
       } catch (Exception e) {
-        throw new WireException("couldn't create object"+(name!=null ? " '"+name+"'" : "")+": "+e.getMessage(), e);
+        throw new JbpmClassNotFoundException("couldn't load class "+className, e);
       }
 
       if (methodName==null) {
@@ -236,9 +237,10 @@
   public Class<?> getType(WireDefinition wireDefinition) {
     if (className!=null) {
       try {
-        return ReflectUtil.loadClass(wireDefinition.getClassLoader(), className);
-      } catch (JbpmException e) {
-        throw new WireException("couldn't get type of '"+(name!=null ? name : className)+"': "+e.getMessage(), e.getCause());
+        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+        return Class.forName(className, true, classLoader);
+      } catch (Exception e) {
+        throw new WireException("couldn't load class '"+className+"'", e);
       }
     }
     

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/PropertiesDescriptor.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/PropertiesDescriptor.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/PropertiesDescriptor.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -67,7 +67,8 @@
       
       if (resource!=null) {
         description = "resource "+resource;
-        InputStream inputStream = wireContext.getClassLoader().getResourceAsStream(resource);
+        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+        InputStream inputStream = classLoader.getResourceAsStream(resource);
         if (inputStream==null) {
           throw new RuntimeException("resource "+resource+" doesn't exist");
         }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/ReferenceDescriptor.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/ReferenceDescriptor.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/ReferenceDescriptor.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -37,7 +37,8 @@
       return wireContext.get(text, isDelayedInitializationAllowed());
     } else if (type!=null) {
       try {
-        Class<?> clazz = wireContext.getClassLoader().loadClass(type);
+        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+        Class<?> clazz = Class.forName(type, true, classLoader);
         return wireContext.get(clazz);
       } catch (Exception e) {
         throw new JbpmException("couldn't load "+type, e);

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/operation/FieldOperation.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/operation/FieldOperation.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/operation/FieldOperation.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -35,7 +35,7 @@
       synchronized(this) {
         if (field==null) {
           Class<?> clazz = target.getClass();
-          field = ReflectUtil.getField(clazz, fieldName);
+          field = ReflectUtil.findField(clazz, fieldName);
         }
       }
 

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/xml/BindingParser.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/xml/BindingParser.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/xml/BindingParser.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -24,7 +24,6 @@
 import java.util.List;
 
 import org.jbpm.internal.log.Log;
-import org.jbpm.pvm.internal.util.ReflectUtil;
 import org.jbpm.pvm.internal.util.XmlUtil;
 import org.jbpm.pvm.internal.xml.Binding;
 import org.jbpm.pvm.internal.xml.Bindings;
@@ -46,7 +45,8 @@
       Binding binding = null;
       if (bindingClassName!=null) {
         try {
-          Class<?> bindingClass = ReflectUtil.loadClass(classLoader, bindingClassName);
+          ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+          Class<?> bindingClass = Class.forName(bindingClassName, true, classLoader);
           binding = (Binding) bindingClass.newInstance();
         } catch (Exception e) {
           log.trace("couldn't instantiate binding "+bindingClassName);

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/xml/WireParser.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/xml/WireParser.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/xml/WireParser.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -4,8 +4,8 @@
 import java.util.Enumeration;
 import java.util.List;
 
+import org.jbpm.api.JbpmException;
 import org.jbpm.internal.log.Log;
-import org.jbpm.pvm.internal.util.ReflectUtil;
 import org.jbpm.pvm.internal.util.XmlUtil;
 import org.jbpm.pvm.internal.wire.Descriptor;
 import org.jbpm.pvm.internal.wire.WireContext;
@@ -193,7 +193,6 @@
     if (wireDefinition==null) {
       wireDefinition = new WireDefinition();
     }
-    wireDefinition.setClassLoader(classLoader);
     
     parse.pushObject(wireDefinition);
     try {
@@ -271,7 +270,13 @@
     BindingParser bindingParser = new BindingParser();
  
     for (String wireResource: DEFAULT_WIRE_BINDING_RESOURCES) {
-      Enumeration<URL> resourceUrls = ReflectUtil.getResources(null, wireResource);
+      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+      Enumeration<URL> resourceUrls;
+      try {
+        resourceUrls = classLoader.getResources(wireResource);
+      } catch (Exception e) {
+        throw new JbpmException("couldn't get resource urls for "+wireResource, e);
+      }
       if (resourceUrls.hasMoreElements()) {
         while (resourceUrls.hasMoreElements()) {
           URL resourceUrl = resourceUrls.nextElement();

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/xml/Parse.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/xml/Parse.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/xml/Parse.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -52,7 +52,6 @@
   
   protected Parser parser;
   
-  protected ClassLoader classLoader;
   protected StreamInput streamInput;
   protected InputStream inputStream;
   protected InputSource inputSource;
@@ -87,15 +86,9 @@
     return this;
   }
 
-  /** specify the classLoader to be used for resource input 
-   * (this is optional) */
-  public Parse setClassLoader(ClassLoader classLoader) {
-    this.classLoader = classLoader;
-    return this;
-  }
-
   /** specify a resource as the source for this parse */
   public Parse setResource(String resource) {
+    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
     this.streamInput = new ResourceStreamInput(resource, classLoader);
     return this;
   }
@@ -244,8 +237,4 @@
   public Document getDocument() {
     return document;
   }
-  /** the ClassLoader used to resolve input resources. */
-  public ClassLoader getClassLoader() {
-    return classLoader;
-  }
 }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/xml/Parser.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/xml/Parser.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/xml/Parser.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -396,8 +396,7 @@
           parseDocument(parse.document, parse);
 
         } catch (Exception e) {
-          e.printStackTrace();
-          parse.addProblem("couldn't interpret the dom model: "+e.getMessage(), e);
+          parse.addProblem("parsing exception: "+e.getMessage(), e);
         }
       }
       

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/xml/ProblemList.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/xml/ProblemList.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/xml/ProblemList.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -153,13 +153,20 @@
       if (message!=null) {
         errorMsg.append(message);
         errorMsg.append(": ");
+      } else if (problems.size()==1) {
+        Throwable singleCause = problems.get(0).getCause();
+        if ( (singleCause!=null)
+             && (JbpmException.class.isAssignableFrom(singleCause.getClass()))
+           ) {
+          return (JbpmException) singleCause;
+        }
       }
       
       for (Problem p : getProblems()) {
         errorMsg.append(NEWLINE);
         errorMsg.append("  ");
         errorMsg.append(p.toString());
-        
+
         if (p.getCause()!=null) {
           cause = new JbpmException(p.getCause());
         }

Modified: jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/activities/PrintLnBuilder.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/activities/PrintLnBuilder.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/activities/PrintLnBuilder.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -34,7 +34,7 @@
   
   public PrintLnBuilder(ActivityBuilder activityBuilder) {
     super(activityBuilder);
-    activity.setBehaviour(printLn);
+    activity.setActivityBehaviour(printLn);
   }
   
   public PrintLnBuilder message(String message) {

Modified: jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/builder/BuilderTest.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/builder/BuilderTest.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/builder/BuilderTest.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -62,9 +62,6 @@
     ActivityImpl decisionActivity = (ActivityImpl) processDefinition.getActivity("start");
     assertNotNull(decisionActivity);
     assertEquals("start", decisionActivity.getName());
-
-    TestActivity testActivity = (TestActivity) decisionActivity.getBehaviour();
-    assertEquals("some cfg value", testActivity.getTestActivityProperty());
   }
 
   public void testBuilderMultipleOutgoingFlows() {

Modified: jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/builder/TestBehaviourBuilder.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/builder/TestBehaviourBuilder.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/builder/TestBehaviourBuilder.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -34,7 +34,7 @@
 
   public TestBehaviourBuilder(ActivityBuilder activityBuilder) {
     super(activityBuilder);
-    activity.setBehaviour(testActivity);
+    activity.setActivityBehaviour(testActivity);
   }
 
   public TestBehaviourBuilder testActivityProperty(String testActivityProperty) {

Modified: jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/internal/wire/ObjectWireTest.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/internal/wire/ObjectWireTest.java	2009-09-24 12:55:59 UTC (rev 5668)
+++ jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/internal/wire/ObjectWireTest.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -105,8 +105,7 @@
 
       fail("expected exception");
     } catch (JbpmException e) {
-      assertTextPresent("couldn't get type of 'o'", e.getMessage());
-      assertTextPresent("couldn't load class invalid-object-type", e.getMessage());
+      assertTextPresent("couldn't load class 'invalid-object-type'", e.getMessage());
     }
   }
 

Added: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/classloading/DelayedInstantiationTest.java
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/classloading/DelayedInstantiationTest.java	                        (rev 0)
+++ jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/classloading/DelayedInstantiationTest.java	2009-09-25 14:04:45 UTC (rev 5669)
@@ -0,0 +1,78 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt 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.jbpm.test.classloading;
+
+import org.jbpm.api.activity.ActivityBehaviour;
+import org.jbpm.api.activity.ActivityExecution;
+import org.jbpm.test.JbpmTestCase;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public class DelayedInstantiationTest extends JbpmTestCase {
+  
+  public static class MyActivity implements ActivityBehaviour {
+    private static final long serialVersionUID = 1L;
+    public void execute(ActivityExecution execution) throws Exception {
+    }
+  }
+  
+  public static class StrippingClassLoader extends ClassLoader {
+    public StrippingClassLoader(ClassLoader parent) {
+      super(parent);
+    }
+
+    public Class loadClass(String className) throws ClassNotFoundException {
+      if ( className.startsWith("==")
+           && className.endsWith("==") ) {
+        className = className.substring(2, className.length()-2);
+      }
+      ClassLoader parent = getParent();
+      return parent.loadClass(className);
+    }
+    
+  }
+
+  public void testDelayedInstantiation() {
+    deployJpdlXmlString(
+            "<process name='UserClassNotVisibleDuringprocessParsing'>" +
+            "  <start>" +
+            "    <transition to='a' />" +
+            "  </start>" +
+            "  <custom name='a' class='=="+MyActivity.class.getName()+"==' >" +
+            "    <transition to='b' />" +
+            "  </custom>" + 
+            "  <state name='b' />" +
+            "</process>"
+          );
+
+//    ClassLoader original = Thread.currentThread().getContextClassLoader();
+//    StrippingClassLoader strippingClassLoader = new StrippingClassLoader(original);
+//    Thread.currentThread().setContextClassLoader(strippingClassLoader);
+//    try {
+//      executionService.startProcessInstanceByKey("UserClassNotVisibleDuringprocessParsing");
+//    } finally {
+//      Thread.currentThread().setContextClassLoader(original);
+//    }
+  }
+}


Property changes on: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/classloading/DelayedInstantiationTest.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain



More information about the jbpm-commits mailing list