SSH整合JBPM4.4

第一步:导入所需jar包

 

具体所需jar包见附件图片

 

 

第二步:修改jbpm配置文件:

 

1、src目录下建立jbpm.cfg.xml(注意注释部分)

 

Xml代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>     
  2. <jbpm-configuration>     
  3.     <process-engine-context>     
  4.         <string name="spring.cfg" value="applicationContext.xml" />     
  5.     </process-engine-context>    
  6.     <import resource="jbpm.default.cfg.xml" />     
  7.     <import resource="jbpm.tx.spring.cfg.xml" />     
  8.     <import resource="jbpm.jpdl.cfg.xml" />     
  9.     <import resource="jbpm.bpmn.cfg.xml" />     
  10.     <import resource="jbpm.identity.cfg.xml" />     
  11.     <import resource="jbpm.businesscalendar.cfg.xml" />     
  12.     <import resource="jbpm.console.cfg.xml" />    
  13.     <import resource="jbpm.spring.default.cfg.xml"/>    
  14.     <!--      
  15.     <import resource="jbpm.jobexecutor.cfg.xml" />    
  16.     -->     
  17. </jbpm-configuration>  

 

2、src目录下建立jbpm.spring.default.cfg.xml

 

Xml代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>     
  2.      
  3. <jbpm-configuration>     
  4.      
  5.   <process-engine-context>     
  6.      
  7.     <repository-service />     
  8.     <repository-cache />     
  9.     <execution-service />     
  10.     <history-service />     
  11.     <management-service />     
  12.     <identity-service />     
  13.     <task-service />     
  14. <!--     
  15.     <hibernate-configuration>     
  16.       <cfg resource="jbpm.hibernate.cfg.xml" />     
  17.     </hibernate-configuration>     
  18.      
  19.     <hibernate-session-factory />     
  20. -->     
  21.     <script-manager default-expression-language="juel"     
  22.                     default-script-language="juel"     
  23.                     read-contexts="execution, environment, process-engine"     
  24.                     write-context="">     
  25.       <script-language name="juel" factory="org.jbpm.pvm.internal.script.JuelScriptEngineFactory" />     
  26.     </script-manager>     
  27.      
  28.     <authentication />     
  29.      
  30.     <id-generator />     
  31.     <types resource="jbpm.variable.types.xml" />     
  32.      
  33.     <address-resolver />     
  34.      
  35.     <business-calendar>     
  36.       <monday    hours="9:00-12:00 and 12:30-17:00"/>     
  37.       <tuesday   hours="9:00-12:00 and 12:30-17:00"/>     
  38.       <wednesday hours="9:00-12:00 and 12:30-17:00"/>     
  39.       <thursday  hours="9:00-12:00 and 12:30-17:00"/>     
  40.       <friday    hours="9:00-12:00 and 12:30-17:00"/>     
  41.       <holiday period="01/07/2008 - 31/08/2008"/>     
  42.     </business-calendar>     
  43.      
  44.     <mail-template name='task-notification'>     
  45.       <to users="${task.assignee}"/>     
  46.       <subject>${task.name}</subject>     
  47.       <text><![CDATA[Hi ${task.assignee},   
  48. Task "${task.name}" has been assigned to you.   
  49. ${task.description}   
  50.    
  51. Sent by JBoss jBPM   
  52. ]]></text>     
  53.     </mail-template>     
  54.      
  55.     <mail-template name='task-reminder'>     
  56.       <to users="${task.assignee}"/>     
  57.       <subject>${task.name}</subject>     
  58.       <text><![CDATA[Hey ${task.assignee},   
  59. Do not forget about task "${task.name}".   
  60. ${task.description}   
  61.    
  62. Sent by JBoss jBPM   
  63. ]]></text>     
  64.     </mail-template>     
  65.      
  66.   </process-engine-context>     
  67.      
  68.   <transaction-context>     
  69.     <repository-session />     
  70.     <db-session />     
  71.      
  72.     <message-session />     
  73.     <timer-session />     
  74.     <history-session />     
  75.     <mail-session>     
  76.       <mail-server>     
  77.         <session-properties resource="jbpm.mail.properties" />     
  78.       </mail-server>     
  79.     </mail-session>     
  80.   </transaction-context>     
  81.      
  82. </jbpm-configuration>    

 

第三步:修改Spring配置文件

 

1、applicationContext.xml中加入springHelper配置,作为jbpm processEngine的factory bean

 

