Совместимы ли методы наблюдателя событий CDI с EJB?

У меня есть Singleton EJB (javax.ejb.Singleton version. Sigh.), На котором есть метод наблюдателя CDI. . Когда я пытаюсь развернуть это на Glassfish 3. 1 серверу не удается развернуть файл EAR без каких-либо реальных объяснений - просто говоря, что во время развертывания произошло исключение без каких-либо дополнительных подробностей.

SEVERE: Exception while loading the app
SEVERE: Exception while shutting down application container
....
SEVERE: Exception while shutting down application container : java.lang.NullPointerException

Это прослушиватель событий CDI:

public void updateFromGranule(@Observes @CloudMask GranuleAvailableEvent granuleEvent) {
    LOG.info("updating cloud map");
    update(granuleEvent.getGranule(), CloudMask.class);
    fireUpdate();
}

Если я изменю bean-компонент Singleton, чтобы он был просто @ApplicationScoped, приложение развертывает нормально. Точно так же, если я удалю метод наблюдателя событий CDI, приложение развернется нормально. На самом деле мне нужно, чтобы класс был синглтоном EJB, потому что мне нужна транзакция, безопасность потоков и т. Д. EJB, поэтому просто оставлять это как POJO @ApplicationScoped бесполезно. Проблема, похоже, не ограничивается bean-компонентами Singleton - я экспериментировал, изменив аннотацию на @Stateless и @Stateful, и получил ту же проблему.

Мне кажется, что это может быть ошибка в Weld , возможно, Weld и EJB спорят о том, как они проксируют этот метод - предположительно, EJB необходимо добавить класс перехватчика и обернуть этот метод, чтобы обеспечить безопасность потоков, а Weld пытается сделать что-то еще, чтобы заставить работать прослушиватель событий?

Am Я что-то не понимаю, и следует ли просто не использовать обработчики событий CDI в EJB (в этом случае должны быть более качественные сообщения об ошибках от glassfish) - или это на самом деле просто ошибка в реализации CDI или EJB?

8
задан jportway 14 May 2011 в 15:51
поделиться