[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