Xml代码 复制代码
  1. <bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper">  
  2.         <property name="jbpmCfg" value="jbpm.cfg.xml" />  
  3.     </bean>  

 

2、applicationContext.xml中加入processEngine配置,并以此为factory bean创建JBPM本身的各种Service

 

Xml代码 复制代码
  1. <bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine"  />  
  2.        
  3.     <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService"/>  
  4.     <bean id="executionService" factory-bean="processEngine" factory-method="getExecutionService"/>  
  5.     <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService"/>  
  6.     <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService"/>  
  7.     <bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService"/>  

 3、applicationContext.xml的hibernate配置中加入jbpm所需的hbm.xml配置

 

Xml代码 复制代码
  1. <property name="mappingLocations">  
  2.             <list>  
  3.                 <value>classpath:jbpm.execution.hbm.xml</value>  
  4.                 <value>classpath:jbpm.history.hbm.xml</value>  
  5.                 <value>classpath:jbpm.identity.hbm.xml</value>  
  6.                 <value>classpath:jbpm.repository.hbm.xml</value>  
  7.                 <value>classpath:jbpm.task.hbm.xml</value>  
  8.             </list>  
  9.         </property>  

 4、完整的applicationContext.xml(包括其余DataSource、SessionFacotry、事务控制等)

applicationContext.xml

 

Xml代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.     xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"  
  4.     default-lazy-init="true">  
  5.     <import resource="serviceContext.xml" />  
  6.   
  7.     <bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper">  
  8.         <property name="jbpmCfg" value="jbpm.cfg.xml" />  
  9.     </bean>  
  10.   
  11.     <bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine"  />  
  12.        
  13.     <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService"/>  
  14.     <bean id="executionService" factory-bean="processEngine" factory-method="getExecutionService"/>  
  15.     <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService"/>  
  16.     <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService"/>  
  17.     <bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService"/>  
  18.        
  19.     <bean id="mainDataSource" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close">  
  20.         <property name="driverClass" value="oracle.jdbc.driver.OracleDriver" />  
  21.         <property name="jdbcUrl" value="jdbc:oracle:thin:@XXXXX:1521:XE" />  
  22.         <property name="username" value="jbpm4" />  
  23.         <property name="password" value="jbpm" />  
  24.         <property name="idleConnectionTestPeriod" value="60" />  
  25.         <property name="idleMaxAge" value="240" />  
  26.         <property name="maxConnectionsPerPartition" value="60" />  
  27.         <property name="minConnectionsPerPartition" value="20" />  
  28.         <property name="partitionCount" value="3" />  
  29.         <property name="acquireIncrement" value="10" />  
  30.         <property name="preparedStatementCacheSize" value="50" />  
  31.         <property name="statementsCachedPerConnection" value="30" />  
  32.         <property name="releaseHelperThreads" value="3" />  
  33.     </bean>  
  34.     <bean id="dataSource" class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy">  
  35.         <property name="targetDataSource">  
  36.             <ref local="mainDataSource" />  
  37.         </property>  
  38.     </bean>  
  39.     <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">  
  40.         <property name="dataSource">  
  41.             <ref bean="dataSource" />  
  42.         </property>  
  43.         <property name="hibernateProperties">  
  44.             <props>  
  45.                 <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9iDialect</prop>  
  46.                 <prop key="hibernate.show_sql">true</prop>  
  47.             </props>  
  48.         </property>  
  49.         <property name="mappingLocations">  
  50.             <list>  
  51.                 <value>classpath:jbpm.execution.hbm.xml</value>  
  52.                 <value>classpath:jbpm.history.hbm.xml</value>  
  53.                 <value>classpath:jbpm.identity.hbm.xml</value>  
  54.                 <value>classpath:jbpm.repository.hbm.xml</value>  
  55.                 <value>classpath:jbpm.task.hbm.xml</value>  
  56.             </list>  
  57.         </property>  
  58.         <property name="annotatedClasses">  
  59.             <list>  
  60.                 <value>com.fish119.jssh.pojo.Test</value>  
  61.             </list>  
  62.         </property>  
  63.     </bean>  
  64.   
  65.     <!-- 事务配置开始 -->  
  66.     <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
  67.         <property name="sessionFactory" ref="sessionFactory" />  
  68.     </bean>  
  69.     <!--事务配置-->  
  70.     <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">  
  71.         <property name="transactionManager">  
  72.             <ref bean="transactionManager" />  
  73.         </property>  
  74.         <!-- 配置事务属性 -->  
  75.         <property name="transactionAttributes">  
  76.             <props>  
  77.                 <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>  
  78.                 <prop key="delete*">PROPAGATION_REQUIRED</prop>  
  79.                 <prop key="insert*">PROPAGATION_REQUIRED,-Exception</prop>  
  80.                 <prop key="add*">PROPAGATION_REQUIRED,-Exception</prop>  
  81.                 <prop key="update*">PROPAGATION_REQUIRED,-Exception</prop>  
  82.                 <prop key="save*">PROPAGATION_REQUIRED,-Exception</prop>  
  83.                 <prop key="*Save*">PROPAGATION_REQUIRED,-Exception</prop>  
  84.                 <prop key="exchange*">PROPAGATION_REQUIRED,-Exception</prop>  
  85.                 <prop key="remove*">PROPAGATION_REQUIRED,-Exception</prop>  
  86.                 <prop key="set*">PROPAGATION_REQUIRED,-Exception</prop>  
  87.                 <prop key="Test*">PROPAGATION_REQUIRED,-Exception</prop>  
  88.                 <prop key="*Test">PROPAGATION_REQUIRED,-Exception</prop>  
  89.             </props>  
  90.         </property>  
  91.     </bean>  
  92.     <bean id="autoproxy" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">  
  93.         <property name="beanNames">  
  94.             <list>  
  95.                 <value>*Service</value>  
  96.             </list>  
  97.         </property>  
  98.         <property name="interceptorNames">  
  99.             <list>  
  100.                 <value>transactionInterceptor</value>  
  101.             </list>  
  102.         </property>  
  103.     </bean>  
  104.     <!-- 事务配置结束 -->  
  105.     <bean id="testDAO" class="com.fish119.jssh.dao.TestDAO" autowire="byType">  
  106.         <property name="sessionFactory">  
  107.             <ref bean="sessionFactory" />  
  108.         </property>  
  109.     </bean>  
  110. </beans>  

 

