[jbpm-commits] JBoss JBPM SVN: r2504 - in projects/spec/trunk/modules/impl/src/main: java/org/jbpm/ri/service and 1 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Wed Oct 8 05:43:20 EDT 2008


Author: thomas.diesler at jboss.com
Date: 2008-10-08 05:43:20 -0400 (Wed, 08 Oct 2008)
New Revision: 2504

Modified:
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/RunnableToken.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/ProcessServiceImpl.java
   projects/spec/trunk/modules/impl/src/main/resources/jbpm-cfg-beans.xml
Log:
Externalize node interceptors

Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/RunnableToken.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/RunnableToken.java	2008-10-08 09:23:47 UTC (rev 2503)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/RunnableToken.java	2008-10-08 09:43:20 UTC (rev 2504)
@@ -28,7 +28,9 @@
 import org.jbpm.api.runtime.Token;
 import org.jbpm.api.runtime.TokenExecutor;
 import org.jbpm.api.runtime.Token.TokenStatus;
+import org.jbpm.api.service.ProcessService;
 import org.jbpm.ri.model.ProcessImpl;
+import org.jbpm.ri.service.ProcessServiceImpl;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -85,11 +87,12 @@
           // Create a Token that includes node properties
           DelegatingToken tokCopy = new DelegatingToken(token);
           RuntimeContext rtContext = new RuntimeContext(tokenExecutor, tokCopy);
-          rtContext.addInterceptor(new SignalHandlerInterceptor());
-          rtContext.addInterceptor(new FlowHandlerInterceptor());
-          rtContext.addInterceptor(new AssignmentInterceptor());
-          rtContext.addInterceptor(new NodeExecuteInterceptor());
-
+          
+          // Add the interceptors that are defined on the ProcessService
+          ProcessServiceImpl procService = (ProcessServiceImpl)node.getProcessEngine().getService(ProcessService.class);
+          for (NodeInterceptor itor : procService.getNodeInterceptors())
+            rtContext.addInterceptor(itor);
+          
           // Call the interceptor chain
           rtContext.next();
         }

Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/ProcessServiceImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/ProcessServiceImpl.java	2008-10-08 09:23:47 UTC (rev 2503)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/ProcessServiceImpl.java	2008-10-08 09:43:20 UTC (rev 2504)
@@ -23,6 +23,10 @@
 
 // $Id$
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
 import javax.management.ObjectName;
 
 import org.jbpm.api.client.ProcessEngine;
@@ -30,6 +34,9 @@
 import org.jbpm.api.model.Process.ProcessStatus;
 import org.jbpm.api.service.ProcessService;
 import org.jbpm.ri.model.ProcessImpl;
+import org.jbpm.ri.runtime.NodeInterceptor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * The ProcessService is the entry point to create, find and otherwise manage processes.
@@ -39,12 +46,31 @@
  */
 public class ProcessServiceImpl extends ProcessService implements MutableService
 {
+  // Provide logging
+  final static Logger log = LoggerFactory.getLogger(ProcessServiceImpl.class);
+  
+  private List<NodeInterceptor> nodeInterceptors = new ArrayList<NodeInterceptor>();
+  
   @Override
   public void setProcessEngine(ProcessEngine engine)
   {
     super.setProcessEngine(engine);
   }
 
+  public void setInterceptors(List<String> itorClassNames)
+  {
+    for (String itorClass : itorClassNames)
+    {
+      NodeInterceptor itor = loadNodeInterceptor(itorClass);
+      nodeInterceptors.add(itor);
+    }
+  }
+
+  public List<NodeInterceptor> getNodeInterceptors()
+  {
+    return Collections.unmodifiableList(nodeInterceptors);
+  }
+
   @Override
   public ObjectName registerProcess(Process proc)
   {
@@ -66,4 +92,22 @@
     
     return super.unregisterProcess(procID);
   }
+  
+  private NodeInterceptor loadNodeInterceptor(String className)
+  {
+    NodeInterceptor itor = null;
+    if (className != null)
+    {
+      try
+      {
+        ClassLoader ctxLoader = Thread.currentThread().getContextClassLoader();
+        itor = (NodeInterceptor)ctxLoader.loadClass(className).newInstance();
+      }
+      catch (Exception ex)
+      {
+        log.error("Cannot load interceptor: " + className, ex);
+      }
+    }
+    return itor;
+  }
 }
\ No newline at end of file

Modified: projects/spec/trunk/modules/impl/src/main/resources/jbpm-cfg-beans.xml
===================================================================
--- projects/spec/trunk/modules/impl/src/main/resources/jbpm-cfg-beans.xml	2008-10-08 09:23:47 UTC (rev 2503)
+++ projects/spec/trunk/modules/impl/src/main/resources/jbpm-cfg-beans.xml	2008-10-08 09:43:20 UTC (rev 2504)
@@ -21,8 +21,6 @@
     </bean>
 
     <!-- The PersistenceService -->
-    <bean name="jBPMPersistenceService" class="org.jbpm.ri.service.InMemoryPersistenceServiceImpl"/>
-    <!-- 
     <bean name="jBPMPersistenceService" class="org.jbpm.ri.service.PersistenceServiceImpl">
       <property name="annotatedClasses">
         <set elementClass="java.lang.String">
@@ -50,15 +48,26 @@
         </set>
       </property>
     </bean>
-    -->
+    <!--bean name="jBPMPersistenceService" class="org.jbpm.ri.service.InMemoryPersistenceServiceImpl"/-->
 
+    <!-- The ProcessService -->
+    <bean name="jBPMProcessService" class="org.jbpm.ri.service.ProcessServiceImpl" >
+      <property name="interceptors">
+        <list elementClass="java.lang.String">
+          <value>org.jbpm.ri.runtime.SignalHandlerInterceptor</value>
+          <value>org.jbpm.ri.runtime.FlowHandlerInterceptor</value>
+          <value>org.jbpm.ri.runtime.AssignmentInterceptor</value>
+          <value>org.jbpm.ri.runtime.NodeExecuteInterceptor</value>
+        </list>
+      </property>
+    </bean>
+    
     <!-- Other Services -->
     <bean name="jBPMExecutionService" class="org.jbpm.ri.service.ExecutionServiceImpl" />
     <bean name="jBPMMessageService" class="org.jbpm.ri.service.MessageServiceImpl" />
     <bean name="jBPMMessageBuilderService" class="org.jbpm.ri.service.MessageBuilderServiceImpl" />
     <bean name="jBPMProcessBuilderService" class="org.jbpm.ri.service.ProcessBuilderServiceImpl" />
     <bean name="jBPMProcessDefinitionService" class="org.jbpm.ri.service.ProcessDefinitionServiceImpl" />
-    <bean name="jBPMProcessService" class="org.jbpm.ri.service.ProcessServiceImpl" />
     <bean name="jBPMSignalService" class="org.jbpm.ri.service.SignalServiceImpl" />
     
   </deployment>




More information about the jbpm-commits mailing list