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

do-not-reply at jboss.org do-not-reply at jboss.org
Tue Sep 29 09:23:39 EDT 2009


Author: tom.baeyens at jboss.com
Date: 2009-09-29 09:23:38 -0400 (Tue, 29 Sep 2009)
New Revision: 5671

Added:
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/ClassLoaderContext.java
   jbpm4/trunk/modules/test-cfg/src/test/java/org/jbpm/test/deploymentclassloading/
   jbpm4/trunk/modules/test-cfg/src/test/java/org/jbpm/test/deploymentclassloading/CustomActivity.java
   jbpm4/trunk/modules/test-cfg/src/test/java/org/jbpm/test/deploymentclassloading/CustomEventListener.java
   jbpm4/trunk/modules/test-cfg/src/test/java/org/jbpm/test/deploymentclassloading/DeploymentClassLoadingTest.java
   jbpm4/trunk/modules/test-cfg/src/test/resources/org/jbpm/test/deploymentclassloading/
   jbpm4/trunk/modules/test-cfg/src/test/resources/org/jbpm/test/deploymentclassloading/jbpm.cfg.xml
Modified:
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/DecisionBinding.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/DecisionHandlerActivity.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/EventListenerBinding.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/jobexecutor/AcquireJobsCmd.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/jobexecutor/DispatcherThread.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/jobexecutor/GetNextDueDateCmd.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/jobexecutor/JobExecutor.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/ObservableElementImpl.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ProcessElementImpl.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/DeploymentClassLoader.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/RepositoryCache.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/RepositoryCacheImpl.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/RepositorySessionImpl.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/binding/JobExecutorBinding.java
Log:
JBPM-2430 classloading cleanup and added deployment classloading for user classes

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/DecisionBinding.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/DecisionBinding.java	2009-09-28 08:47:12 UTC (rev 5670)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/DecisionBinding.java	2009-09-29 13:23:38 UTC (rev 5671)
@@ -23,11 +23,9 @@
 
 import java.util.List;
 
-import org.jbpm.api.jpdl.DecisionHandler;
 import org.jbpm.pvm.internal.model.ActivityImpl;
 import org.jbpm.pvm.internal.model.TransitionImpl;
 import org.jbpm.pvm.internal.util.XmlUtil;
-import org.jbpm.pvm.internal.wire.WireContext;
 import org.jbpm.pvm.internal.wire.binding.ObjectBinding;
 import org.jbpm.pvm.internal.wire.descriptor.ExpressionEvaluatorDescriptor;
 import org.jbpm.pvm.internal.wire.descriptor.ObjectDescriptor;
@@ -70,8 +68,7 @@
       DecisionHandlerActivity decisionHandlerActivity = new DecisionHandlerActivity();
       ObjectDescriptor decisionHandlerDescriptor = (ObjectDescriptor) 
           objectBinding.parse(handlerElement, parse, wireParser);
-      DecisionHandler decisionHandler = (DecisionHandler) WireContext.create(decisionHandlerDescriptor);
-      decisionHandlerActivity.setDecisionHandler(decisionHandler);
+      decisionHandlerActivity.setDecisionHandlerDescriptor(decisionHandlerDescriptor);
       return decisionHandlerActivity;
     }
     

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/DecisionHandlerActivity.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/DecisionHandlerActivity.java	2009-09-28 08:47:12 UTC (rev 5670)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/DecisionHandlerActivity.java	2009-09-29 13:23:38 UTC (rev 5671)
@@ -22,14 +22,16 @@
 package org.jbpm.jpdl.internal.activity;
 
 import org.jbpm.api.JbpmException;
+import org.jbpm.api.ProcessDefinition;
 import org.jbpm.api.activity.ActivityExecution;
 import org.jbpm.api.jpdl.DecisionHandler;
 import org.jbpm.pvm.internal.env.EnvironmentImpl;
 import org.jbpm.pvm.internal.model.Activity;
 import org.jbpm.pvm.internal.model.ExecutionImpl;
+import org.jbpm.pvm.internal.model.ProcessDefinitionImpl;
 import org.jbpm.pvm.internal.model.Transition;
+import org.jbpm.pvm.internal.util.ReflectUtil;
 import org.jbpm.pvm.internal.wire.Descriptor;