第四步:配置Struts2(使用了convention plugin)

struts.xml

 

Xml代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC   
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"   
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">  
  5.   
  6. <struts>  
  7.     <constant name="struts.objectFactory" value="spring" />  
  8.     <!--  
  9.         <constant name="struts.objectFactory.spring.autoWire" value="type"/>  
  10.     -->  
  11.   
  12.     <constant name="struts.devMode" value="true" />  
  13.     <constant name="struts.convention.classes.reload" value="true" />  
  14.   
  15.   
  16.     <!-- 结果资源所在路径 -->  
  17.     <constant name="struts.convention.result.path" value="/" />  
  18.     <!-- 默认action所在的包 -->  
  19.     <constant name="struts.convention.default.parent.package"  
  20.         value="myPackage" />  
  21.     <!-- 不被convention组件扫描的包  -->  
  22.     <!-- <constant name="struts.convention.exclude.packages" value=""/>  -->  
  23.   
  24.     <package name="myPackage" extends="json-default">  
  25.        
  26.         <global-results>  
  27.             <result name="exception">/error.jsp</result>  
  28.             <result name="error">/error.jsp</result>  
  29.             <result name="none">/error.jsp</result>  
  30.             <result name="login">/login.jsp</result>  
  31.         </global-results>  
  32.   
  33.         <global-exception-mappings>  
  34.             <exception-mapping result="exception" exception="java.lang.Exception">  
  35.             </exception-mapping>  
  36.         </global-exception-mappings>  
  37.   
  38.     </package>  
  39. </struts>  

 

第五步:测试

1、建立action类:IndexAction

 

