Jakarta ee 将远程EJB公开为CDIBean

Jakarta ee 将远程EJB公开为CDIBean,jakarta-ee,ejb,cdi,java-ee-7,ejb-3.2,Jakarta Ee,Ejb,Cdi,Java Ee 7,Ejb 3.2,下面给出了一个CDI管理bean的示例 import javax.ejb.EJB; import javax.inject.Named; import javax.faces.view.ViewScoped; @Named @ViewScoped public class ZoneManagedBean implements Serializable { @EJB private ZoneBeanRemote zoneService; //This is a remote E

下面给出了一个CDI管理bean的示例

import javax.ejb.EJB;
import javax.inject.Named;
import javax.faces.view.ViewScoped;

@Named
@ViewScoped
public class ZoneManagedBean implements Serializable {

    @EJB
    private ZoneBeanRemote zoneService; //This is a remote EJB.
    private static final long serialVersionUID = 1L;
}
注释
@Inject
不支持用于将远程EJB注入CDIBean

如何在此处用
@Inject
替换
@EJB


我测试的一些示例不起作用,我不认为需要像这样在这里发布这些示例

@ApplicationScoped
public class ReomteServiceProvider {

    @EJB
    private ZoneBeanRemote zoneBeanRemote;

    @Produces
    @Default
    public ZoneBeanRemote getZoneBeanRemote() {
        return zoneBeanRemote;
    }
}
当尝试使用前面的类(带有
@生成的
注释)时,部署过程终止,出现以下异常(无论是否包括或排除类上方的注释(
@可选
@应用程序范围
@命名
):


附言:我(目前)使用JDK 8u25在GlassFish服务器4.1上运行。

好的,感谢您更新您的问题并提供详细信息

这里的问题是您的制作人使用的是
@Default
限定符。为了注入,注入点需要如下所示:

@Inject @Default private ZoneBeanRemote zoneBeanRemote;

然后注入就可以了。

尝试此操作时发生了什么?除了抛出通常的异常之外,没有其他情况发生,比如-
未满足的依赖关系:没有bean匹配注入点。
“@producting”EJB看起来很奇怪。出于好奇,使用@EJB有什么不对?如果我真的需要像你的例子那样去掉@EJB注释,我会让
RemoteServiceProvider
实现与远程EJB相同的接口,并将执行委托给
zonebeanRemote
。给后代:库包含中存在问题(当时我错误地将JavaEEWeb概要文件库添加到EJB模块中)。在注入点不需要
@Default
注释。只有
@Inject private ZoneBeanRemote ZoneBeanRemote;
足以与各自的CDI生产者一起执行其一致的任务。实际上,他使用的是
@EJB
注释来注入,而该注释不是CDI的一部分。使用
@Inject
s在这种情况下,即使没有
@Default
限定符(因为如果没有指定任何内容,这是隐式限定符)也不应该起作用。是的,理想情况下,您不会使用
@Default
限定符,这是我怀疑他在代码中实际解决此问题的方法。我怀疑他在GF中遇到了导致此问题的错误。
@Inject @Default private ZoneBeanRemote zoneBeanRemote;