2014-04-09 4 views
1

В принципе, мне нужен способ отключить один (прилагаемый фрейм) метод @Produces в пользу использования моего собственного метода @Produces.Выбор метода @Produces для CDI, когда доступно более одного

В частности, я работаю с jBPM 6 и пытаюсь заставить его работать правильно внутри контейнера. В HumanTaskServiceProducer используется слюна EnvironmentFactory, которая всегда генерирует новый Environment. Код для кэширования Environment в том, что EnvironmentFactory закомментирован по некоторым причинам.

Это означает, что jBPM берет менеджера транзакций JTA, а не менеджера транзакций контейнера. Я пытаюсь предоставить собственный производитель для службы задач, который правильно устанавливает среду вместо использования по умолчанию.

Кто-нибудь знает, как указать производителя для использования? В надежде, я попытался указать его как @Alternative, но это, похоже, не сработало. Либо это, либо способ указать среду на HumanTaskServiceProducer.

ответ

5

Если вы используете CDI 1.0, альтернативы не работают в разных архивах бобов.

В противном случае (в CDI 1.1+) будьте осторожны, чтобы активировать вашу альтернативу, указанную here.

Лучшее решение для вас, вероятно, специализируется на вашего производителя. Вы должны будете:

  • наследует класс, содержащий оригинальный метод производителя,
  • переопределить метод производителя и
  • аннотированных его @Specializes.

Вы найдете всю информацию о специализации производителя в the spec.

Если вы не можете использовать специализацию, ваше последнее решение создать портативного расширение, исключающего класс, содержащий оригинальный производитель от открытия боба (создать наблюдатель на ProcessAnnotatedType event и вызовите veto() метод на событии), так ваш производитель не будет в конфликте с оригиналом.

+0

Удивительно, что сработало отлично. Спасибо, я пошел со специализацией производителя. –

Смежные вопросы