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,可能有多餘的包,沒做清理):

 

發佈了51 篇原創文章 · 獲贊 1 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章