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

Eva*_*les 3 dependency-injection jbpm java-ee cdi

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

更具体地说,我正在使用jBPM 6并试图让它在容器内正常工作.在HumanTaskServiceProducer使用流口水的EnvironmentFactory,它总是产生一个新的Environment.由于某种原因Environment,用于缓存内容的代码EnvironmentFactory被注释掉了.

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

有谁知道指定生产者使用的方法?希望我尝试将其指定为@Alternative,但这似乎没有奏效.无论是那种,还是指定环境的方式HumanTaskServiceProducer.

Ant*_*and 7

如果使用CDI 1.0,则替代方法不适用于不同的bean归档.

否则(在CDI 1.1+中)小心激活您在此处指定的替代方案.

对您而言,最好的解决方案可能是专注于您的制作人.你必须:

  • 继承包含原始生成器方法的类,
  • 覆盖生成器方法和
  • 用它注释@Specializes.

您将在规范中找到有关生产者专业化的所有信息.

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