Grails 底层是 spring 的 mvc, jbpm4 也内置了 与 spring 集成的支持,因此 在 Grails 中集成进 jbpm4 还是比较简单的。
- 拷贝jbpm4.jar 及 依赖包 到 应用的 lib 下
- 将 jbpm.defaut.xml 改名为 jbpm.cfg.xml 拷贝到 grails-app/conf 目录下(可以是任意其它文件名)
- 在 resources.groovy(grails-app/conf/spring目录下,如果没有则新建一个) 中添加
jbpmConfiguration(org.jbpm.pvm.internal.cfg.SpringConfiguration, "jbpm.cfg.xml"){
}
- 同样预先配置好需要用的service
processEngine(org.jbpm.api.ProcessEngine){ bean ->
bean.factoryBean = "jbpmConfiguration"
bean.factoryMethod = "buildProcessEngine"
}
repositoryService(org.jbpm.api.RepositoryService){ bean->
bean.factoryBean = "processEngine"
bean.factoryMethod = "getRepositoryService"
}
executionService(org.jbpm.api.ExecutionService){ bean->
bean.factoryBean = "processEngine"
bean.factoryMethod = "getExecutionService"
}
commandService(org.jbpm.pvm.internal.cmd.CommandService, org.jbpm.pvm.internal.cmd.CommandService.class){ bean->
bean.factoryBean = "processEngine"
bean.factoryMethod = "get"
}
taskService(org.jbpm.api.TaskService){ bean->
bean.factoryBean = "processEngine"
bean.factoryMethod = "getTaskService"
}
historyService(org.jbpm.api.HistoryService){ bean->
bean.factoryBean = "processEngine"
bean.factoryMethod = "getHistoryService"
}
identityService(org.jbpm.api.IdentityService){ bean->
bean.factoryBean = "processEngine"
bean.factoryMethod = "getIdentityService"
}
managementService(org.jbpm.api.ManagementService){ bean->
bean.factoryBean = "processEngine"
bean.factoryMethod = "getManagementService"
}
- 在jbpm.cfg.xml 中 标准事务拦截器修改为 spring 的事务拦截器
<!--
<standard-transaction-interceptor />
-->
<spring-transaction-interceptor current="true" />
- 同样在jbpm.cfg.xml 中,将 原来 transaction-context 中的 transaction 改为 hibernate session
<!--
<transaction />
-->
<hibernate-session current="true" close="false"/>
- 在hibernate.cfg.xml中(grails-app/conf/hibernate目录下,没有则新建一个),添加 jbpm 的 cfg 文件
<!DOCTYPE hibernate-configuration SYSTEM
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<mapping resource="jbpm.execution.hbm.xml" />
<mapping resource="jbpm.repository.hbm.xml" />
<mapping resource="jbpm.jpdl.hbm.xml" />
<mapping resource="jbpm.task.hbm.xml" />
<mapping resource="jbpm.history.hbm.xml" />
</session-factory>
</hibernate-configuration>
- 注释掉对jbpm 对 hibernate 的配置
<!--
<hibernate-configuration>
<cfg resource="jbpm.hibernate.cfg.xml" />
</hibernate-configuration>
<hibernate-session-factory />
-->
配置完成
这样配置完后,jbpm不再采用自己的事务,而是采用 spring 管理的事务,即要求 事务必须已经存在,因此在 grails中使用时,对 jbpm service 调用 必须在 grails 的 service 中进行。
完整的 参考 jbpm.cfg.xml 内容如下
<?xml version="1.0" encoding="UTF-8"?>
<jbpm-configuration>
<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" />
-->
<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 />
-->
<command-service>
<retry-interceptor />
<environment-interceptor />
<!--
<standard-transaction-interceptor />
-->
<spring-transaction-interceptor current="true" />
</command-service>
<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 />
-->
<hibernate-session current="true" close="false"/>
</transaction-context>
</jbpm-configuration>
分享到:
相关推荐
Grails兼容广泛的Java应用服务器,包括但不限于Apache Tomcat、Jetty、Resin等,这使得Grails应用能在不同的环境中无缝运行。 8. **创建工件** Grails提供了多种命令用于生成模型类、控制器、服务等工件,如`...
在 Grails 中,MVC 模式用于组织应用程序的结构。Model 负责业务逻辑和数据管理,View 负责显示用户界面,Controller 处理用户请求并协调 Model 和 View 的交互。 **GORM (Grails Object-Relational Mapping)** ...
此外,还可以配置自动数据库移植功能,它会在应用启动时根据域类(domain class)结构自动创建数据库表。 Grails的命令行工具非常强大,它支持创建Gant脚本来自动化重复的构建任务。用户可以创建可复用的Grails脚本...
本篇文章将深入探讨Grails在企业Web开发中的应用以及部署策略。 一、Grails简介 Grails是一种模型-视图-控制器(MVC)框架,其设计理念是“约定优于配置”,大大简化了开发流程。它构建在Spring Boot之上,内置了...
4. 版本兼容:虽然grails-fckeditor-0.9.5是较旧的版本,但理解其工作原理有助于我们理解如何集成第三方库,以及在更新到新版本时需要注意的问题。 总结,Grails框架及其中文文档为开发者提供了强大的工具和丰富的...
- **环境搭建**:首先,需下载Grails程序并设置环境变量`GRAILS_HOME`,同时将`%GRAIS_HOME%\bin`添加至系统PATH变量中。 - **创建应用**:使用`grails create-app Contact`命令可快速生成名为“Contact”的应用框架...
同时,由于Groovy运行在Java虚拟机(JVM)上,Grails应用可无缝集成Java平台,利用Java的成熟库和应用服务器,确保了系统的稳定性和扩展性。 Grails遵循经典的MVC设计模式,其组件包括: 1. **Domain Class**:...
在Grails中,领域模型是应用程序的核心,它代表了业务数据和逻辑。通过定义Groovy类并使用Grails的GORM(Grails Object Relational Mapping)来与数据库交互,可以轻松实现数据持久化。 4. **控制器(Controllers...
Grails建立在这些概念之上,它极大地降低了在Java平台上建立Web应用的复杂性。与那些框架不同的是,Grails是构建在现有的像Spring、Hibernate这样的Java技术之上。 Grails是个一栈式开发框架,它尝试通过核心技术...
描述中的"javascript and ajax using in grails"强调了JavaScript在Grails应用中的重要性。JavaScript是实现Ajax交互的主要语言,通常用于处理用户交互和动态更新页面。Grails提供了与jQuery等流行JavaScript库集成...
Grails1.1最新 中文 文档 当今的Java Web开发技术...Grails建立在这些概念之上,它极大地降低了在Java平台上建立Web应用的复杂性。与那些框架不同的是,Grails是构建在现有的像Spring、Hibernate这样的Java技术之上。
- 在Eclipse的classpath variable中设置`GRAILS_HOME`变量,指向Grails的安装目录,避免在创建或导入项目时手动添加库文件。 - 在`Windows -> Preferences -> Groovy`中,勾选"Disable Groovy Compiler Generating...
4. **命令行工具**:Grails 提供强大的命令行工具,支持创建项目、运行应用、生成代码等任务,大大提升了开发效率。 5. **构建工具**:Grails 使用Gradle作为其构建工具,允许自定义构建流程和依赖管理。 **Grails...
在Grails框架中,文件的上传与下载是常见的功能需求,尤其在开发涉及大量文档、图片或媒体文件处理的应用程序时。以下是对Grails中上传和下载操作的深入解析,包括其实现机制、代码示例及注意事项。 ### 文件上传 ...
- **运行应用**:通过`grails run-app`启动应用,在浏览器中查看结果。 #### 七、Grails与Java生态系统的整合 - **与Spring框架集成**:利用Spring管理依赖注入,简化对象管理。 - **与Hibernate集成**:通过...
在本文中,我们将深入探讨如何使用Groovy on Grails(简称Grails)和jQuery来构建一个功能丰富的Web日历应用程序。Grails是一个基于Java平台的全栈式框架,它简化了Web应用的开发过程,而jQuery则是一款强大的...