jbmp4.3整合ssh

JBPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架,它可以运行在独立的服务器上或者嵌入任何Java应用中。现在,我们学习一下,如何把jbpm4.3和SSH框架进行整合,整合的步骤如下:

1.准备四个框架所需要的包

2.xml文件的配置

3.编写测试页面和类

4.启动tomcat发布

一.准备四个框架所需要的包.

这四个框架所需的包比较多,很容易搞错,少包或加了重复包等,我觉得应该按以下方式去整合四个框架的包,首先建好一个文件夹来装所需要的包,因为jbpm-4.3/lib下提供了整合各种框架所需的包,所以我们把它们先拷到新建的文件夹里面,考虑到有可能包不全的情况,所以接下来,把平时SSH框架下所用的包也拷到新建的文件夹来,这时一小部分同名的包就会被替换,当然可能还有重复的包,然后我们还需在新建的文件夹里把包排列一下,观察,手动删除重复的包.最后如果你用Myeclipse建web项目,你还需把与j2ee所需的同名的包给去了.

以下就是我在整合时所用的包:antlr-2.7.6.jar
aspectjrt.jar
aspectjweaver.jar
backport-util-concurrent-3.1.jar
cglib-2.2.jar
cglib-nodep-2.1_3.jar
common-annotations.jar
commons-collections-3.1.jar
commons-dbcp-1.2.1.jar
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
commons-logging.jar
commons-pool-1.2.jar
dom4j-1.6.1.jar
ehcache-1.5.0.jar
freemarker-2.3.15.jar
hibernate3.jar
javassist-3.9.0.GA.jar
jta-1.1.jar
mysql-connector-java-5.0.0-beta-bin.jar
ognl-2.7.3.jar
slf4j-api-1.6.1.jar
slf4j-nop-1.6.1.jar
spring-webmvc-struts.jar
spring.jar
struts2-core-2.1.8.1.jar
struts2-pell-multipart-plugin-2.1.8.1.jar
struts2-spring-plugin-2.1.8.1.jar
xwork-core-2.1.6.jar
jbpm.jar
juel-engine.jar
juel-impl.jar
juel.jar
mail.jar

二.xml文件的配置

总共有如下几个xml文件需要配置:web.xml struts.xml applicationContext.xml jbpm.cfg.xml,如果先前整合过SSH的话,只需要配置一下jbpm.cfg.xml,和applicationContext.xml 既可,这里就配置这两个文件,如果没有配置过SSH的话,去看我前面写的一篇SSH整合的文章,里面作了介绍.

jbpm.cfg.xml文件是jbpm的配置文件,如果不知道写,可以到jbpm的下载包里去找,jbpm-4.3/install/src/cfg/jbpm目录下有一个spring.jbpm.cfg.xml文件,把前面的spring去掉既可,它的代码如下:

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

其中里面的value值是spring的IOC文件名.下面就是IOC applicationContext.xml 文件了这里面加载jbmp需要做二件事.

第一, 配置JBPM的映射文件,这个映射文件可以在jbpm-4.3/install/src/cfg/hibernate/jdbc下面的mysql.hibernate.cfg.xml文件中找到.

第二,注入jbpm引擎,这个代码可以在jbpm-4.3/install/src/cfg/spring下的applicationContext.xml文件的第一,二行找到.

下面就是它的代码:

