当多个可用时,为CDI选择@Produces方法

时间:2014-04-09 11:55:38

标签: java-ee dependency-injection cdi jbpm

基本上,我需要一种方法来禁用一个(框架提供的)@Produces方法,转而使用我自己的@Produces方法。

更具体地说,我正在使用jBPM 6并试图让它在容器内正常工作。 HumanTaskServiceProducer使用流氓的EnvironmentFactory,它始终会生成新的Environment。由于某种原因,缓存了EnvironmentEnvironmentFactory的缓存代码。

这意味着jBPM选择JTA事务管理器而不是Container事务管理器。我正在尝试为正确设置环境而不是使用默认环境的任务服务提供我自己的生产者。

有谁知道指定生产者使用的方法?希望我尝试将其指定为@Alternative,但这似乎没有奏效。要么是,要么是在HumanTaskServiceProducer上指定环境的方法。

1 个答案:

答案 0 :(得分:7)

如果您使用CDI 1.0,则替代品不能在不同的bean档案中工作。

否则(在CDI 1.1+中)要小心激活指定here的替代方案。

最适合您的解决方案可能是专攻您的制作人。你必须:

  • 继承包含原始生成器方法的类
  • 覆盖生产者方法和
  • 使用@Specializes注释。

您可以在the spec找到有关制作人专业化的所有信息。

如果您不能使用专业化,那么您的最后一个解决方案是创建一个可移植扩展,从bean发现中排除包含原始生成器的类(在ProcessAnnotatedType event上创建一个观察者并在事件上调用veto()方法),这样您的生产者就不会与原始生产者发生冲突。