小编jpo*_*way的帖子

CDI事件观察器方法是否与EJB兼容?

我有一个Singleton EJB(javax.ejb.Singleton版本.叹气.),它有一个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
Run Code Online (Sandbox Code Playgroud)

这是CDI事件监听器:

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

如果我将Singleton bean更改为只是一个@ApplicationScoped bean,那么app就可以正常部署.同样,如果我删除CDI事件观察器方法,应用程序部署正常.我实际上需要将该类作为EJB单例,因为我想要EJB的事务,线程安全等,所以将它作为@ApplicationScoped POJO留下来对我来说并没有多大用处.这个问题似乎并不局限于Singleton bean - 我已经通过将注释更改为@Stateless和@Stateful进行了实验,我得到了相同的问题.

在我看来,这可能是Weld中的一个错误,也许Weld和EJB正在争论他们如何代理该方法 - 可能是EJB需要添加一个拦截器类并包装该方法以确保线程安全,而Weld正在尝试做某事否则使事件监听器工作?

我在这里误解了什么,CDI事件处理程序是否应该在EJB上使用(在这种情况下应该有来自glassfish的更好的错误消息) - 或者这实际上只是CDI或EJB实现中的错误?

glassfish cdi java-ee-6 ejb-3.1 jboss-weld

8
推荐指数
2
解决办法
4439
查看次数

标签 统计

cdi ×1

ejb-3.1 ×1

glassfish ×1

java-ee-6 ×1

jboss-weld ×1