Code:
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.      xmlns:context="http://www.springframework.org/schema/context"  
  5.       xmlns:aop="http://www.springframework.org/schema/aop"  
  6.       xmlns:tx="http://www.springframework.org/schema/tx"  
  7.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
  8.     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd    
  9.     http://www.springframework.org/schema/aop    
  10.     http://www.springframework.org/schema/aop/spring-aop-2.5.xsd   
  11.     http://www.springframework.org/schema/tx   
  12.     http://www.springframework.org/schema/tx/spring-tx-2.5.xsd   
  13.     http://www.springframework.org/schema/context   
  14.     http://www.springframework.org/schema/context/spring-context-2.5.xsd">  
  15.        
  16.     <!-- 注入jbpm引擎 -->  
  17.   <bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper" />  
  18.   <bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine" />  
  19.   
  20.     <!-- 启动注解 -->  
  21.    <context:annotation-config></context:annotation-config>  
  22.     <!-- 基于classpath扫描加载bean -->  
  23.     <context:component-scan base-package="myclass"/>  
  24.     <!-- 加载事务管理器 -->  
  25.     <tx:annotation-driven transaction-manager="hibernateTransactionManager"/>  
  26.    <!-- 注解事务 -->  
  27.    <tx:annotation-driven transaction-manager="hibernateTransactionManager"/>  
  28.      <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
  29.     <property name="driverClassName" value="org.gjt.mm.mysql.Driver"/>  
  30.     <property name="url" value="jdbc:mysql://localhost:3306/test"/>  
  31.     <property name="username" value="root"/>  
  32.     <property name="password" value="liping"/>  
  33.   </bean>  
  34.   
  35.   <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  36.     <property name="dataSource" ref="dataSource"/>  
  37.     <property name="mappingResources">  
  38.       <list>  
  39.         <value>myclass/entity/User.hbm.xml</value>  
  40.         <!-- 配置JBPM的映射文件 -->  
  41.         <value>jbpm.repository.hbm.xml</value>  
  42.         <value>jbpm.execution.hbm.xml</value>  
  43.         <value>jbpm.history.hbm.xml</value>  
  44.         <value>jbpm.task.hbm.xml</value>  
  45.         <value>jbpm.identity.hbm.xml</value>  
  46.       </list>  
  47.     </property>  
  48.     <property name="hibernateProperties">  
  49.       <value>  
  50.         hibernate.dialect=org.hibernate.dialect.MySQLDialect   
  51.         hibernate.show_sql=true  
  52.       </value>  
  53.     </property>  
  54.   </bean>  
  55.   
  56.   
  57.     <!--配置编程式的事务 -->  
  58.  <bean id="hibernateTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
  59.  <property name="sessionFactory" ref="sessionFactory"></property>  
  60.  </bean>    
  61.     
  62.     <bean id="login" class="myclass.struts2.action.LoginAction">  
  63.     </bean>  
  64.        
  65. </beans>  

这里面还加了测试用的其他的注解,与jbpm刚配置的无关.为了方便等下测试,我把web.xml,struts.xml文件也贴上来.

web.xml:

