我正在使用/期待以下技术堆栈:
- JSF
- 接缝
- jBPM
- 春天
当然,我希望 Seam 可以直接访问 Spring bean,并且可以正常工作。我现在想进入 jBPM 并开发一个概念验证流程定义,该流程定义访问 Spring bean 以执行操作和做出决策。
为了促进关注点分离并确保进程可以在类路径中没有 Seam 的情况下运行,我想要一个不允许访问所有 Seam 托管组件的解决方案。
我知道 Seam 使用定制的 EL 解析器,但除此之外,我从哪里开始?
我正在使用/期待以下技术堆栈:
当然,我希望 Seam 可以直接访问 Spring bean,并且可以正常工作。我现在想进入 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 类进行一些严重的黑客攻击。