-import org.jbpm.pvm.internal.wire.WireContext;
 
 /**
  * @author Tom Baeyens
@@ -39,6 +41,7 @@
   private static final long serialVersionUID = 1L;
   
   protected String decisionHandlerName;
+  protected Descriptor decisionHandlerDescriptor;
   protected DecisionHandler decisionHandler;
 
   public void execute(ActivityExecution execution) {
@@ -51,9 +54,10 @@
     String transitionName = null;
 
     DecisionHandler usedDecisionHandler = null;
-    if (decisionHandler!=null) {
-      usedDecisionHandler = decisionHandler;
+    if (decisionHandlerDescriptor!=null) {
       
+      usedDecisionHandler = getDecisionHandler(activity.getProcessDefinition());
+      
     } else if (decisionHandlerName!=null) {
       EnvironmentImpl environment = EnvironmentImpl.getCurrent();
       Object object = environment.get(decisionHandlerName);
@@ -80,10 +84,22 @@
     execution.take(transition);
   }
 
+  public synchronized DecisionHandler getDecisionHandler(ProcessDefinition processDefinition) {
+    if ( (decisionHandlerDescriptor!=null)
+         && (decisionHandler==null)
+       ) {
+      decisionHandler = (DecisionHandler) ReflectUtil.instantiateUserCode(decisionHandlerDescriptor, (ProcessDefinitionImpl) processDefinition);
+    }
+    return decisionHandler; 
+  }
+
   public void setDecisionHandlerName(String decisionHandlerName) {
     this.decisionHandlerName = decisionHandlerName;
   }
   public void setDecisionHandler(DecisionHandler decisionHandler) {
     this.decisionHandler = decisionHandler;
   }
+  public void setDecisionHandlerDescriptor(Descriptor decisionHandlerDescriptor) {
+    this.decisionHandlerDescriptor = decisionHandlerDescriptor;
+  }
 }

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/EventListenerBinding.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/EventListenerBinding.java	2009-09-28 08:47:12 UTC (rev 5670)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/EventListenerBinding.java	2009-09-29 13:23:38 UTC (rev 5671)
@@ -24,6 +24,7 @@
 import org.jbpm.api.listener.EventListener;
 import org.jbpm.jpdl.internal.xml.JpdlParser;
 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.xml.Parse;
 import org.jbpm.pvm.internal.xml.Parser;
@@ -40,9 +41,14 @@
   }
 
   public Object parse(Element element, Parse parse, Parser parser) {
-    Descriptor descriptor = JpdlParser.parseObjectDescriptor(element, parse);
-    EventListener eventListener = (EventListener) WireContext.create(descriptor);
-    return eventListener;
+    Descriptor eventListenerDescriptor = JpdlParser.parseObjectDescriptor(element, parse);
+    try {
+      EventListener eventListener = (EventListener) WireContext.create(eventListenerDescriptor);
+      return eventListener;
+      
+    } catch (JbpmClassNotFoundException e) {
+      return eventListenerDescriptor;
+    }
   }
 
 }

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-28 08:47:12 UTC (rev 5670)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java	2009-09-29 13:23:38 UTC (rev 5671)
@@ -62,7 +62,6 @@
 import org.jbpm.pvm.internal.task.AssignableDefinitionImpl;
 import org.jbpm.pvm.internal.task.SwimlaneDefinitionImpl;
 import org.jbpm.pvm.internal.task.TaskDefinitionImpl;
-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;
@@ -177,11 +176,7 @@
   public Object parseDocumentElement(Element documentElement, Parse parse) {
     List<ProcessDefinitionImpl> processDefinitions = new ArrayList<ProcessDefinitionImpl>();
     
-    JpdlProcessDefinition processDefinition = new JpdlProcessDefinition();
-//    if (processDefinition==null) {
-//      processDefinition = new JpdlProcessDefinition();
-//      parse.setDocumentObject(processDefinition);
-//    }
+    JpdlProcessDefinition processDefinition = instantiateNewJpdlProcessDefinition();
     
     processDefinitions.add(processDefinition);
     
@@ -244,6 +239,10 @@
     return processDefinitions;
   }
 
+  protected JpdlProcessDefinition instantiateNewJpdlProcessDefinition() {
+    return new JpdlProcessDefinition();
+  }
+
   protected void resolveTransitionDestinations(Parse parse, JpdlProcessDefinition processDefinition, UnresolvedTransitions unresolvedTransitions) {
     for (UnresolvedTransition unresolvedTransition: unresolvedTransitions.list) {
       unresolvedTransition.resolve(processDefinition, parse);
@@ -389,8 +388,15 @@
       for (Element eventListenerElement: XmlUtil.elements(element)) {
         JpdlBinding eventBinding = (JpdlBinding) getBinding(eventListenerElement, CATEGORY_EVENT_LISTENER);
         if (eventBinding!=null) {
-          EventListener eventListener = (EventListener) eventBinding.parse(eventListenerElement, parse, this);
-          EventListenerReference eventListenerReference = event.createEventListenerReference(eventListener);
+          EventListenerReference eventListenerReference = null;
+          Object parseResult = eventBinding.parse(eventListenerElement, parse, this);
+          if (parseResult instanceof EventListener) {
+            EventListener eventListener = (EventListener) parseResult;
+            eventListenerReference = event.createEventListenerReference(eventListener);
+          } else {
+            Descriptor eventListenerDescriptor = (Descriptor) parseResult;
+            eventListenerReference = event.createEventListenerReference(eventListenerDescriptor);
+          }
           
           if (XmlUtil.attributeBoolean(eventListenerElement, "propagation", false, parse, false)) {
             eventListenerReference.setPropagationEnabled(true);

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/jobexecutor/AcquireJobsCmd.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/jobexecutor/AcquireJobsCmd.java	2009-09-28 08:47:12 UTC (rev 5670)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/jobexecutor/AcquireJobsCmd.java	2009-09-29 13:23:38 UTC (rev 5671)
@@ -58,13 +58,13 @@
       Collection<JobImpl<?>> acquiredJobs = new ArrayList<JobImpl<?>>();
       
       DbSession dbSession = environment.get(DbSession.class);
-      log.debug("start querying first acquirable job...");
+      if (log.isTraceEnabled()) log.trace("start querying first acquirable job...");
 
       JobImpl<?> job = dbSession.findFirstAcquirableJob();
 
       if (job!=null) {
         if (job.isExclusive()) {
-          log.trace("exclusive acquirable job found ("+job+"). querying for other exclusive jobs to lock them all in one tx...");
+          if (log.isTraceEnabled()) log.trace("exclusive acquirable job found ("+job+"). querying for other exclusive jobs to lock them all in one tx...");
           List<JobImpl<?>> otherExclusiveJobs = dbSession.findExclusiveJobs(job.getProcessInstance());
           acquiredJobs.addAll(otherExclusiveJobs);
         } else {
@@ -73,16 +73,16 @@
 
         for (JobImpl<?> acquiredJob: acquiredJobs) {
           long lockExpirationTime = System.currentTimeMillis()+jobExecutor.getLockMillis();
-          log.trace("trying to obtain a lock for '"+acquiredJob+"' with exp "+timeFormat.format(new Date(lockExpirationTime)));
+          if (log.isTraceEnabled()) log.trace("trying to obtain a lock for '"+acquiredJob+"' with exp "+timeFormat.format(new Date(lockExpirationTime)));
           acquiredJob.acquire(jobExecutor.getName(), new Date(lockExpirationTime));
           acquiredJobDbids.add(acquiredJob.getDbid());
         }
 
       } else {
-        log.trace("no acquirable jobs in job table");
+        if (log.isTraceEnabled()) log.trace("no acquirable jobs in job table");
       }
       
-      log.debug("locking jobs "+acquiredJobDbids);
+      if (log.isTraceEnabled()) log.trace("locking jobs "+acquiredJobDbids);
       
     } catch (Exception e) {
       // if jboss is still booting exceptions that are due to improper 
@@ -95,5 +95,4 @@
     
     return acquiredJobDbids;
   }
-
 }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/jobexecutor/DispatcherThread.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/jobexecutor/DispatcherThread.java	2009-09-28 08:47:12 UTC (rev 5670)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/jobexecutor/DispatcherThread.java	2009-09-29 13:23:38 UTC (rev 5671)
@@ -77,9 +77,9 @@
             if (waitPeriod > 0) {
               synchronized (semaphore) {
                 if (!checkForNewJobs) {
-                  log.debug(getName()+" will wait for max "+waitPeriod+"ms on "+jobExecutor);
+                  log.trace(getName()+" will wait for max "+waitPeriod+"ms on "+jobExecutor);
                   semaphore.wait(waitPeriod);
-                  log.debug(getName()+" woke up");
+                  log.trace(getName()+" woke up");
                 } else {
                   log.debug("skipped wait because new message arrived");
                 }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/jobexecutor/GetNextDueDateCmd.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/jobexecutor/GetNextDueDateCmd.java	2009-09-28 08:47:12 UTC (rev 5670)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/jobexecutor/GetNextDueDateCmd.java	2009-09-29 13:23:38 UTC (rev 5671)
@@ -48,13 +48,13 @@
 
   public Date execute(Environment environment) throws Exception {
     Date nextDueDate = null;
-    log.debug("getting next due date...");
+    if (log.isTraceEnabled()) log.trace("getting next due date...");
     DbSession dbSession = environment.get(DbSession.class);
     JobImpl<?> job = dbSession.findFirstDueJob();
     if (job!=null) {
       nextDueDate = job.getDueDate();
     }
-    log.debug("next due date is "+nextDueDate);
+    if (log.isTraceEnabled()) log.trace("next due date is "+nextDueDate);
     return nextDueDate;
   }
 

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/jobexecutor/JobExecutor.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/jobexecutor/JobExecutor.java	2009-09-28 08:47:12 UTC (rev 5670)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/jobexecutor/JobExecutor.java	2009-09-29 13:23:38 UTC (rev 5671)
@@ -83,8 +83,12 @@
       
       isActive = true;
       log.trace("starting thread pool for job executor '"+name+"'...");
-      threadPool = new ThreadPoolExecutor(nbrOfThreads, nbrOfThreads, 0L, TimeUnit.MILLISECONDS,
-          new ArrayBlockingQueue<Runnable>(nbrOfThreads), JobRejectionHandler.INSTANCE);
+      threadPool = new ThreadPoolExecutor(nbrOfThreads, 
+                                          nbrOfThreads, 
+                                          0L, 
+                                          TimeUnit.MILLISECONDS,
+                                          new ArrayBlockingQueue<Runnable>(nbrOfThreads), 
+                                          JobRejectionHandler.INSTANCE);
 
       log.trace("starting dispatcher thread for job executor '"+name+"'...");
       dispatcherThread = new DispatcherThread(this);

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-28 08:47:12 UTC (rev 5670)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ActivityImpl.java	2009-09-29 13:23:38 UTC (rev 5671)
@@ -27,8 +27,8 @@
 import java.util.Map;
 
 import org.jbpm.api.activity.ActivityBehaviour;
+import org.jbpm.pvm.internal.util.ReflectUtil;
 import org.jbpm.pvm.internal.wire.Descriptor;
-import org.jbpm.pvm.internal.wire.WireContext;
 
 /**
  * @author Tom Baeyens
@@ -358,7 +358,7 @@
       return activityBehaviour;
     }
     if (activityBehaviourDescriptor!=null) {
-      ActivityBehaviour createdBehaviour = (ActivityBehaviour) WireContext.create(activityBehaviourDescriptor);
+      ActivityBehaviour createdBehaviour = (ActivityBehaviour) ReflectUtil.instantiateUserCode(activityBehaviourDescriptor, processDefinition);
       if (!isActivityBehaviourStateful) {
         activityBehaviour = createdBehaviour;
       }
@@ -366,7 +366,7 @@
     }
     return null;
   }
-  
+
   // getters and setters //////////////////////////////////////////////////////
   
   public ObservableElementImpl getParent() {

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-28 08:47:12 UTC (rev 5670)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventImpl.java	2009-09-29 13:23:38 UTC (rev 5671)
@@ -52,6 +52,7 @@
       listenerReferences = new ArrayList<EventListenerReference>();
     }
     EventListenerReference activityReference = new EventListenerReference();
+    activityReference.setProcessDefinition(processDefinition);
     listenerReferences.add(activityReference);
     return activityReference;
   }

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-28 08:47:12 UTC (rev 5670)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventListenerReference.java	2009-09-29 13:23:38 UTC (rev 5671)
@@ -22,8 +22,8 @@
 package org.jbpm.pvm.internal.model;
 
 import org.jbpm.api.listener.EventListener;
+import org.jbpm.pvm.internal.util.ReflectUtil;
 import org.jbpm.pvm.internal.wire.Descriptor;
-import org.jbpm.pvm.internal.wire.WireContext;
 
 /**
  * @author Tom Baeyens
@@ -60,7 +60,7 @@
       return eventListener;
     }
     if (eventListenerDescriptor!=null) {
-      EventListener createdEventListener = (EventListener) WireContext.create(eventListenerDescriptor);
+      EventListener createdEventListener = (EventListener) ReflectUtil.instantiateUserCode(eventListenerDescriptor, processDefinition);
       if (!isEventListenerStateful) {
         eventListener = createdEventListener;
       }
@@ -68,7 +68,7 @@
     }
     return null;
   }
-
+  
   // getters and setters //////////////////////////////////////////////////////
 
   public Continuation getContinuation() {

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-28 08:47:12 UTC (rev 5670)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExceptionHandlerImpl.java	2009-09-29 13:23:38 UTC (rev 5671)
@@ -46,6 +46,7 @@
 
   protected long dbid;
   protected int dbversion;
+  protected ProcessDefinitionImpl processDefinition;
   protected String exceptionClassName;
   protected boolean isTransactional;
   protected boolean isRethrowMasked;
@@ -72,6 +73,7 @@
       eventListenerReferences = new ArrayList<EventListenerReference>();
     }
     EventListenerReference eventListenerReference = new EventListenerReference();
+    eventListenerReference.setProcessDefinition(processDefinition);
     eventListenerReferences.add(eventListenerReference);
     return eventListenerReference;
   }
@@ -253,4 +255,10 @@
   public void setEventListenerReferences(List<EventListenerReference> eventListenerReferences) {
     this.eventListenerReferences = eventListenerReferences;
   }
+  public ProcessDefinitionImpl getProcessDefinition() {
+    return processDefinition;
+  }
+  public void setProcessDefinition(ProcessDefinitionImpl processDefinition) {
+    this.processDefinition = processDefinition;
+  }
 }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ObservableElementImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ObservableElementImpl.java	2009-09-28 08:47:12 UTC (rev 5670)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ObservableElementImpl.java	2009-09-29 13:23:38 UTC (rev 5671)
@@ -60,6 +60,7 @@
     EventImpl event = new EventImpl();
     event.setObservableElement(this);
     event.setName(eventName);
+    event.setProcessDefinition(processDefinition);
     return addEvent(event);
   }
 

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ProcessElementImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ProcessElementImpl.java	2009-09-28 08:47:12 UTC (rev 5670)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ProcessElementImpl.java	2009-09-29 13:23:38 UTC (rev 5671)
@@ -59,6 +59,7 @@
     if (exceptionHandlers==null) {
       exceptionHandlers = new ArrayList<ExceptionHandlerImpl>();
     }
+    exceptionHandler.setProcessDefinition(processDefinition);
     exceptionHandlers.add(exceptionHandler);
   }
   

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/DeploymentClassLoader.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/DeploymentClassLoader.java	2009-09-28 08:47:12 UTC (rev 5670)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/DeploymentClassLoader.java	2009-09-29 13:23:38 UTC (rev 5671)
@@ -30,6 +30,8 @@
 import java.net.URLStreamHandler;
 
 import org.jbpm.api.JbpmException;
+import org.jbpm.pvm.internal.env.EnvironmentImpl;
+import org.jbpm.pvm.internal.session.RepositorySession;
 import org.jbpm.pvm.internal.util.IoUtil;
 
 
@@ -38,26 +40,31 @@
  */
 public class DeploymentClassLoader extends ClassLoader {
 
-  private DeploymentImpl deployment = null;
+  private String deploymentId = null;
 
-  public DeploymentClassLoader(ClassLoader parent, DeploymentImpl deployment ) {
+  public DeploymentClassLoader(ClassLoader parent, String deploymentId ) {
     super(parent);
-    this.deployment = deployment;
+    this.deploymentId = deploymentId;
   }
 
   public URL findResource(String name) {
     URL url = null;
-    byte[] bytes = deployment.getBytes(name);
+    byte[] bytes = getDeployment().getBytes(name);
     if (bytes!=null) {
       InputStream inputStream = new ByteArrayInputStream(bytes);
       try {
-        url = new URL(null, "jbpm://"+deployment.getDbid()+"/"+name, new BytesUrlStreamHandler(inputStream));
+        url = new URL(null, "jbpm://"+deploymentId+"/"+name, new BytesUrlStreamHandler(inputStream));
       } catch (MalformedURLException e) {
         throw new JbpmException("couldn't create url", e);
       }
     }
     return url;
   }
+
+  protected DeploymentImpl getDeployment() {
+    RepositorySession repositorySession = EnvironmentImpl.getFromCurrent(RepositorySession.class);
+    return repositorySession.getDeployment(deploymentId);
+  }
   
   public static class BytesUrlStreamHandler extends URLStreamHandler {
     InputStream inputStream;
@@ -86,7 +93,7 @@
     Class clazz = null;
 
     String fileName = name.replace( '.', '/' ) + ".class";
-    byte[] bytes = deployment.getBytes(fileName);
+    byte[] bytes = getDeployment().getBytes(fileName);
     if (bytes!=null) {
       try {
         InputStream inputStream = new ByteArrayInputStream(bytes);
@@ -109,7 +116,7 @@
     }
 
     if (clazz==null) {
-      throw new ClassNotFoundException("class '"+name+"' could not be found in jbpm "+deployment);
+      throw new ClassNotFoundException("class '"+name+"' could not be found in deployment "+deploymentId);
     }
 
     return clazz;

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/RepositoryCache.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/RepositoryCache.java	2009-09-28 08:47:12 UTC (rev 5670)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/RepositoryCache.java	2009-09-29 13:23:38 UTC (rev 5671)
@@ -35,4 +35,7 @@
   Set<String> getCachedDeploymentIds();
   void remove(String deploymentId);
   void clear();
+  
+  DeploymentClassLoader getDeploymentClassLoader(String deploymentId, ClassLoader original);
+  void setDeploymentClassLoader(String deploymentId, ClassLoader original, DeploymentClassLoader deploymentClassLoader);
 }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/RepositoryCacheImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/RepositoryCacheImpl.java	2009-09-28 08:47:12 UTC (rev 5670)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/RepositoryCacheImpl.java	2009-09-29 13:23:38 UTC (rev 5671)
@@ -21,8 +21,10 @@
  */
 package org.jbpm.pvm.internal.repository;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -33,6 +35,7 @@
 public class RepositoryCacheImpl implements RepositoryCache {
   
   Map<String, Map<String, Object>> deployments = new HashMap<String, Map<String,Object>>();
+  Map<Object, DeploymentClassLoader> deploymentClassLoaders = new HashMap<Object, DeploymentClassLoader>();
 
   public Object get(String deploymentId, String objectName) {
     Map<String, Object> deploymentObjects = deployments.get(deploymentId);
@@ -74,4 +77,20 @@
   public void clear() {
     deployments = new HashMap<String, Map<String,Object>>();
   }
+
+  public DeploymentClassLoader getDeploymentClassLoader(String deploymentId, ClassLoader original) {
+    Object key = getDeploymentClassLoaderKey(deploymentId, original);
+    return deploymentClassLoaders.get(key);
+  }
+
+  public void setDeploymentClassLoader(String deploymentId, ClassLoader original, DeploymentClassLoader deploymentClassLoader) {
+    deploymentClassLoaders.put(getDeploymentClassLoaderKey(deploymentId, original), deploymentClassLoader);
+  }
+
+  protected Object getDeploymentClassLoaderKey(String deploymentId, ClassLoader original) {
+    List<Object> key = new ArrayList<Object>();
+    key.add(deploymentId);
+    key.add(original);
+    return key;
+  }
 }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/RepositorySessionImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/RepositorySessionImpl.java	2009-09-28 08:47:12 UTC (rev 5670)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/RepositorySessionImpl.java	2009-09-29 13:23:38 UTC (rev 5671)
@@ -32,7 +32,6 @@
 import org.jbpm.api.ProcessDefinition;
 import org.jbpm.api.ProcessDefinitionQuery;
 import org.jbpm.internal.log.Log;
-import org.jbpm.pvm.internal.env.EnvironmentImpl;
 import org.jbpm.pvm.internal.id.DbidGenerator;
 import org.jbpm.pvm.internal.model.ExecutionImpl;
 import org.jbpm.pvm.internal.model.ProcessDefinitionImpl;

Added: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/ClassLoaderContext.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/ClassLoaderContext.java	                        (rev 0)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/ClassLoaderContext.java	2009-09-29 13:23:38 UTC (rev 5671)
@@ -0,0 +1,30 @@
+/*
+ * 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.util;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public class ClassLoaderContext {
+
+}


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

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-28 08:47:12 UTC (rev 5670)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/ReflectUtil.java	2009-09-29 13:23:38 UTC (rev 5671)
@@ -9,6 +9,12 @@
 
 import org.jbpm.api.JbpmException;
 import org.jbpm.internal.log.Log;
+import org.jbpm.pvm.internal.env.EnvironmentImpl;
+import org.jbpm.pvm.internal.model.ProcessDefinitionImpl;
+import org.jbpm.pvm.internal.repository.DeploymentClassLoader;
+import org.jbpm.pvm.internal.repository.RepositoryCache;
+import org.jbpm.pvm.internal.wire.Descriptor;
+import org.jbpm.pvm.internal.wire.WireContext;
 import org.jbpm.pvm.internal.wire.descriptor.ArgDescriptor;
 
 public abstract class ReflectUtil {
@@ -270,4 +276,40 @@
     }
     return className;
   }
+
+  public static ClassLoader installDeploymentClassLoader(ProcessDefinitionImpl processDefinition) {
+    String deploymentId = processDefinition.getDeploymentId();
+    if (deploymentId==null) {
+      return null;
+    }
+
+    Thread currentThread = Thread.currentThread();
+    ClassLoader original = currentThread.getContextClassLoader();
+
+    RepositoryCache repositoryCache = EnvironmentImpl.getFromCurrent(RepositoryCache.class); 
+    DeploymentClassLoader deploymentClassLoader = repositoryCache.getDeploymentClassLoader(deploymentId, original);
+    if (deploymentClassLoader==null) {
+      deploymentClassLoader = new DeploymentClassLoader(original, deploymentId);
+      repositoryCache.setDeploymentClassLoader(deploymentId, original, deploymentClassLoader);
+    }
+    
+    currentThread.setContextClassLoader(deploymentClassLoader);
+    
+    return original;
+  }
+
+  public static void uninstallDeploymentClassLoader(ClassLoader original) {
+    if (original!=null) {
+      Thread.currentThread().setContextClassLoader(original);
+    }
+  }
+  
+  public static Object instantiateUserCode(Descriptor descriptor, ProcessDefinitionImpl processDefinition) {
+    ClassLoader classLoader = ReflectUtil.installDeploymentClassLoader(processDefinition);
+    try {
+      return WireContext.create(descriptor);
+    } finally {
+      ReflectUtil.uninstallDeploymentClassLoader(classLoader);
+    }
+  }
 }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/JobExecutorBinding.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/JobExecutorBinding.java	2009-09-28 08:47:12 UTC (rev 5670)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/JobExecutorBinding.java	2009-09-29 13:23:38 UTC (rev 5671)
@@ -61,7 +61,7 @@
       );
     } else {
       descriptor.addInjection("commandService", 
-          new ContextTypeRefDescriptor(CommandService.class)
+          new ReferenceDescriptor(CommandService.NAME_TX_REQUIRED_COMMAND_SERVICE)
       );
     }
 

Added: jbpm4/trunk/modules/test-cfg/src/test/java/org/jbpm/test/deploymentclassloading/CustomActivity.java
===================================================================
--- jbpm4/trunk/modules/test-cfg/src/test/java/org/jbpm/test/deploymentclassloading/CustomActivity.java	                        (rev 0)
+++ jbpm4/trunk/modules/test-cfg/src/test/java/org/jbpm/test/deploymentclassloading/CustomActivity.java	2009-09-29 13:23:38 UTC (rev 5671)
@@ -0,0 +1,34 @@
+/*
+ * 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.deploymentclassloading;
+
+import org.jbpm.api.activity.ActivityBehaviour;
+import org.jbpm.api.activity.ActivityExecution;
+
+public class CustomActivity implements ActivityBehaviour {
+
+  private static final long serialVersionUID = 1L;
+
+  public void execute(ActivityExecution execution) throws Exception {
+    execution.setVariable("CustomActivity", "Executed"); 
+  }
+}


Property changes on: jbpm4/trunk/modules/test-cfg/src/test/java/org/jbpm/test/deploymentclassloading/CustomActivity.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: jbpm4/trunk/modules/test-cfg/src/test/java/org/jbpm/test/deploymentclassloading/CustomEventListener.java
===================================================================
--- jbpm4/trunk/modules/test-cfg/src/test/java/org/jbpm/test/deploymentclassloading/CustomEventListener.java	                        (rev 0)
+++ jbpm4/trunk/modules/test-cfg/src/test/java/org/jbpm/test/deploymentclassloading/CustomEventListener.java	2009-09-29 13:23:38 UTC (rev 5671)
@@ -0,0 +1,39 @@
+/*
+ * 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.deploymentclassloading;
+
+import org.jbpm.api.listener.EventListener;
+import org.jbpm.api.listener.EventListenerExecution;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public class CustomEventListener implements EventListener {
+
+  private static final long serialVersionUID = 1L;
+
+  public void notify(EventListenerExecution execution) throws Exception {
+    execution.setVariable("CustomEventListener", "Executed"); 
+  }
+}
+ 
\ No newline at end of file


Property changes on: jbpm4/trunk/modules/test-cfg/src/test/java/org/jbpm/test/deploymentclassloading/CustomEventListener.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: jbpm4/trunk/modules/test-cfg/src/test/java/org/jbpm/test/deploymentclassloading/DeploymentClassLoadingTest.java
===================================================================
--- jbpm4/trunk/modules/test-cfg/src/test/java/org/jbpm/test/deploymentclassloading/DeploymentClassLoadingTest.java	                        (rev 0)
+++ jbpm4/trunk/modules/test-cfg/src/test/java/org/jbpm/test/deploymentclassloading/DeploymentClassLoadingTest.java	2009-09-29 13:23:38 UTC (rev 5671)
@@ -0,0 +1,118 @@
+/*
+ * 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.deploymentclassloading;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+
+import org.jbpm.pvm.internal.util.IoUtil;
+import org.jbpm.test.JbpmCustomCfgTestCase;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public class DeploymentClassLoadingTest extends JbpmCustomCfgTestCase {
+  
+  static String testClassesDir = 
+      DeploymentClassLoadingTest.class
+          .getProtectionDomain()
+          .getCodeSource()
+          .getLocation()
+          .getFile();
+
+  public void testCustomEventListener() throws Exception {
+    String originalFileName = testClassesDir+"org/jbpm/test/deploymentclassloading/CustomEventListener.class";
+    File originalFile = new File(originalFileName);
+    
+    FileInputStream fileInputStream = new FileInputStream(originalFileName);
+    byte[] classBytes = IoUtil.readBytes(fileInputStream);
+    fileInputStream.close();
+    
+    String hiddenFileName = originalFileName+".hiddenFromTestClasspath";
+    File hiddenFile = new File(hiddenFileName);
+    assertTrue(originalFile.renameTo(hiddenFile));
+    
+    try {
+      String deploymentDbid = repositoryService.createDeployment()
+          .addResourceFromString("xmlstring.jpdl.xml", 
+                "<process name='CustomEventListenerClassLoading'>" +
+                "  <start>" +
+                "    <transition to='wait'>" +
+                "      <event-listener class='org.jbpm.test.deploymentclassloading.CustomEventListener' />" +
+                "    </transition>" +
+                "  </start>" +
+                "  <state name='wait' />" +
+                "</process>" )
+          .addResourceFromInputStream("org/jbpm/test/deploymentclassloading/CustomEventListener.class", new ByteArrayInputStream(classBytes))
+          .deploy();
+  
+      registerDeployment(deploymentDbid);
+      
+      String processInstanceId = executionService.startProcessInstanceByKey("CustomEventListenerClassLoading").getId();
+      
+      assertEquals("Executed", executionService.getVariable(processInstanceId, "CustomEventListener"));
+
+    } finally { 
+      hiddenFile.renameTo(originalFile);
+    }
+  }
+
+  public void testCustomActivityBehaviour() throws Exception {
+    String originalFileName = testClassesDir+"org/jbpm/test/deploymentclassloading/CustomActivity.class";
+    File originalFile = new File(originalFileName);
+    
+    FileInputStream fileInputStream = new FileInputStream(originalFileName);
+    byte[] classBytes = IoUtil.readBytes(fileInputStream);
+    fileInputStream.close();
+    
+    String hiddenFileName = originalFileName+".hiddenFromTestClasspath";
+    File hiddenFile = new File(hiddenFileName);
+    assertTrue(originalFile.renameTo(hiddenFile));
+    try {
+      
+      String deploymentDbid = repositoryService.createDeployment()
+          .addResourceFromString("xmlstring.jpdl.xml", 
+                "<process name='CustomActivityClassLoading'>" +
+                "  <start>" +
+                "    <transition to='c' />" +
+                "  </start>" +
+                "  <custom name='c' class='org.jbpm.test.deploymentclassloading.CustomActivity'>" +
+                "    <transition to='wait' />" +
+                "  </custom>" +
+                "  <state name='wait' />" +
+                "</process>" )
+          .addResourceFromInputStream("org/jbpm/test/deploymentclassloading/CustomActivity.class", new ByteArrayInputStream(classBytes))
+          .deploy();
+  
+      registerDeployment(deploymentDbid);
+      
+      String processInstanceId = executionService.startProcessInstanceByKey("CustomActivityClassLoading").getId();
+      
+      assertEquals("Executed", executionService.getVariable(processInstanceId, "CustomActivity"));
+      
+    } finally { 
+      hiddenFile.renameTo(originalFile);
+    }
+  }
+}


Property changes on: jbpm4/trunk/modules/test-cfg/src/test/java/org/jbpm/test/deploymentclassloading/DeploymentClassLoadingTest.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: jbpm4/trunk/modules/test-cfg/src/test/resources/org/jbpm/test/deploymentclassloading/jbpm.cfg.xml
===================================================================
--- jbpm4/trunk/modules/test-cfg/src/test/resources/org/jbpm/test/deploymentclassloading/jbpm.cfg.xml	                        (rev 0)
+++ jbpm4/trunk/modules/test-cfg/src/test/resources/org/jbpm/test/deploymentclassloading/jbpm.cfg.xml	2009-09-29 13:23:38 UTC (rev 5671)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<jbpm-configuration>
+
+  <import resource="jbpm.default.cfg.xml" />
+  <import resource="jbpm.businesscalendar.cfg.xml" />
+  <import resource="jbpm.tx.hibernate.cfg.xml" />
+  <import resource="jbpm.jpdl.cfg.xml" />
+  <import resource="jbpm.identity.cfg.xml" />
+
+</jbpm-configuration>


Property changes on: jbpm4/trunk/modules/test-cfg/src/test/resources/org/jbpm/test/deploymentclassloading/jbpm.cfg.xml
___________________________________________________________________
Name: svn:mime-type
   + text/plain



More information about the jbpm-commits mailing list