Code:
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.4"    
  3.     xmlns="http://java.sun.com/xml/ns/j2ee"    
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee    
  6.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  7.         <!-- 加载spring配置文件 -->  
  8.     <context-param>  
  9.         <param-name>contextConfigLocation</param-name>  
  10.         <param-value>classpath:application*.xml</param-value>  
  11.     </context-param>  
  12.     <!-- 加载监听器 -->  
  13.     <listener>  
  14.         <listener-class>  
  15.             org.springframework.web.context.ContextLoaderListener   
  16.         </listener-class>  
  17.     </listener>  
  18.     <!--struts2 -->  
  19.        <filter>  
  20.         <filter-name>struts2</filter-name>  
  21.         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
  22.     </filter>  
  23.   
  24.     <filter-mapping>  
  25.         <filter-name>struts2</filter-name>  
  26.         <url-pattern>/*</url-pattern>  
  27.     </filter-mapping>  
  28.   <welcome-file-list>  
  29.     <welcome-file>index.jsp</welcome-file>  
  30.   </welcome-file-list>  
  31. </web-app>  

struts.xml:

Code:
  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.     <struts>  
  6.     <constant name="struts.action.extension" value="lp" />  
  7.     <!-- struts2整合spring -->  
  8.     <constant name="struts.objectFactory" value="spring"></constant>  
  9.     <package name="login" namespace="/" extends="struts-default">  
  10.     <action name="login" class="login">    
  11.     <result name="succ">/succ.jsp</result>  
  12.     <result name="fail">/failure.jsp</result>  
  13.     </action>  
  14.     </package>  
  15.     </struts>  

到这里为此,配置整合过程,就进行完了,下一步就是测试了,测试的要求就是,从页面添加一个用户到数据库,同时在jbpm表中加入一个流程文件.

 三.添加测试页面和类

index.jsp:

Code:
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <html>  
  3.   <head>  
  4.   <title> 登录页面 </title>  
  5.   <link rel=stylesheet href="css/login.css" type="text/css">  
  6.   </head>  
  7.   <body>  
  8.   <h1 align="center">用户注册页面</h1>  
  9.   <hr>  
  10.    <div align="center">  
  11.    <form action="login.lp" method="post">  
  12.    <table  cellspacing=5 border=5 bodercolor=#ffaa00 >  
  13.    <tr><th colspan="3" align="center"  bgcolor=#ffaa00>用户注册</th></tr>  
  14.    <tr>  
  15.    <th rowspan="3" background="images/2.jpg" style="width=90px"></th>  
  16.    <td>用户名:</td><td><input type="text" class="message" name="username"></td></tr>  
  17.    <tr><td>密  码:</td><td><input class="message" type="password" name="userpassword"></td></tr>  
  18.     <tr><td colspan="2" align="center"><input type="submit" value="注册">  <input type="reset" value="重置"></td></tr>  
  19.    </table>  
  20.    </form>  
  21.    </div>  
  22.   </body>  
  23. </html>  

succ.jsp:

Code:
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <html>  
  3.   <head>  
  4.     <title>My JSP 'succ.jsp' starting page</title>  
  5.       
  6.   </head>  
  7.     <!--默认把值放在了request作用域里面,如果要用session,则需要另外的方法  -->  
  8.   <body>  
  9.   <p> Succsess.${username } ${userpassword }</p><br>  
  10.     <a href="exit.jsp">退出系统</a>  
  11.   </body>  
  12. </html>  

下一步建立数据库用户表,UserPojo.java和User.hbm.xml,同时还需要创建jbmp的18张表.

Code:
  1. create table user(   
  2. id varchar(32) primary key,   
  3. username varchar(50),   
  4. userpassword varchar(50),   
  5.   
  6. )  
Code:
  1. package myclass.entity;   
  2.   
  3. public class UserPojo {   
  4. private String id;   
  5. private String userName;   
  6. private String userPassword;   
  7. public String getId() {   
  8.     return id;   
  9. }   
  10. public void setId(String id) {   
  11.     this.id = id;   
  12. }   
  13. public String getUserName() {   
  14.     return userName;   
  15. }   
  16. public void setUserName(String userName) {   
  17.     this.userName = userName;   
  18. }   
  19. public String getUserPassword() {   
  20.     return userPassword;   
  21. }   
  22. public void setUserPassword(String userPassword) {   
  23.     this.userPassword = userPassword;   
  24. }   
  25. }   
Code:
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC    
  3.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"   
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5.     <hibernate-mapping>  
  6.     <class name="myclass.entity.UserPojo" table="user">  
  7.     <!-- 配置对角标识符和表的主键 -->  
  8.     <!-- column表示与数据库对应的字段 -->  
  9.     <id name="id" column="id">    
  10.     <!-- 配置主键的生成策略 -->  
  11.     <generator class="uuid.hex" />  
  12.     </id>  
  13.     <!--配置其他的属性与字段 -->  
  14.     <property name="userName" column="username"></property>  
  15.     <property name="userPassword" column="userpassword"></property>  
  16.     </class>  
  17.     </hibernate-mapping>  

jbpm的表可以在jbpm下载包里找到相应的脚本,导入数据库既可,这里用的是mysql数据库.jbpm-4.3/install/src/db/create下的jbpm.mysql.create.sql文件

接下来就要创建所要用到的ssh框架各层的接口和实现类了:

dao层接口:

Code:
  1. public interface UserDao {   
  2. public void addUser(UserPojo user);   
  3. }  

dao层实现类:

Code:
  1. package myclass.dao.imp;   
  2.   
  3. import javax.annotation.Resource;   
  4.   
  5. import myclass.dao.UserDao;   
  6. import myclass.entity.UserPojo;   
  7.   
  8. import org.hibernate.SessionFactory;   
  9. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;   
  10. import org.springframework.stereotype.Repository;   
  11. import org.springframework.transaction.annotation.Isolation;   
  12. import org.springframework.transaction.annotation.Propagation;   
  13. import org.springframework.transaction.annotation.Transactional;   
  14. @Repository("userDaoImp")   
  15. @Transactional  
  16. public class UserDaoImp implements UserDao{   
  17.     @Resource(name="sessionFactory")   
  18.     private SessionFactory sessionFactory;   
  19.     @Transactional(readOnly = false, propagation = Propagation.REQUIRED,isolation=Isolation.READ_COMMITTED,timeout=20)   
  20.     public void addUser(UserPojo user) {   
  21.         System.out.println("欢迎来到DAO层");   
  22.         //this.getSession().save(user);   
  23.         sessionFactory.getCurrentSession().save(user);   
  24.     }   
  25.   
  26. }   

service层接口:

Code:
  1.   
  2. public interface LoginService {   
  3. public void check(String username,String userpassword);   
  4. public void adduser(UserPojo user);   
  5. public void testJbpm();   
  6. }   

service层实现类:

Code:
  1. package myclass.service.impl;   
  2.   
  3. import java.io.File;   
  4. import java.io.FileInputStream;   
  5. import java.io.FileNotFoundException;   
  6. import java.util.zip.ZipInputStream;   
  7.   
  8. import javax.annotation.Resource;   
  9.   
  10. import myclass.dao.UserDao;   
  11. import myclass.entity.UserPojo;   
  12. import myclass.service.LoginService;   
  13.   
  14. import org.jbpm.api.Configuration;   
  15. import org.jbpm.api.NewDeployment;   
  16. import org.jbpm.api.ProcessEngine;   
  17. import org.jbpm.api.RepositoryService;   
  18. import org.springframework.stereotype.Service;   
  19. @Service("loginServiceImpl")   
  20. public class LoginServiceImp implements LoginService{   
  21.     @Resource(name="userDaoImp")   
  22.     public UserDao userDao;   
  23.     @Resource(name="processEngine")   
  24.     public ProcessEngine processEngine;   
  25.     public void check(String username, String userpassword) {   
  26.         System.out.println("欢迎你来到业务层:"+username+"---"+userpassword);   
  27.                
  28.     }   
  29.     public void adduser(UserPojo user) {   
  30.         System.out.println("欢迎你来到业务层");   
  31.         userDao.addUser(user);   
  32.     }   
  33.     public void testJbpm() {   
  34.            
  35.         RepositoryService repositoryService=processEngine.getRepositoryService();   
  36.         NewDeployment newDeployment=repositoryService.createDeployment();   
  37.         newDeployment.addResourceFromClasspath("leave.jpdl.xml");    
  38.         String id=newDeployment.deploy();   
  39.         System.out.println(id);   
  40.            
  41.     }   
  42.   
  43. }   

这里的testJbpm方法是将一个leave.jpdl.xml流程的文件放入jbpm数据库,需要在src下创建这样一个文件:

Code:
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <process name="leave" xmlns="http://jbpm.org/4.3/jpdl">  
  4.    <start g="308,38,48,48" name="start">  
  5.       <transition g="-101,-17" name="to leave message" to="leave message"/>  
  6.    </start>  
  7.    <task assignee="xiong" g="285,104,92,52" name="leave message">  
  8.       <transition g="-83,-17" name="to exclusive1" to="exclusive1"/>  
  9.    </task>  
  10.    <task assignee="deng" g="201,268,92,52" name="counselor check">  
  11.       <transition g="-243,-16" name="to director check" to="director check"/>  
  12.    </task>  
  13.    <task assignee="liping" g="386,267,92,52" name="director check">  
  14.       <transition g="-41,-17" name="to end" to="end"/>  
  15.    </task>  
  16.    <end g="379,395,48,48" name="end"/>  
  17.    <decision expr="#{role}" g="312,183,48,48" name="exclusive1">  
  18.       <transition g="-46,-15" name="student" to="counselor check"/>  
  19.       <transition g="7,-11" name="counselor" to="director check"/>  
  20.    </decision>  
  21. </process>  

最后就是控制类了:

LoginAction.java:

Code:
  1. package myclass.struts2.action;   
  2.   
  3. import javax.annotation.Resource;   
  4.   
  5. import myclass.entity.UserPojo;   
  6. import myclass.service.LoginService;   
  7.   
  8. import org.springframework.stereotype.Controller;   
  9. @Controller("loginAction")   
  10. public class LoginAction {   
  11.     //注入业务对象   
  12.     @Resource(name="loginServiceImpl")   
  13.     private LoginService loginService;   
  14.     private String username;   
  15.     private String userpassword;   
  16. public String getUsername() {   
  17.         return username;   
  18.     }   
  19.     public void setUsername(String username) {   
  20.         this.username = username;   
  21.     }   
  22.   
  23.     public String getUserpassword() {   
  24.         return userpassword;   
  25.     }   
  26.   
  27.     public void setUserpassword(String userpassword) {   
  28.         this.userpassword = userpassword;   
  29.     }   
  30.   
  31. public String execute(){   
  32.     System.out.println("我进来了呢");   
  33.     System.out.println(this.getUsername());   
  34.     System.out.println(this.getUserpassword());   
  35.        
  36.     UserPojo user=new UserPojo();   
  37.     //user.setUserName("xiong");   
  38.     //user.setUserPassword("4654654");   
  39.     user.setUserName(this.getUsername());   
  40.     user.setUserPassword(this.getUserpassword());   
  41.     //作用是添加用户   
  42. loginService.adduser(user);   
  43. //添加用户后,测试jbpm,添加一个流程文件   
  44.     loginService.testJbpm();   
  45.     return "succ";   
  46. }   
  47. }   

到这里,测试类就写完了,下面可以启动tomcat了.

四,启动tomcat

如果tomcat5,不会有什么问题,如果是tomcat6.0则需要把juel.jar
juel-engine.jar
juel-impl.jar这几个包放到tomcat6.0的lib下,如果不对,则把el-api.jar删了,既可.如果还有问题的话,可以换成tomcat6.0.20,这个我测试成功了,不过tomcat6.0.28的测试却不对,不知道为什么.到此就整合和测试完了,东西比较多,但总的思想就是先把一个组合配置正确,再增加一个,一步一步配置.

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值