`
lushuaiyin
  • 浏览: 704907 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JBPM学习(一)--与SSH整合

 
阅读更多


学习JBPM前,先了解一下JBPM。


百科:
JBPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理、工作流、服务
协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。jBPM是公开源代码项目,使用它要遵循
ASL(Apache License Version 2.0)和EULA(JBoss End User License Agreement)协议。


jBPM特色
就是它的业务逻辑定义没有采用目前的一些规范,如WfMC´s XPDL, BPML, ebXML, BPEL4WS等,而是采用
了它自己定义的JBoss jBPM Process definition language (jPdl)。jPdl认为一个业务流程可以被看作是一个
UML状态图。jPdl就是详细定义了这个状态图的每个部分,如起始、结束状态,以及状态之间的转换,通过图型
化的流程定义,直观地描述业务流程。


jBPM的另一个特色是它使用Hibernate来管理它的数据库。Hibernate是目前Java领域非常流行的一种数据存储
层解决方案,只要是 Hibernate 支持的数据库, jBPM 也就支持。通过Hibernate,jBPM将数据的管理职能分离
出去,自己专注于业务逻辑的处理。


工作流程


1) jBPM的运行需要数据库的支持,因此系统设计时要选定所用数据库。只要是Hibernate支持的数据库,jBPM
就支持。数据库的初始化可以由jBPM自动完成,也可以通过ant generate.ddl任务生成SQL语句,在jBPM外部自
己创建所需的表。
2) 使用jPdl定义工作流,生成processdinination.xml文件。可以采用GUI工具gpdl,但目前只支持jBPM1.0,
而且bug很多。XML的DTD定义文件在jBPM下载包中。
3) Ant create.pde生成pde包的工作目录。将processdinination.xml文件和其它需要的文件放在指定的目录下
,使用ant build.precess.archives生成pde包。pde包的格式采用jar。
4) 更改pde工作目录/src/config/jbpm.properties的相关属性,主要是设定相关的数据库连接信息。注意要将
数据库的JDBC驱动放在pde工作目录的lib目录下。
5) Ant deploy.process.archives将刚才生成的pde部署到数据库。实际上就是向数据库插入一些相关数据。
6) 利用jBPM API函数开发相应的工作流程。








jbpm官网: http://www.jboss.org/jbpm/
下载链接: http://sourceforge.net/projects/jbpm/files/






我的工程使用SSH框架搭建。在讲jbpm前,这个工程已经搭建好了。
在此基础上我们把jbpm整合进我的工程。


一,下载jbpm的jar包。
下载链接: http://sourceforge.net/projects/jbpm/files/
我使用的是jbpm4.4这个版本,应为这个版本相对稳定,而且网上对应的资料也很好找到。
解压后看看目录结构:


doc: 里面是相关文档。包括开发向导,api,用户向导。


examples: 一个样例。


install: 安装脚本(这个很重要)。


lib: 第三方jar包。


src: JBPM的源码。(这个源码其实比jbpm.jar包中的文件要少,应该是核心源码吧)


jbpm.jar :JBPM的jar包


******************************************************************************
下面开始详细查看install目录。
downloads:空的。
jdbc :这个目录里给出了链接数据库配置的properties文件样本(链接数据库字符串),例如如果我们使
用mysql数据库,

mysql.properties文件内容:


jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/jbpmdb
jdbc.username=jbpm
jdbc.password=jbpm
明白一个就知道其他文件是干嘛的了。


src :这个目录给出了创建数据库的脚本,jbpm配置文件,以及在不同数据库,使用Hibernate配置
不同数据源和使用HIbernate文件和使用spring配置下的各种样本。总之,就是你在使用Hibernate和spring
时要要配置数据源,对各种方式,这个目录下都有模板。同时还有对日志和邮件的配置。gpd目录下海有
eclipse
的插件包。


build.xml:ant的构建文件。


********************************************************************************
该说该看的都大概了解了,现在把jar包加进来,引入到classpath。


二,安装eclipse插件。
在jbpm-4.4\install\src\gpd下找到jbpm-gpd-site.zip。
在Eclipse中找菜单Help -> Install new software。
点击Add按钮,弹出框中,name随便写,点击Archive..按钮,找到jbpm-gpd-site.zip。
安装后重启Eclipse。
在菜单,window->Preferences中能看到JBoss jBPM.




三,创建数据库。
在jbpm-4.4\install\src\db下能看到4个文件夹:
create,drop,upgrade-4.0-to-4.1,upgrade-4.1-to-4.2。
每个目录里都对应了hsqldb,mysql,oracle,postgresql的脚本。


我打算使用mysql数据库,找到create下的jbpm.mysql.create.sql文件,把里面创建表的
sql执行。这样就创建好了需要的表。可以先往表里写一些数据,jbpm-4.4\install\src\demo下有个
example.identities.sql就是插入测试数据的脚本


从上面的图片可以看出有18张表。
这些表都是干吗用的呢?
从网上找了些资料,先做一下了解,以后再详细研究:


--------------------------------------------------------------------------


1资源库和运行时表结构:


JBPM4_DEPLOYMENT,JBPM4_DEPLOYPROP,JBPM4_LOB存储流程定义相关的部署信息
JBPM4_EXECUTION主要是存放JBPM4的执行信息,Execution机制代替了JBPM3的Token机制
JBPM4_TASK存放需要人来完成的Activities(活动),需要人来参与完成的Activity 被称为Task
JBPM4_PARTICIPATION参与者表,存放参与者信息,参与者的种类有
Candidate、Client、Owner、Replaced Assignee和Viewer。
而具体的参与者既可以是单一用户,也可以是用户组


JBPM4_SWIMLANE泳道表。SwimLane是一种Runtime Process Role。
通过SwimLane,多个Task可以一次分配到同一Actor身上


JBPM4_JOB 存放的是Timer 的定义
JBPM4_VARIABLE 存的是进行时的临时变量。


2历史数据库表结构:


JBPM4_HIST_PROCINST 与JBPM4_HIST_ACTINST 分别存放Process Instance和Activity Instance的历史记录
JBPM4_HIST_DETAIL 保存 Variable的变更记录
JBPM4_HIST_VAR 保存历史的变量 JBPM4_HIST_TASK Task的历史信息


3身份认证表结构


JBPM4_ID_GROUP ,JBPM_ID_MEMBERSHIP ,JBPM4_ID_USER 这三张表很常见,
基本的权限控制,关于用户认证方面建议还是自己开发一套,组件自带的功能太简单,
使用中有很多需求难以满足


除了前面述及的17张表外,还有一张引擎参数表,这是一张独立的表,在此没有单独列出




--------------------------------------------------------------------------








四,配置JBPM。


首先给出我的工程结构和spring配置。


applicationContext.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"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
    http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-2.5.xsd">

	<bean id="propertyConfigurer" 
	class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
	    <property name="locations">
			<list>
				<value>classpath:configure.properties</value>
			</list>
	     </property>		
	</bean>
	<bean id="sessionFactory" 
	class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">${hibernate.dialect}</prop>
				<prop key="hibernate.query.substitutions">true=1,false=0</prop>
				<prop key="hibernate.jdbc.batch_size">25</prop>
				<prop key="hibernate.show_sql">true</prop>
				<prop key="hibernate.format_sql">false</prop>
				<prop key="hibernate.generate_statistics">false</prop>
				<prop key="hibernate.cache.use_query_cache">false</prop>
				<prop key="hibernate.cache.region_prefix">direct</prop>
				<prop key="hibernate.cache.use_structured_entries">false</prop> 
				<prop 
				key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheP
				rovider</prop>
				<prop 
				key="hibernate.query.factory_class">org.hibernate.hql.ast.ASTQuer
				yTranslatorFactory</prop> 
				<prop 
				key="hibernate.transaction.factory_class">org.hibernate.transacti
				on.JDBCTransactionFactory</prop>
				
				<!-- 自动创建表 -->
				<!--  
				<prop key="hibernate.hbm2ddl.auto">update</prop>
				-->		
			</props>
		</property>
		<property name="dataSource"       ref="dataSource"/>
		<property name="mappingLocations">
	       <list>
	         <value>classpath:/org/first/config/LsyUser.hbm.xml</value>
	         <value>classpath:/org/second/config/LsyDep.hbm.xml</value>
	       </list>
        </property>
	</bean>
	
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" 
	destroy-method="close">
		<property name="maxPoolSize" value="${c3p0.maxPoolSize}"/>
		<property name="minPoolSize" value="${c3p0.minPoolSize}"/>
		<property name="maxIdleTime" value="${c3p0.maxIdleTime}"/>
		<property name="maxStatements" value="${c3p0.maxStatements}"/>
		<property name="acquireIncrement" value="${c3p0.acquireIncrement}"/>
		<property name="idleConnectionTestPeriod" 
		value="${c3p0.idleConnectionTestPeriod}"/>
		<property name="driverClass" value="${jdbc.driverClassName}"/>
		<property name="jdbcUrl" value="${jdbc.url}"/>
		<property name="user" value="${jdbc.username}"/>
		<property name="password" value="${jdbc.password}"/>
	</bean>
	
	
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource">
        	<ref bean="dataSource"/>
        </property>
    </bean>
    	
	<bean id="transactionManager" 
	class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory"/>
	</bean>
	
	<bean id="transactionProxyTemplate" 
	class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" 
	abstract="true">
		<property name="transactionManager" ref="transactionManager"/>
		<property name="transactionAttributes">
			<props>
				<prop key="query*">PROPAGATION_REQUIRED</prop>
				<prop key="*">PROPAGATION_REQUIRED</prop>
			</props>
		</property>
	</bean>	
	
	<!-- 功能模块的引入 -->
	<import resource="classpath:/org/first/config/context_first.xml"/>
	<import resource="classpath:/org/second/config/context_second.xml"/>
</beans>

configure.properties

# applicationContext.xml

### C3P0 Connection Pool
c3p0.maxPoolSize=3
c3p0.minPoolSize=1
c3p0.maxIdleTime=1800
c3p0.maxStatements=0
c3p0.acquireIncrement=2
c3p0.idleConnectionTestPeriod=600

#oracle  
#jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
#jdbc.url=jdbc:oracle:thin:@10.55.15.66:1521:cdbank
#jdbc.username=ccdb
#jdbc.password=ccdb
#hibernate.dialect=org.hibernate.dialect.Oracle9Dialect

#mysql
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/mydb
jdbc.username=root
jdbc.password=root
hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect

现在开始修改配置。
1,在源文件夹中增加jbpm.cfg.xml配置文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<jbpm-configuration>

  <import resource="jbpm.default.cfg.xml" />
  <import resource="jbpm.tx.spring.cfg.xml" />
  <import resource="jbpm.jpdl.cfg.xml" />
  <import resource="jbpm.bpmn.cfg.xml" />
  <import resource="jbpm.identity.cfg.xml" />
  <import resource="jbpm.businesscalendar.cfg.xml" />
  <import resource="jbpm.console.cfg.xml" />
  <import resource="jbpm.jobexecutor.cfg.xml" />
  
  <process-engine-context>
    <string name="spring.cfg" value="applicationContext.xml" />
  </process-engine-context>

</jbpm-configuration>

这个可以在jbpm-4.4\install\src\cfg\jbpm路径下找到spring.jbpm.cfg.xml。
这个文件中就是上面的内容。


2,修改spring的applicationContext.xml文件。
增加:

<!-- jbpm start -->
	<bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper" />

    <bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine" />
	<!-- jbpm end-->

上面是参照jbpm-4.4\install\src\cfg\spring下的applicationContext.xml文件。
注意和里面有些区别,里面有关于sessionFactory的配置如下;

  <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="configLocation" value="classpath:jbpm.hibernate.cfg.xml" />
    <property name="dataSource" ref="dataSource" />
  </bean>

就是说,sessionFactory的配置它又单独放到classpath:jbpm.hibernate.cfg.xml中了。
我们可以这么做,单我习惯使用properties文件配置(如上)。
这个jbpm.hibernate.cfg.xml其实就是我们配置hibernate的文件,
在jbpm-4.4\install\src\cfg\hibernate下也给我们提供了很多模板,我们根据是否使用spring以及配置数据源的方式到里面找模板拷贝里面的配置并改成自己的就行了。


在这里要注意,索然我们使用properties文件配置sessionFactory,对比给出的模板还是把
<mapping resource="jbpm.repository.hbm.xml" />
<mapping resource="jbpm.execution.hbm.xml" />
<mapping resource="jbpm.history.hbm.xml" />
<mapping resource="jbpm.task.hbm.xml" />
<mapping resource="jbpm.identity.hbm.xml" />
上面5个xxx.hbm.xml一定要引入到Hibernate中,这些文件已经在jar包中了,我们只要在配置sessionFactory
时引入即可:


	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">${hibernate.dialect}</prop>
				<prop key="hibernate.query.substitutions">true=1,false=0</prop>
				<prop key="hibernate.jdbc.batch_size">25</prop>
				<prop key="hibernate.show_sql">true</prop>
				<prop key="hibernate.format_sql">false</prop>
				<prop key="hibernate.generate_statistics">false</prop>
				<prop key="hibernate.cache.use_query_cache">false</prop>
				<prop key="hibernate.cache.region_prefix">direct</prop>
				<prop key="hibernate.cache.use_structured_entries">false</prop> 
				<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
				<prop key="hibernate.query.factory_class">org.hibernate.hql.ast.ASTQueryTranslatorFactory</prop> 
				<prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</prop>
				
				<!-- 自动创建表 -->
				<!--  
				<prop key="hibernate.hbm2ddl.auto">update</prop>
				-->		
			</props>
		</property>
		<property name="dataSource"       ref="dataSource"/>
		<property name="mappingLocations">
	       <list>
	         <value>classpath:/org/first/config/LsyUser.hbm.xml</value>
	         <value>classpath:/org/second/config/LsyDep.hbm.xml</value>
	         
	         <value>classpath:jbpm.repository.hbm.xml</value>
	         <value>classpath:jbpm.execution.hbm.xml</value>
	         <value>classpath:jbpm.history.hbm.xml</value>
	         <value>classpath:jbpm.task.hbm.xml</value>
	         <value>classpath:jbpm.identity.hbm.xml</value>
	       </list>
        </property>
	</bean>


后面我将继续做一个测试模块来初步使用JBPM开发流程




分享到:
评论

相关推荐

    ssh-jbpm.rar_jbpm stru_jbpm-web-test_ssh_struts2_struts2 jbpm

    总的来说,这个压缩包是一个关于Struts2应用的实战案例,特别强调了与jbpm的集成,对于想要了解和学习SSH框架、Struts2特性和jbpm工作流程管理的开发者来说,这是一个宝贵的资源。通过研究这个项目,可以提升对Java ...

    工作流jbpm---学习文档+简单实例项目

    总结来说,这个资源包提供了一套全面的学习路径,从理论知识到实践案例,涵盖了jbpm的核心概念和与SSH框架的整合。对于希望掌握jbpm的开发者而言,这是一个宝贵的参考资料,可以帮助他们快速上手,并在实际项目中...

    jbpm与ssh框架整合

    jbpm4与SSH框架的整合是将jBPM(java Business Process Managerment)这一轻量级工作流引擎与Struts2、Spring和Hibernate(SSH)这三大主流Java开发框架结合的过程,以实现企业级应用中的业务流程管理和控制。jBPM是...

    jbpm 整合 ssh框架

    - `jbpm与ssh框架集成.mht` 文件可能包含了一个完整的示例,演示了如何在SSH项目中启动和控制jbpm流程。 - `jbpm 4_3 与 spring 集成 - AJava.mht` 文件可能是关于jbpm 4.3版本与Spring集成的详细教程,包括具体的...

    SSH整合JBPM

    SSH整合JBPM是一个常见的企业级应用开发场景,SSH指的是Spring、Struts和Hibernate这三个开源框架的集成,而JBPM则是一个强大的工作流管理系统。在这个整合过程中,SSH负责应用程序的架构和数据管理,而JBPM则提供了...

    Jbpm4与SSH整合

    **JBPM4与SSH整合详解** 在企业级应用开发中,Spring(Struts2、Hibernate)集成,简称SSH,是常见的Java Web开发框架组合。它们分别负责控制层、视图层和持久层的处理,而JBPM4则是一个强大的工作流管理系统,用于...

    jbpm+ssh整合

    【jbpm+ssh整合】是将企业级工作流引擎jbpm与流行的SSH(Struts、Spring、Hibernate)框架集成,实现一个完整的业务流程管理系统。jbpm是一个开源的工作流引擎,可以处理复杂的业务流程自动化,而SSH是Java开发中...

    ssh+jbpm整合.doc

    本文旨在详细介绍如何将JBPM工作流框架与SSH框架进行整合,并通过具体的步骤来解决实际开发过程中可能遇到的问题。 #### 二、SSH框架简介 1. **Spring**:一种轻量级的Java EE应用程序框架,用于简化企业级应用开发...

    jbpm4.4+ssh整合

    jbpm4.4+ssh整合还需要安装插件进入到myeclipse中 将相应的jar文件放进去 就能够运行 jbpm4.4 jar ssh(strut2,hibernate3,spring3)三大框架整合的jar包 例子是 请假流程 代码中有很好的注释 便于初学者学习

    jBPM4.4+ssh 整合配置及完整实例

    **jBPM4.4与SSH整合配置及完整实例详解** jBPM(Java Business Process Management)是一款开源的工作流管理系统,主要用于处理业务流程自动化。在本实例中,我们将讨论如何将jBPM 4.4版本与SSH(Spring、Struts、...

    ssh-jbpm整合

    SSH-JBPM整合是将Spring、Struts2和Hibernate这三个流行的Java开源框架与Business Process Management System(业务流程管理系统)JBPM结合使用的一种实践。SSH分别代表Spring(一个强大的依赖注入和面向切面编程...

    jbpm4.4 ssh 整合

    总的来说,SSH与JBPM 4.4的整合是一个强大的组合,它为Java企业级应用提供了完整的业务流程解决方案。开发者可以通过这个整合实现复杂流程的自动化,并在SSH框架的支撑下,享受到便捷的开发和维护体验。

    jbpm4.4与ssh框架的整合

    ### jBPM 4.4与SSH框架的整合:深入解析与实践 #### jBPM:Java业务流程管理引擎 jBPM,全称为java Business Process Management,是JBoss旗下的一款开源工作流引擎,专为Java EE环境设计,提供了一种轻量级的解决...

    ssh-jbpm 框架的整合使用

    将SSH与JBPM整合,可以让开发者更加便捷地实现业务流程自动化,提高软件的可维护性和可扩展性。 一、Struts2框架 Struts2是MVC设计模式的实现,主要负责处理HTTP请求并将其转发到相应的Action。在SSH-JBPM整合中,...

    jbpm4.4整合ssh代码

    **jbpm4.4与SSH整合的关键点** 1. **Spring集成**: 集成jbpm4.4到Spring中,可以利用Spring的依赖注入和事务管理,使流程服务的调用更加灵活和可控。 2. **Struts配置**: 在Struts中添加jbpm的控制器,以便通过...

    jbpm5+ssh集成

    jbPM5和SSH(Spring、Struts、Hibernate)的集成是企业级Java应用开发中的常见实践,旨在利用jbPM5的流程管理能力与SSH框架的强大功能,构建出高效、灵活的企业级业务系统。jbPM5是一个开源的工作流和业务流程管理...

    ssh整合jbpmssh整合jbpm

    SSH整合JBPM是一个在Java开发领域中的重要主题,它涉及到Spring、Struts和Hibernate这三大框架与业务流程管理(Business Process Management, BPM)系统JBPM的集成。SSH是Java Web应用开发的主流技术栈,而JBPM则是...

    jBPM4.4Pssh.rar_jbpm-4.4_ssh jbpm_工作流OA

    总结来说,"jBPM4.4Pssh.rar" 提供了一个关于jbPM 4.4与SSH整合的实践案例,对于想要了解和掌握Java工作流管理以及SSH框架集成的开发者来说,是一个宝贵的学习资源。通过深入研究和实践,你可以提升在企业级应用开发...

    JBPM4.4+SSH整合

    **jbPM4.4与SSH整合详解** jbPM(Java Business Process Management)是一个开源的工作流管理系统,主要用于业务流程的建模、执行和监控。版本4.4是jbPM的一个重要里程碑,提供了强大的流程定义和执行能力。SSH...

    ssh+jbpm整合好的demo

    SSH+JBPM整合是一个在Java开发领域常见的技术组合,用于构建复杂的业务流程管理系统。SSH代表Struts2、Spring和Hibernate,它们分别是MVC框架、依赖注入容器和对象关系映射库,而JBPM则是一个开源的工作流和业务流程...

Global site tag (gtag.js) - Google Analytics