从jBPM 4与Spring集成中学到的教训

当我负责将流程引擎集成到我的一个项目中时,我很快决定支持Activiti 。 Activiti是jBPM 4的下一个版本,与BPMN 2.0兼容,有据可查,并具有与Spring集成的现成模块。 不幸的是,由于命运的残酷折磨,我被自己的等级制度所否定(由于一些琐碎的原因,我不敢在这里写东西),我不得不使用jBPM。 本文试图列出我在这段史诗般的旅程中中学到的所有课程。

第1课:jBPM文档还不够

尽管jBPM 4有大量可用的文档 ,但是当您面对从头开始的任务时,这还不够,尤其是与Activiti自己的文档相比时。 例如,没有关于如何在Spring上下文中引导jBPM的提示。

第二课:不是因为没有文档,所以没有

jBPM 4包装了所有必需的组件以通过Spring引导jBPM,即使它对如何执行操作却保持沉默。 谷歌在这里没有帮助,因为每个人似乎都在推断自己的解决方案。出于好奇,我终于结束了这样做:

例如,以下是我发现一些声明为jBPM配置bean的方法:

<beanid="jbpmConfiguration"class="org.jbpm.pvm.internal.processengine.SpringHelper">
    <propertyname="jbpmCfg">
        <value> jbpm.cfg.xml </value>
    </property>
</bean>

起初,我害怕在包含可怕的``内部''一词的包中使用一个类,但这似乎是唯一的方法...

第3课:Google并不是您的真正朋友

是吗 实际上,我还发现了以下配置片段:

<beanid="jbpmConfiguration"class="org.jbpm.pvm.internal.cfg.SpringConfiguration">
    <constructor-argvalue="jbpm.cfg.xml"/>
</bean>

而且我认为,如果您搜索足够长的时间,就会找到许多其他方法来实现引擎配置。 这是缺少文档的问题:我们的开发人员是聪明的人,所以无论如何我们都会找到一种使之起作用的方法。

第4课:不要忘记配置日志记录框架

这个不是jBPM特有的,但是它很重要。 我浪费了很多时间,因为我愚蠢地忽略了警告我有关Log4J找不到其配置文件的消息。 创建了该死的东西之后,当我以编程方式部署新的jPDL文件时,我终于可以阅读到一条重要的信息:

WARNING: no objects were deployed!
Check if you have configured a correct deployer in your jbpm.cfg.xml file for the type of deployment you want to do.

第五课:真理在代码中

这是上一课的直接结果:由于我已经仔细检查了文件的扩展名为jbpm.xml,并且在我的配置中正确设置了jBPM部署程序,因此我必须了解代码的实际作用。 最后,这意味着我必须在IDE中获取源代码并进行调试,以观察幕后情况。 罪魁祸首是以下几行:

repositoryService.createDeployment().addResourceFromInputStream("test",newFileInputStream(file));

因为我在文件上使用了流,而不是流本身,所以我必须提供一个虚假的资源名称(“测试”)。 检查了后者的jpdl.xml文件扩展名,当然失败了。 但是通过阅读错误消息并不能很明显地看出来。

repositoryService.createDeployment().addResourceFromFile(file);

当然,所引用的文件具有正确的jbpm.xml扩展名,并且像一个魅力一样工作。

第6课:不要重新发明轮子

与第2课和第3课紧密结合,我发现了许多片段,它们充分描述了jbpm.cfg.xml配置文件。 尽管可以正常工作(嗯,我希望如此,因为我没有对其进行测试),但它过大,容易出错,并且可能表明了Google使用过多(相对于大脑使用)。 例如,在Google Code上发布的jbpm4-spring-demo项目提供了完整的配置文件 。 通过冗长的反复试验过程,我设法用更短的配置文件(重用现有的配置摘要)获得成功:

<?xml version="1.0" encoding="UTF-8"?>
<jbpm-configurationxmlns="http://jbpm.org/xsd/cfg">
    <importresource="jbpm.default.cfg.xml"/><!-- Default configuration -->
    <importresource="jbpm.tx.spring.cfg.xml"/><!-- Use Spring transaction management -->
    <importresource="jbpm.jpdl.cfg.xml"/><!-- Can deploy jPDL files -->
</jbpm-configuration>

第7课:jPBM可以访问Spring上下文

jBPM提供了java活动来调用一些任意的Java代码:它可以是EJB,但是我们也可以将Spring上下文连接到jBPM,以使前者可以被后者访问。 修改以前的配置很容易做到:

<jbpm-configurationxmlns="http://jbpm.org/xsd/cfg">
    <importresource="jbpm.default.cfg.xml"/>
    <importresource="jbpm.tx.spring.cfg.xml"/>
    <importresource="jbpm.jpdl.cfg.xml"/>
    <process-engine-context>
        <script-managerdefault-expression-language="juel"
            default-script-language="juel"
            read-contexts="execution, environment, process-engine, spring"
            write-context="">
            <script-languagename="juel"factory="org.jbpm.pvm.internal.script.JuelScriptEngineFactory"/>
        </script-manager>
    </process-engine-context>
</jbpm-configuration>

请注意,我尚未找到此代码段的现有代码段,欢迎反馈。

第8课:根据需要使用JTA事务管理器

您的jBPM数据库可能将拥有一个业务数据库。 在大多数公司中,DBA会轻轻地要求您将它们置于不同的架构中。 在这种情况下,不要忘记在某些XA数据源中使用JTA事务管理器来使用两阶段提交。 在测试中,最好使用相同的架构,并且基于数据源的简单事务管理器就足够了。

对于需要另一种方法来配置其jBPM / Spring集成的人员,以下是我以Maven / Eclipse格式使用的 。 我希望我的做法更加务实。 在所有情况下,请记住我是该产品的新手。

翻译自: https://blog.frankel.ch/lessons-learned-from-integrating-jbpm-4-with-spring/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值