CDI 1.1: Должен ли @Observed @Initialized(TransactionScoped.class) работать?

CDI 1.1: есть @Observes @Initialized(TransactionScoped.class) должен работать?

@ApplicationScoped
public class MyClass {
public void processConversationScopedInit(@Observes 
  @Initialized(TransactionScoped.class) Object payload) {}

  public void processConversationScopedDestroyed(@Observes 
  @Destroyed(TransactionScoped.class) Object payload) {}
}

Это стандартная область в CDI 1.1, но она явно отсутствует в этом списке здесь:

http://www.next-presso.com/2014/06/you-think-you-know-everything-about-cdi-events-think-again/

Я не могу заставить его работать в TomEE 7.0.5/OpenWebBeans, и мне любопытно, если это просто упущение в спецификации. Спасибо!

2 ответа

Решение

@TransactionScoped не является стандартной областью в том смысле, что она не реализована CDI (или, ну, в общем, подразумевает CDI). Это исходит от JTA, и это также имеет свой пакет - javax.transaction,

При этом, он должен вести себя как все остальные @NormalScope контексты и, следовательно, должны уволить @Initialized события для вас, чтобы наблюдать. Хотя обратите внимание, что спецификация CDI только рекомендует это, говоря:

Портативные расширения рекомендуется вызывать событие с квалификатором @Initialized(X.class) при инициализации пользовательского контекста и событие с квалификатором @Destroyed(X.class) при уничтожении пользовательского контекста, где X - связанный тип области действия с контекстом. Подходящая полезная нагрузка события должна быть выбрана.

Я не пробовал это сам, но я бы поспорил, что это работает для большинства современных реализаций. Опять же, вы находитесь в CDI 1.1, который сейчас довольно древний.

Да, так как это не требуется и потенциально добавляет значительные накладные расходы, которых можно избежать, используя уже предоставленное событие области запроса, тогда это не было добавлено в tomee.

Проблема, когда вы начинаете реализовывать что-то из javax.*, Которая не указана, заключается в том, что пользователи будут думать, что это портативно, когда это на самом деле неправильно, поэтому лучше соблюдать спецификацию, когда это возможно, ИМХО.

Другие вопросы по тегам