- 浏览: 166673 次
- 性别:
- 来自: 北京
最新评论
-
alanlhy:
整理的不错,不过就是字有些太小了,而且有些地方貌似出现了错误。 ...
FreeMarker快速入门 -
rjhym:
rjhym 写道有个问题,如果中间有汉字的怎么处理?谢谢 QQ ...
Java正则表达式详解 取值 -
rjhym:
有个问题,如果中间有汉字的怎么处理?谢谢 QQ:4044200 ...
Java正则表达式详解 取值 -
xtaywang8:
properties文件中
Struts 2.0 文件上传/下载 -
xueqing227:
非常感谢。帮我解决了一个大问题。
axis java 调用 .net Web Services
前言
最近因为工作需要做一个工作流相关的DEMO,研究了一下JBPM,记录一下个人的心得与体会。
软件环境:
- spring2.0.2
- hibernate3.2.2
- spring modules 0.8 (Jbpm3.1)
- jbpm3.1.4
- struts2.0.6
配置
Spring Module Jbpm模块提供了几个工具类用来整合spring和jbpm,关于具体的配置可以参见spring module下载包中的参考手册,按照上面的指示来就OK了,这里粘贴示例配置。
- <!---->xml version="1.0" encoding="UTF-8"?>
- <!---->>
- <beans default-autowire="byName" default-lazy-init="true">
- <bean id="approveWorkflow"
- class="org.springmodules.workflow.jbpm31.definition.ProcessDefinitionFactoryBean">
- <property name="definitionLocation"
- value="classpath:jbpm/audit/processdefinition.xml" />
- bean>
- <bean id="jbpmConfiguration"
- class="org.springmodules.workflow.jbpm31.LocalJbpmConfigurationFactoryBean">
- <property name="sessionFactory" ref="sessionFactory" />
- <property name="configuration" value="classpath:jbpm/jbpm.cfg.xml" />
- <property name="processDefinitions">
- <list>
- <ref local="approveWorkflow" />
- list>
- property>
- bean>
- <bean id="jbpmTemplate"
- class="org.springmodules.workflow.jbpm31.JbpmTemplate">
- <constructor-arg index="0" ref="jbpmConfiguration" />
- <constructor-arg index="1" ref="approveWorkflow" />
- bean>
- beans>
比较关键的是为了能够使JBPM实体和业务实体使用同一个会话工厂,这样可以在JBPM流程实例中持久化业务实体对象。必须将业务实体映射和JBPM的实体映射进行整合。我的作法是改写JBPM本身提供的hibernate.cfg.xml文件,将业务实体包括在里面。
- <!---->xml version='1.0' encoding='utf-8'?>
- <!---->
- "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
- <hibernate-configuration>
- <session-factory>
- <property name="hibernate.cache.use_second_level_cache">
- false
- property>
- <property name="hibernate.cache.use_query_cache">
- false
- property>
- <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialectproperty>
- <property name="hibernate.show_sql">falseproperty>
- <property name="hibernate.query.factory_class">
- org.hibernate.hql.ast.ASTQueryTranslatorFactory
- property>
- <!---->
- <mapping resource="com/emap/jbpm/model/Apply.hbm.xml"/>
- <!---->
- <mapping resource="org/jbpm/graph/action/Script.hbm.xml"/>
- <mapping resource="org/jbpm/db/hibernate.queries.hbm.xml" />
- <!---->
- <mapping resource="org/jbpm/graph/def/ProcessDefinition.hbm.xml"/>
- <mapping resource="org/jbpm/graph/def/Node.hbm.xml"/>
- <mapping resource="org/jbpm/graph/def/Transition.hbm.xml"/>
- <mapping resource="org/jbpm/graph/def/Event.hbm.xml"/>
- <mapping resource="org/jbpm/graph/def/Action.hbm.xml"/>
- <mapping resource="org/jbpm/graph/def/SuperState.hbm.xml"/>
- <mapping resource="org/jbpm/graph/def/ExceptionHandler.hbm.xml"/>
- <mapping resource="org/jbpm/instantiation/Delegation.hbm.xml"/>
- ........
- session-factory>
- hibernate-configuration>
下面我们看看sessionFactory工厂的配置。
- <!---->xml version="1.0" encoding="UTF-8"?>
- <!---->>
- <beans default-autowire="byName" default-lazy-init="true">
- <!---->
- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
- <property name="driverClassName" value="${jdbc.driverClassName}"/>
- <property name="url" value="${jdbc.url}"/>
- <property name="username" value="${jdbc.username}"/>
- <property name="password" value="${jdbc.password}"/>
- bean>
- <!---->
- <bean id="sessionFactory"
- class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
- <property name="dataSource" ref="dataSource" />
- <property name="configLocations">
- <list>
- <value>classpath:jbpm/hibernate.cfg.xmlvalue>
- list>
- property>
- bean>
- <!---->
- <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
- <property name="sessionFactory" ref="sessionFactory"/>
- bean>
- beans>
遗留问题
如何使用JBPM Process Designer插件?
一直没找到如何使用JBPM Process Designer插件的使用文档,比如如何配置JBPM安装路径,如何部署。目前唯一用到的功能就是编写流程文件。
如何发布流程文件?
对于如何发布流程文件,我比较同意如下帖子中的观点,编程实现或许是最简洁的方式。
www.pcdog.com/edu/java/2006/11/v171946.html
如何关联业务实体和流程实例?
JBPM主要用来管理业务流程,记录每个流程进入哪个环节,同时还要保存一些状态,这些状态信息可能来自于业务实体。JBPM的实现方式是将这些状态信息序列化到数据库的表列。
假定有一个订单处理的流程,现在要获取某个角色当前的所有任务列表,同时将关联的订单信息展示给用户,我们应该如何处理?目前我想到有以下几种方式:
方式一:在构建任务实例的时候,将业务实体持久化到contextInstance,在获取任务列表时从任务实例中直接解析出业务实体。如果需要保存的业务实体数据量很大,这会给JBPM数据库造成很大的数据冗余。
方式二:在 构建任务实例的时候,仅将业务实体的唯一标识符持久到contextInstance,在获取任务列表时从任务实例中解析出任务实体的唯一标识符,然后再 根据此标识符查询业务实体数据库。这种情况会造成查询一个包含N个的任务列表时,需要N+1次数据库查询,显然性能是无法满足需求的。
方式三:是否可以在构建业务实体时,和TaskInstance进行关联?这种方式会造成业务实体和JBPM紧耦合,而且必须对JBPM本身有比较深刻的理解。
有什么更好的办法解决这种问题呢?个人以为方式一可能是目前性价比最好的解决方式吧。
一点体会
JBPM看来在国内并没有得到很多的应用,资料都比较稀缺,唯一的参考手册也是非常的浅显和简单。而其源码的注释不是很好,这在国外的开源软件中是很罕见的。
JBPM提供的某些API不是很全,举个例子,假定我要查询某个角色某个时间段的所有任务列表。因为TaskMgmtSession仅提供了findXXXTaskInstances(String actorId)方法,所以我只能先查询出该角色的所有任务列表,采用如下代码:
- TaskMgmtSession taskMgmtSession = context.getTaskMgmtSession();
- List tasks = taskMgmtSession.findPooledTaskInstances(actorId);
然后再在内存中使用类似如下代码进行过滤。
- if (task.getName().equals(taskName) && !task.hasEnded())
这种方式太笨拙和低效了。
发表评论
-
网站灰色显示IE编辑
2011-07-21 11:59 999Html代码 <style type ... -
nginx tomact 负载 集群
2011-07-21 11:58 1011今天看到"基于apache的tomcat负载均衡和集 ... -
解决清除安装记录和播放记录的方法
2009-03-25 11:57 166删除对应的记录即可1.程序安装记录:C:\Private\10 ... -
关于如何删除主题的解决方法
2009-03-25 11:57 119【第五辑】 ... -
小I工程模式的翻译
2009-03-25 11:54 507以下内容为自己查阅网站得来,由于并不是内行,专业词汇过多,所以 ... -
教你如何进入工程模式调大小I听筒音量!!
2009-03-25 11:49 305教你如何进入工程模式调大小I听筒音量!! 本人用的奥运心机版I ... -
HttpRequestProxy 代理
2009-01-18 09:47 3780package com.systop.pmmis3.sms.u ... -
I450配件价格
2008-12-14 18:35 1151、显示屏(这是从来就不保修的)价格:180---200元。 ... -
三星手机暗码大全
2008-12-14 17:41 910*#06#显示IMEI号,第七第 ... -
安装MAVEN2
2008-10-25 10:05 425下载 http://maven.apache.org/down ... -
Eclipse 使用 jetty
2008-10-24 19:56 3271.所需jar包 \jetty-6.0.1\lib jet ... -
SQL SERVER 2005转到2000的步骤
2008-09-10 13:59 26591. 生成for 2000版本的数据库脚本 2005 的man ... -
SQL 2000 备份数据库,排它访问权。解决方法
2008-08-15 10:39 10654--还原数据库时数据库正在使用导致数据库无会还原,此存储过存在 ... -
SQL Server 备份
2008-08-14 13:40 329A : 情况是这样的 create database t ... -
apache svn 配制
2008-06-04 14:42 545将Subversion\bin 目录下的 mod_authz_ ... -
tomact + apr + apache 部署配制
2008-06-04 14:18 3301.先去 http://tomcat.heanet.ie/na ... -
得到文件的真实路径
2008-05-29 09:33 57371.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件 ... -
Java正则表达式详解 取值
2008-04-15 22:02 8764Java正则表达式详解 ... -
Spring 对Oracle数据库操作clob类型大字段的处理
2008-02-27 12:15 1602<bean id="nativeJdbcExt ... -
oracle 基本操作
2008-02-18 18:07 203--创建用户 create user systop -- ...
相关推荐
s变换用的高斯窗函数( 高斯窗是指数窗的一种,它也无负的旁瓣,而且没有旁瓣波动,因而不回引起计算谱中假的极大值或极小值,而且高斯窗频率窗函数的主瓣比指数窗的主瓣窄,分辨率比指数窗有所提高。
2021科大讯飞车辆贷违预测大赛冠军源码+全部资料.zip [资源说明] 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 欢迎下载,学习使用!
AI图像处理工具包-一键抠图、背景切换、旧照片修复、人像漫画化、视频卡通化(Python+OpenCV+Dlib+TensorFlow).zip [资源说明] 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 欢迎下载,学习使用!
基于java+springboot+vue+mysql的远程教育网站设计与实现.docx
毕业设计资料,计算机毕业设计,源码,毕业论文,毕业答辩,答辩PPT,Java毕业设计,php毕业设计,ASP.NET毕业设计,毕业指导,计算机作业,php作业,java作业,ASP.NET作业,编程作业,管理系统,网站,app,毕业设计学习,Java学习,php学习,ASP.NET学习,java课程,php课程,ASP.NET课程,答辩技巧,SQLSERVER数据库,Mysql数据库,jdbc,SSM框架,SpringBoot框架,Html5,小程序
蓝牙串口助手,可以连接HC-05等蓝牙模块,实现单片机设备与手机通讯,安卓手机,蓝牙调试助手,具有按键功能!
TriLib 2 是一个跨平台的运行时 3D 模型导入器
人力资源+大数据+薪酬报告+涨薪调薪,在学习、工作生活中,越来越多的事务都会使用到报告,通常情况下,报告的内容含量大、篇幅较长。那么什么样的薪酬报告才是有效的呢?以下是小编精心整理的调薪申请报告,欢迎大家分享。相信老板看到这样的报告,一定会考虑涨薪的哦。