- 浏览: 468211 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
yuan_bin1990:
您好,请问下demo如何运行啊,准备研究研究,但不知道入口啊。 ...
ssh2(struts2+spring2.5+hibernate3.3)自动生成代码程序 -
luyulong:
[b][/b][i][/i][ ...
jQuery进度条插件 jQuery progressBar -
txin0814:
mark..
读取文件目录 -
vurses:
[align=center][color=red][size= ...
include 与 jsp:include区别 -
Roshan2:
http://lijiejava.iteye.com/blog ...
Spring AOP 入门实例
如果不结合其他的框架进行整个开发(如:spring、hibernate),JBPM4也有自己的一套IOC容器,能后将自己的服务配置到IOC容器中,能够很容易的运行容器所配置的服务,
这样它也能够在代码中减少一陀一陀的工厂类等代码的调用,降低了偶核性,但是如果结合spring框架来进行整个开发的话,那么就有两个容器,两个SessionFactory,但是系统中只考虑一个容器来
对服务进行管理, 那么我们就要将jbpm4的服务移植到spring的IOC容器中,让spring来进行统一管理,这样通过spring的容器来管理服务、事务。
在网上,不管是百度、还是谷歌 搜索了一下,截至到目前(2009-08-29),没有搜索出一个JBPM4结合其他框架的完成例子,都是一些简单的介绍,而且所有文章大同小异,虽然文章上千章,但是好像出自
一个之手,但是此人也只是大概讲解了一下,可能有些人会认为用JBPM4结合其他框架进行整合是非常简单,那么你的想法是错误的,JBPM4整合其他框架对JBPM4的IOC理解要非常清楚,同时,要对部分源代码进行了解,才可能一步一步的搭建起来框架,下面介绍下我以struts2+spring2.5+hibernate3.4+jbpm4来搭建的一个框架,并且成功部署的过程
ssh2的框架搭建我这里就不啰嗦了,我主要就这个框架的基础上来整合jbpm4
第一步:加入jbpm4的jpdl插件,这个步骤非常简单,但是可能会出现下面的错误
把jbpm4加入到项目中遇到的问题:
无法导入插件jpdl(导入插件后没有出现可视化流程操作器的入口,无法进行可视化流程建立)
解决方法:
先前本人使用myeclipse6.0.1,在此版本上本人做过JBPM3的项目,在做JBPM4时,很自然的想到在该IDE上进行JBPM4的开发,但是一直都无法成功江JBPM4的jpdl插件安装成功,因此
不断的换各种安装插件的方式,浪费了很多时间,后无意在myclipse7.1.1中尝试安装jpdl插件,竟然成功,后才发现myeclipse6不支持jbpm4,最终本人选择IDE myclipse7.1.1来进行
开发.
第二步:创建JBPM4的数据库文件、JBPM4相关jar包、JBPM4的相关配置文件
数据库文件:解压下载的jbpm4.0, jbpm4.0根目录下的db\schema.scripts目录下,这里存放的是jbpm4数据库文件的脚本,根据自己的需要选择相应数据库脚本文件进行导入
JBPM4的jar包:jbpm4.0根目录下jbpm.jar
jbpm4-spring.jar,这两个jar文件内容大致相同,但是某些类也是对方所不具有的
lib目下的相关jar包(不要全部导入,因为这里包含hibernate,还有一些公共的jar包,可能你的工程中已经含有这些jar包,根据需要导入相关的jar包即可)
JBPM4的相关配置文件:
鉴于大家jbpm对配置文件位置的存放不清楚,以及因为版本的不同,造成文件内容和文件名不一样,所以对需要在项目中导入的文件及内容(基本配置)做了一个总结:
jbpm.cfg.xml,内容如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <jbpm-configuration>
- <import resource="jbpm.spring.default.cfg.xml" />
- <import resource="jbpm.spring.hibernate.cfg.xml" />
- <import resource="jbpm.jpdl.cfg.xml" />
- <import resource="jbpm.identity.cfg.xml" />
- <!-- Job executor is excluded for running the example test cases. -->
- <!-- To enable timers and messages in production use, this should be included. -->
- <!--
- <import resource="jbpm.jobexecutor.cfg.xml" />
- -->
- <import resource="jbpm.mail.templates.examples.xml" />
- </jbpm-configuration>
<?xml version="1.0" encoding="UTF-8"?> <jbpm-configuration> <import resource="jbpm.spring.default.cfg.xml" /> <import resource="jbpm.spring.hibernate.cfg.xml" /> <import resource="jbpm.jpdl.cfg.xml" /> <import resource="jbpm.identity.cfg.xml" /> <!-- Job executor is excluded for running the example test cases. --> <!-- To enable timers and messages in production use, this should be included. --> <!-- <import resource="jbpm.jobexecutor.cfg.xml" /> --> <import resource="jbpm.mail.templates.examples.xml" /> </jbpm-configuration>
jbpm.mail.properties,文件内容:
mail.smtp.host localhost mail.smtp.port 2525 mail.from noreply@jbpm.org
jbpm.mail.templates.examples.xml,文件内容:
- <?xml version="1.0" encoding="UTF-8"?>
- <jbpm-configuration>
- <process-engine-context>
- <mail-template name="rectify-template">
- <to addresses="${addressee}" />
- <cc users="bb" groups="innerparty" />
- <bcc groups="thinkpol" />
- <subject>rectify ${newspaper}</subject>
- <text>${newspaper} ${date} ${details}</text>
- </mail-template>
- </process-engine-context>
- </jbpm-configuration>
<?xml version="1.0" encoding="UTF-8"?> <jbpm-configuration> <process-engine-context> <mail-template name="rectify-template"> <to addresses="${addressee}" /> <cc users="bb" groups="innerparty" /> <bcc groups="thinkpol" /> <subject>rectify ${newspaper}</subject> <text>${newspaper} ${date} ${details}</text> </mail-template> </process-engine-context> </jbpm-configuration>
jbpm.spring.default.cfg.xml,文件内容:
- <?xml version="1.0" encoding="UTF-8"?>
- <jbpm-configuration>
- <process-engine-context>
- <repository-service />
- <repository-cache />
- <execution-service />
- <history-service />
- <management-service />
- <identity-service />
- <task-service />
- <!--
- <hibernate-configuration>
- <cfg resource="jbpm.hibernate.cfg.xml" />
- </hibernate-configuration>
- <hibernate-session-factory />
- -->
- <script-manager default-expression-language="juel"
- default-script-language="juel"
- read-contexts="execution, environment, process-engine"
- write-context="">
- <script-language name="juel" factory="org.jbpm.pvm.internal.script.JuelScriptEngineFactory" />
- </script-manager>
- <authentication />
- <id-generator />
- <types resource="jbpm.variable.types.xml" />
- <address-resolver />
- <business-calendar>
- <monday hours="9:00-12:00 and 12:30-17:00"/>
- <tuesday hours="9:00-12:00 and 12:30-17:00"/>
- <wednesday hours="9:00-12:00 and 12:30-17:00"/>
- <thursday hours="9:00-12:00 and 12:30-17:00"/>
- <friday hours="9:00-12:00 and 12:30-17:00"/>
- <holiday period="01/07/2008 - 31/08/2008"/>
- </business-calendar>
- <mail-template name='task-notification'>
- <to users="${task.assignee}"/>
- <subject>${task.name}</subject>
- <text><![CDATA[Hi ${task.assignee},
- Task "${task.name}" has been assigned to you.
- ${task.description}
- Sent by JBoss jBPM
- ]]></text>
- </mail-template>
- <mail-template name='task-reminder'>
- <to users="${task.assignee}"/>
- <subject>${task.name}</subject>
- <text><![CDATA[Hey ${task.assignee},
- Do not forget about task "${task.name}".
- ${task.description}
- Sent by JBoss jBPM
- ]]></text>
- </mail-template>
- </process-engine-context>
- <transaction-context>
- <repository-session />
- <db-session />
- <message-session />
- <timer-session />
- <history-session />
- <mail-session>
- <mail-server>
- <session-properties resource="jbpm.mail.properties" />
- </mail-server>
- </mail-session>
- </transaction-context>
- </jbpm-configuration>
<?xml version="1.0" encoding="UTF-8"?> <jbpm-configuration> <process-engine-context> <repository-service /> <repository-cache /> <execution-service /> <history-service /> <management-service /> <identity-service /> <task-service /> <!-- <hibernate-configuration> <cfg resource="jbpm.hibernate.cfg.xml" /> </hibernate-configuration> <hibernate-session-factory /> --> <script-manager default-expression-language="juel" default-script-language="juel" read-contexts="execution, environment, process-engine" write-context=""> <script-language name="juel" factory="org.jbpm.pvm.internal.script.JuelScriptEngineFactory" /> </script-manager> <authentication /> <id-generator /> <types resource="jbpm.variable.types.xml" /> <address-resolver /> <business-calendar> <monday hours="9:00-12:00 and 12:30-17:00"/> <tuesday hours="9:00-12:00 and 12:30-17:00"/> <wednesday hours="9:00-12:00 and 12:30-17:00"/> <thursday hours="9:00-12:00 and 12:30-17:00"/> <friday hours="9:00-12:00 and 12:30-17:00"/> <holiday period="01/07/2008 - 31/08/2008"/> </business-calendar> <mail-template name='task-notification'> <to users="${task.assignee}"/> <subject>${task.name}</subject> <text><![CDATA[Hi ${task.assignee}, Task "${task.name}" has been assigned to you. ${task.description} Sent by JBoss jBPM ]]></text> </mail-template> <mail-template name='task-reminder'> <to users="${task.assignee}"/> <subject>${task.name}</subject> <text><![CDATA[Hey ${task.assignee}, Do not forget about task "${task.name}". ${task.description} Sent by JBoss jBPM ]]></text> </mail-template> </process-engine-context> <transaction-context> <repository-session /> <db-session /> <message-session /> <timer-session /> <history-session /> <mail-session> <mail-server> <session-properties resource="jbpm.mail.properties" /> </mail-server> </mail-session> </transaction-context> </jbpm-configuration>
jbpm.spring.hibernate.cfg.xml,文件内容:
- <?xml version="1.0" encoding="UTF-8"?>
- <jbpm-configuration>
- <process-engine-context>
- <command-service>
- <retry-interceptor />
- <environment-interceptor />
- <spring-transaction-interceptor />
- </command-service>
- </process-engine-context>
- <transaction-context>
- <transaction />
- <hibernate-session />
- </transaction-context>
- </jbpm-configuration>
<?xml version="1.0" encoding="UTF-8"?> <jbpm-configuration> <process-engine-context> <command-service> <retry-interceptor /> <environment-interceptor /> <spring-transaction-interceptor /> </command-service> </process-engine-context> <transaction-context> <transaction /> <hibernate-session /> </transaction-context> </jbpm-configuration>
logback.xml,文件内容:
- <configuration>
- <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</Pattern>
- <!--
- <pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
- -->
- </layout>
- </appender>
- <root level="info">
- <appender-ref ref="STDOUT" />
- </root>
- </configuration>
<configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</Pattern> <!-- <pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern> --> </layout> </appender> <root level="info"> <appender-ref ref="STDOUT" /> </root> </configuration>
sql-error-codes.xml,文件内容:
该文件内容较多,搜索一下jbpm4.0包下的文件,应该都有
上述文件存放在src目录下
第三步:添加JBPM4的服务到spring IOC容器中
1.jbpm.spring.default.cfg.xml(jbpm.spring.default.cfg.xml)配置文件进行修改,将下面的部分配置注释掉
<hibernate-configuration>
<cfg resource="jbpm.hibernate.cfg.xml" />
</hibernate-configuration>
<hibernate-session-factory />
注释的部分是在jBPM4中创建了sessionFactory,因为已经有了spring管理sessionFactory,因此我们只需要一个sessionFactory。既然要将jBPM4与Spring的整合,那就希望由Spring来统一管理 sessionFactory和事务,在Spring的配置文件中构造一个sessionFactory。一切由它与外部交互.
2.上面已经屏蔽了jbpm4的sessionFactory,那么此处要新建立一个ProcessEngineFactoryBean类,该类用来初始化JBPM4的相关配置文件、工作流引擎,并且把sessionFactory的创建交给spring的容器 进行管理,在ProcessFactoryBean中创建一个SpringConfiguration,然后将sessionFactory放入 SpringConfiguration中,再从SpringConfiguration得到processEngine,代码如下:
- public class ProcessEngineFactoryBean implements FactoryBean,
- InitializingBean, DisposableBean, ApplicationContextAware {
- private String jbpmConfigurationLocation = "jbpm.cfg.xml";
- private SessionFactory sessionFactory;
- private ApplicationContext applicationContext;
- private ProcessEngine processEngine;//jbpm4的流程引擎接口,所有的功能服务都是从这里获取的,包括RespoistoryService、ExecutionService
- public Object getObject() throws Exception {
- return processEngine;
- }
- @SuppressWarnings("unchecked")
- public Class getObjectType() {
- return ProcessEngine.class;
- }
- public boolean isSingleton() {
- return true;
- }
- public void afterPropertiesSet() {
- SpringConfiguration cfg = new SpringConfiguration(jbpmConfigurationLocation);
- cfg.setApplicationContext(applicationContext);
- cfg.setSessionFactory(sessionFactory);
- this.processEngine = cfg.buildProcessEngine();
- }
- public void destroy() {
- this.processEngine = null;
- this.sessionFactory = null;
- }
- public void setJbpmConfigurationLocation(
- String jbpmConfigurationLocation) {
- this.jbpmConfigurationLocation = jbpmConfigurationLocation;
- }
- public void setSessionFactory(SessionFactory sessionFactory) {
- this.sessionFactory = sessionFactory;
- }
- public void setApplicationContext(
- ApplicationContext applicationContext) throws BeansException {
- this.applicationContext = applicationContext;
- }
- }
public class ProcessEngineFactoryBean implements FactoryBean, InitializingBean, DisposableBean, ApplicationContextAware { private String jbpmConfigurationLocation = "jbpm.cfg.xml"; private SessionFactory sessionFactory; private ApplicationContext applicationContext; private ProcessEngine processEngine;//jbpm4的流程引擎接口,所有的功能服务都是从这里获取的,包括RespoistoryService、ExecutionService public Object getObject() throws Exception { return processEngine; } @SuppressWarnings("unchecked") public Class getObjectType() { return ProcessEngine.class; } public boolean isSingleton() { return true; } public void afterPropertiesSet() { SpringConfiguration cfg = new SpringConfiguration(jbpmConfigurationLocation); cfg.setApplicationContext(applicationContext); cfg.setSessionFactory(sessionFactory); this.processEngine = cfg.buildProcessEngine(); } public void destroy() { this.processEngine = null; this.sessionFactory = null; } public void setJbpmConfigurationLocation( String jbpmConfigurationLocation) { this.jbpmConfigurationLocation = jbpmConfigurationLocation; } public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } public void setApplicationContext( ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } }
并且在Spring配置文件中加入如下配置:
<bean id="processEngine" class="com.bestsoft.ssh.service.impl.flow.ProcessEngineFactoryBean">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
通过上述我们创建了工作流引擎,那么这个时候我们可以通过配置来管理JBPM4中的服务(ProcessEngine接口中的服务,如:创建流程的服务、执行流程的服务等),这样做的目的是不想一陀一陀的工厂 类在代码中出现,由spring的注入功能来实现,如下配置(在spring配置文件中):
<bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />
<bean id="executionService" factory-bean="processEngine" factory-method="getExecutionService" />
<bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" />
<bean id="managementService" factory-bean="processEngine" factory-method="getManagementService" />
<bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" />
<bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService" />
添加JBPM4的服务到spring IOC容器中错误:
注意:所有的jbpm4的配置文件必须在src目录下,并且不能有独立的目录,因为在初始化发布流程的代码中
ProcessEngine processEngine = new Configuration().buildProcessEngine();
因为JbpmConfiguration extends Configuration implements Context, ProcessEngine, EnvironmentFactory 因此会
调用JbpmConfiguration类中buildProcessEngine()方法来创建ProcessEngine来得到JBPM4的服务,在这个方法中,有这样一段代码
if (!isConfigured) {
setResource("jbpm.cfg.xml");
}
它会去src下找jbpm.cfg.xml文件,如果配置文件不在src目录下,那么就会找不到配置文件(jbpm.cfg.xml)
第四步:加入JBPM4的实体关系映射文件:
<property name="mappingLocations">
<list>
<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.jpdl.hbm.xml</value>
<value>classpath*:jbpm.identity.hbm.xml</value>
</list>
</property>
可能会出现的问题: 启动中如果提示:找不到org.jbpm.jpdl.internal.model.JpdlExecution,那么这个时候,应该添加一个jbpm4-spring.jar文件,因为该jar中有此实体
第五步:
请务必配置事务,JBPM4已经将事务改成从当前的Threadlocal中获得,所以jBPM4是必须当前有事务,如果我没有创建事务的话,在使用 processEngine时就会说事务没有启动。
因为该文章是在成功运行后书写的,可能某些步骤漏写,或者描述不清楚,而无法成功整合,导致报错,请大家把报错信息贴出来,让我对文章作相应的修改,让参照着能够成功整合运行。
发表评论
-
spring分布式事务(jotm)
2010-06-17 22:19 1788分布式事务是指操作多个数据库之间的事务,在tomcat下,是没 ... -
Hibernate分页查询与泛型
2010-06-17 18:08 1052JE有两篇文章,关于分页查询 与泛型 的,写的很好.这里收藏一 ... -
Struts+Spring+Hibernate实现上传下载
2010-06-16 20:44 758Struts+Spring+Hibernate实现 ... -
ssh中利用pager-taglib和filter进行分页
2010-05-27 10:04 1651在ssh架构中利用pager-taglib和filter根据用 ... -
STRUTS2 SSL的一个好用插件
2010-05-18 13:52 1048最近遇到问题了,要用到SSL,比如某个连接https://xx ... -
struts2 + spring 2.5 + ibatis
2010-05-17 11:29 815很久没有做struts2 + spring 2.5 + iba ... -
Spring事务详解
2010-04-13 16:23 850Spring中事务的定义: 一 ... -
ssh整合分页
2010-01-26 16:57 1557dao 方法: Java代码 /** ... -
ssh2(struts2+spring2.5+hibernate3.3)自动生成代码程序
2009-09-07 23:00 1620为什么需要自动生成代 ...
相关推荐
【jbpm4整合struts2+spring2.5+hibernate3.3】的知识点详解 jbpm4是一款开源的工作流管理系统,它允许开发者设计、执行和管理业务流程。在实际开发中,通常需要将其与其他流行的技术框架,如Struts2、Spring和...
jbpm4整合struts2+spring2[1].5+hibernate3.3
【标题】"jbpm4.3+struts2+spring3+hibernate3整合(一)"涉及的是一个常见的Java企业级应用架构整合实践,其中jbpm4.3是业务流程管理(Business Process Management)框架,Struts2是MVC(Model-View-Controller)...
jbpm负责流程管理,Spring2.5作为整体的容器,管理各个组件的生命周期和依赖关系,Hibernate3.0处理数据库交互,而Struts2.0则作为前端控制器,处理用户请求并展示结果。这样的组合在当时的开发环境中非常流行,因为...
Jbpm+Spring+hibernate+struts2+mysql+c3p0项目部署
在这个“struts2+spring+hibernate+jbpm工作流实例”中,主要展示了如何利用这些技术实现一个公文审批流转的过程。 首先,Struts2是一个基于MVC设计模式的Web应用框架,它负责处理HTTP请求,并将这些请求映射到相应...
【JBPM4.4+Hibernate3.5.4+Spring3.0.4+Struts2.1.8整合】的整个过程涉及到多个关键组件的集成,这些组件都是Java企业级开发中的重要部分。首先,JBPM(Business Process Management)是一个开源的工作流引擎,它...
JBPM4.3 整合struts2 hibernate spring 请假实例, lib下载,在我的另外资源,路径: http://download.csdn.net/source/2485359 http://download.csdn.net/source/2485373 http://download.csdn.net/source/2485385 ...
标题中的"spring+struts1+hibernate+jbpm实例"揭示了这是一个基于Java技术栈的Web应用程序开发实例,其中涉及四大核心技术:Spring、Struts1、Hibernate和JBPM。接下来,我们将深入探讨这些技术及其在实际项目中的...
这是一个基于开源技术栈构建的图书管理系统,主要使用了Struts2.1.8、Hibernate3.3、Spring2.5.6、ExtJS3.2和Jbpm4.1等组件。这些技术和框架在2000年代末至2010年代初是非常流行的,它们各自承担着不同的职责,共同...
在这个“基于struts+spring+hibernate+jbpm的外贸服装企业的工作流系统”中,开发者可能设计了以下功能: 1. **用户管理**:包括用户注册、登录、权限管理等,确保不同角色的用户只能访问其权限范围内的功能。 2. *...
这是一个基于Java技术栈,采用Spring、Struts、Hibernate、jbpm和DWR等多种框架整合开发的OA(Office Automation)办公系统源码项目。这个系统的构建旨在实现企业的日常办公自动化,提高工作效率,简化工作流程,...
Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们的组合,通常被称为SSH(Struts2 + Spring + Hibernate)。这个"struts2+spring+hibernate简单的工作流系统"项目,很可能是用于构建一个企业级的人力...
本系统采用经典的SSH(Struts1.2、Hibernate3.0、Spring2)框架与DWR(Direct Web Remoting)技术进行构建,实现了后端与前端的高效交互。 **Struts1.2** 是一款基于MVC(Model-View-Controller)设计模式的Java ...
SSHJ (Spring、Struts2、Hibernate 和 jBPM) 是一个经典的 Java 开发框架组合,用于构建企业级的 Web 应用程序。这个集成项目是基于特定版本的这些技术,包括jbpm4.4(业务流程管理),spring2.5.6(依赖注入和事务...
在"struts+hibernate+spring+jbpm 智能工作流系统"中,这些框架协同工作,实现了以下关键功能: 1. **用户界面**:Struts 处理用户的输入和输出,提供友好的交互界面。 2. **数据持久化**:Hibernate 负责将业务对象...
在这个"struts+hibernate+spring+jbpm"的例子中,开发者可能创建了一个能够处理用户请求、持久化数据、执行业务流程并进行流程控制的应用。Ch 20 文件可能包含了这个示例的源代码或相关文档,包括Struts配置文件、...