gpt4 book ai didi

glassfish - 在 OmniFaces @Eager bean 中注入(inject) @EJB 会导致 "Severe: No valid EE environment for injection of org.omnifaces.cdi.eager.EagerBeansRepository"

转载 作者:行者123 更新时间:2023-12-03 06:52:48 34 4
gpt4 key购买 nike

使用@ApplicationScoped @Named @Eager,我的@EJB注入(inject)的@Stateless bean未正确实例化并评估为

我有一个@ApplicationScoped @ManagedBean(eager=true),用于安排一些作业。一些@Stateless bean是使用@EJB注释注入(inject)的,效果很好。

在转向 CDI 注释时,我添加了 OmniFaces @Eager注释作为标准 CDI 中缺少的 @ManagedBean(eager=true) 的替代品:

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.EJB;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.inject.Named;
import org.omnifaces.cdi.Eager;

@Named
@ApplicationScoped
@Eager
public class MyScheduler implements Serializable {

@EJB
private MyService myService;
@Inject
private MyNamedBean myNamedBean;

@PostConstruct
public void init() {
setupSchedulers();
}

@PreDestroy
public void destroy() {
destroySchedulers();
}
//...
}

使用此设置,可以在应用程序启动时正确调用 @PostConstruct 方法(尽管它似乎甚至在初始化上下文之前就运行),但随后 myService 的计算结果为

在日志中,出现以下警告:

Severe:   No valid EE environment for injection of org.omnifaces.cdi.eager.EagerBeansRepository
Severe: No valid EE environment for injection of my.package.MyScheduler
Info: Initializing Mojarra 2.2.8 ( 20140814-1418 https://svn.java.net/svn/mojarra~svn/tags/2.2.8@13507) for context '/tagific'

由于我需要从其他 bean 访问此 bean,因此我无法使用 @Singleton@Schedule 注释。

如何在应用程序启动时实例化的 @Named 应用程序作用域 bean 中正确注入(inject) @Stateless bean?

最佳答案

这看起来像是 GlassFish 中的初始化排序错误。 @Eager @ApplicationScopedServletContextListener 中运行。显然此时 GlassFish 还没有准备好注入(inject) EJB。该结构适用于例如野蝇。

但是,以 CDI 统一整个 Java EE 中各种不同依赖注入(inject)方法的名义,您也可以只使用 @Inject 而不是 @EJB。 CDI 代理能够进一步委托(delegate)给正确的 @Stateless 实例。

@Inject
private MyService myService;

您还可以在 EJB 本身内部使用 @Inject,但截至目前(Java EE 7)它还不支持自引用,例如@Asynchronous 方法。为此,您仍然必须坚持使用 @EJB

<小时/>

也就是说,您是否知道 Oracle 停止了对 GlassFish 的商业支持,并且您最好不要将其用于生产环境?另请参阅this blog .

关于glassfish - 在 OmniFaces @Eager bean 中注入(inject) @EJB 会导致 "Severe: No valid EE environment for injection of org.omnifaces.cdi.eager.EagerBeansRepository",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25739824/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com