Java代码 复制代码
  1. public class IndexAction extends BaseAction{   
  2.   
  3.     private static final long serialVersionUID = 1L;   
  4.   
  5.     ProcessEngine processEngine;   
  6.     RepositoryService repositoryService;   
  7.     ExecutionService executionService;   
  8.     TaskService taskService;   
  9.     HistoryService historyService;   
  10.     IdentityService identityService;   
  11.   
  12.     public ProcessEngine getProcessEngine(){   
  13.         return processEngine;   
  14.     }   
  15.   
  16.     public void setProcessEngine(ProcessEngine processEngine){   
  17.         this.processEngine = processEngine;   
  18.     }   
  19.   
  20.     public RepositoryService getRepositoryService(){   
  21.         return repositoryService;   
  22.     }   
  23.   
  24.     public void setRepositoryService(RepositoryService repositoryService){   
  25.         this.repositoryService = repositoryService;   
  26.     }   
  27.   
  28.     public ExecutionService getExecutionService(){   
  29.         return executionService;   
  30.     }   
  31.   
  32.     public void setExecutionService(ExecutionService executionService){   
  33.         this.executionService = executionService;   
  34.     }   
  35.   
  36.     public TaskService getTaskService(){   
  37.         return taskService;   
  38.     }   
  39.   
  40.     public void setTaskService(TaskService taskService){   
  41.         this.taskService = taskService;   
  42.     }   
  43.   
  44.     public HistoryService getHistoryService(){   
  45.         return historyService;   
  46.     }   
  47.   
  48.     public void setHistoryService(HistoryService historyService){   
  49.         this.historyService = historyService;   
  50.     }   
  51.   
  52.     public IdentityService getIdentityService(){   
  53.         return identityService;   
  54.     }   
  55.   
  56.     public void setIdentityService(IdentityService identityService){   
  57.         this.identityService = identityService;   
  58.     }   
  59.   
  60.   
  61.     public String execute(){   
  62.             System.out.println("processEngine:" + this.getProcessEngine());   
  63.             System.out.println("repositoryService:"  
  64.                     + this.getRepositoryService());   
  65.             System.out   
  66.                     .println("executionServcie:" + this.getExecutionService());   
  67.             System.out.println("taskService:" + this.getTaskService());   
  68.             System.out.println("historyService:" + this.getHistoryService());   
  69.         return SUCCESS;   
  70.     }   
  71. }  
public class IndexAction extends BaseAction{

	private static final long serialVersionUID = 1L;

	ProcessEngine processEngine;
	RepositoryService repositoryService;
	ExecutionService executionService;
	TaskService taskService;
	HistoryService historyService;
	IdentityService identityService;

	public ProcessEngine getProcessEngine(){
		return processEngine;
	}

	public void setProcessEngine(ProcessEngine processEngine){
		this.processEngine = processEngine;
	}

	public RepositoryService getRepositoryService(){
		return repositoryService;
	}

	public void setRepositoryService(RepositoryService repositoryService){
		this.repositoryService = repositoryService;
	}

	public ExecutionService getExecutionService(){
		return executionService;
	}

	public void setExecutionService(ExecutionService executionService){
		this.executionService = executionService;
	}

	public TaskService getTaskService(){
		return taskService;
	}

	public void setTaskService(TaskService taskService){
		this.taskService = taskService;
	}

	public HistoryService getHistoryService(){
		return historyService;
	}

	public void setHistoryService(HistoryService historyService){
		this.historyService = historyService;
	}

	public IdentityService getIdentityService(){
		return identityService;
	}

	public void setIdentityService(IdentityService identityService){
		this.identityService = identityService;
	}


	public String execute(){
			System.out.println("processEngine:" + this.getProcessEngine());
			System.out.println("repositoryService:"
					+ this.getRepositoryService());
			System.out
					.println("executionServcie:" + this.getExecutionService());
			System.out.println("taskService:" + this.getTaskService());
			System.out.println("historyService:" + this.getHistoryService());
		return SUCCESS;
	}
}

 2、启动tomcat,访问http://localhost:8080/ProjectName/index。控制台出现以下内容:

 

 

Java代码 复制代码
  1. processEngine:org.jbpm.pvm.internal.processengine.SpringProcessEngine@2553861  
  2.   
  3. repositoryService:org.jbpm.pvm.internal.repository.RepositoryServiceImpl@22b044e  
  4.   
  5. executionServcie:org.jbpm.pvm.internal.svc.ExecutionServiceImpl@220d12e  
  6.   
  7. taskService:org.jbpm.pvm.internal.svc.TaskServiceImpl@22d9289  
  8.   
  9. historyService:org.jbpm.pvm.internal.svc.HistoryServiceImpl@2257b64  

、可以进一步进行事务测试,建立自己的Service类,添加测试方法,可以看到事务已由Spring统一管理,这里就不提供代码了

 

  1.   
  2. identityService:org.jbpm.pvm.internal.svc.IdentityServiceImpl@223f277  

 

 

附件:所需的jar包(使用了hibernate annotation和struts2的convention-plugin,可能有多余的包,没做清理):

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值