我正在使用/预期以下技术堆栈:

  • 日本科学基金会
  • 接缝
  • jBPM
  • 春天

当然,我希望 Seam 能够直接访问 Spring beans,并且已经完成了这么多工作。我现在想进入 jBPM 并开发一个概念验证流程定义,该定义访问 Spring bean 来执行操作并做出决策。

为了促进关注点分离并确保进程可以在类路径中没有 Seam 的情况下运行,我想要一个不允许访问所有 Seam 托管组件的解决方案。

我知道 Seam 使用定制的 EL 解析器,但除此之外,我该从哪里开始呢?

有帮助吗?

解决方案

可以对 VariableResolver 进行子类型化并在 jbpm.cfg.xml 文件中指定您的子类型。这可以允许 #{myBean} 解析为您的 bean。

<jbpm-configuration>

    <bean name="jbpm.variable.resolver" class="com.your.jbpm.VariableResolver" singleton="true" >
        <field name="backingVariableResolver"><ref bean="jbpm.variable.backingResolver" /></field>
    </bean>
    <bean  name="jbpm.variable.backingResolver" class="org.jbpm.jpdl.el.impl.JbpmVariableResolver" singleton="true" />

</jbpm-configuration>

但对于从脚本和操作进行访问,方法是注入 瞬态变量 进入流程实例,请记住您可能需要解决错误 JBPM-304, ,例如子键入脚本并调整关联的休眠映射文件。在向每个流程实例发出每个信号之前,必须重复此注入。

这些技术可用于确保您能够访问您想要访问的 bean,但并不能真正为您提供自定义 EL。这需要对 JbpmExpressionEvaluator 类进行一些认真的修改。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top