package com.v0610.basic.jbpm.example; import org.drools.runtime.StatefulKnowledgeSession; public class MyObject { private StatefulKnowledgeSession ksession; public void setSession(StatefulKnowledgeSession ksession) { this.ksession = ksession; } public void doSomething() { System.out.println("YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY"); ksession.startProcess("com.v0610.basic.temp.helloworld"); } }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:jbpm="http://drools.org/schema/drools-spring" xmlns:cxf="http://camel.apache.org/schema/cxf" xmlns:jaxrs="http://cxf.apache.org/jaxrs" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd http://drools.org/schema/drools-spring http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/org/drools/container/spring/drools-spring.xsd http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd"> <jbpm:kbase id="kbase"> <jbpm:resources> <jbpm:resource type="BPMN2" source="classpath:helloworld.bpmn"/> </jbpm:resources> </jbpm:kbase> <jbpm:ksession id="ksession" type="stateful" kbase="kbase" /> <bean id="myObject" class="com.v0610.basic.jbpm.example.MyObject"> <property name="session" ref="ksession" /> </bean> </beans>
配置得到TaskServiceSession
@PostConstruct public void init() { System.out.println("初始化Service类[JbpmSupport]------------------------------------------------------------------------."); // 为 ksession 设置log new JPAWorkingMemoryDbLogger(ksession); new JPAProcessInstanceDbLog(ksession.getEnvironment()); // 创建 local human service 及其 handler org.jbpm.task.service.TaskService tService = new org.jbpm.task.service.TaskService(entityManagerFactory, SystemEventListenerFactory.getSystemEventListener()); taskServiceSession = tService.createSession(); // TODO 事务该如何设置? // taskServiceSession.setTransactionType("RESOURCE_LOCAL"); SyncWSHumanTaskHandler humanTaskHandler = new SyncWSHumanTaskHandler(new LocalTaskService(taskServiceSession), ksession); humanTaskHandler.setLocal(true); humanTaskHandler.connect(); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", humanTaskHandler); // set user group callback System.setProperty("jbpm.usergroup.callback", "org.jbpm.task.service.DefaultUserGroupCallbackImpl"); } public TaskService getTaskService() { return new LocalTaskService(taskServiceSession); }
一些配置参考信息
jbpm5-spring-jta-beans.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:jbpm="http://drools.org/schema/drools-spring" xmlns:cxf="http://camel.apache.org/schema/cxf" xmlns:jaxrs="http://cxf.apache.org/jaxrs" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd http://drools.org/schema/drools-spring http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/org/drools/container/spring/drools-spring.xsd http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd"> <bean id="jbpmEMF" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="persistenceUnitName" value="org.jbpm.persistence.jta" /> </bean> <bean id="btmConfig" factory-method="getConfiguration" class="bitronix.tm.TransactionManagerServices"></bean> <bean id="BitronixTransactionManager" factory-method="getTransactionManager" class="bitronix.tm.TransactionManagerServices" depends-on="btmConfig" destroy-method="shutdown" /> <bean id="jbpmTxManager" class="org.springframework.transaction.jta.JtaTransactionManager"> <property name="transactionManager" ref="BitronixTransactionManager" /> <property name="userTransaction" ref="BitronixTransactionManager" /> </bean> <jbpm:kbase id="kbase2"> <jbpm:resources> <jbpm:resource type="BPMN2" source="classpath:helloworld.bpmn" /> </jbpm:resources> </jbpm:kbase> <jbpm:ksession id="ksession2" type="stateful" kbase="kbase2"> <jbpm:configuration> <jbpm:jpa-persistence> <jbpm:transaction-manager ref="jbpmTxManager" /> <jbpm:entity-manager-factory ref="jbpmEMF" /> </jbpm:jpa-persistence> </jbpm:configuration> </jbpm:ksession> </beans>
jbpm5-beans.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:kb="http://drools.org/schema/drools-spring" xmlns:cxf="http://camel.apache.org/schema/cxf" xmlns:jaxrs="http://cxf.apache.org/jaxrs" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd http://drools.org/schema/drools-spring http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/org/drools/container/spring/drools-spring.xsd http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd"> <!-- jBPM Knowledge Related Config --> <kb:grid-node id="node1"/> <kb:kbase id="kbase1" node="node1"> <kb:resources> <kb:resource type="BPMN2" source="classpath:helloworld.bpmn"/> </kb:resources> </kb:kbase> <kb:ksession id="ksession1" type="stateless" kbase="kbase1" node="node1"/> <!-- Camel Config --> <import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <cxf:rsServer id="rsServer" address="/rest" serviceClass="org.drools.jax.rs.CommandExecutorImpl"> <cxf:providers> <bean class="org.drools.jax.rs.CommandMessageBodyReader"/> </cxf:providers> </cxf:rsServer> <cxf:cxfEndpoint id="soapServer" address="/soap" serviceName="ns:AttachmentWsService" endpointName="ns:AttachmentWsServicePort" wsdlURL="wsdl/attachment.wsdl" xmlns:ns="http://ws.basic.v0610.com" > <cxf:properties> <entry key="dataFormat" value="MESSAGE"/> <entry key="defaultOperationName" value="execute"/> </cxf:properties> </cxf:cxfEndpoint> <bean id="kbPolicy" class="org.drools.camel.component.DroolsPolicy" /> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="cxfrs://bean://rsServer"/> <policy ref="kbPolicy"> <unmarshal ref="xstream" /> <to uri="drools:node1/ksession1" /> <marshal ref="xstream" /> </policy> </route> <route> <from uri="cxf://bean://soapServer"/> <policy ref="kbPolicy"> <unmarshal ref="xstream" /> <to uri="drools:node1/ksession1" /> <marshal ref="xstream" /> </policy> </route> </camelContext> </beans>