gpt4 book ai didi

java - 远程服务的 EJB 依赖注入(inject)在 Glassfish 上失败

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:40:20 24 4
gpt4 key购买 nike

我无法让依赖注入(inject)为我的远程服务工作,我也不知道为什么。我想要一个 RemoteService 的实例,所以我写了。

@EJB(name="RemoteService")
private RemoteService service;

Bean 本身是用 mappedName="RemoteService:

定义的
@Stateless(mappedName = "RemoteService")
public class RemoteServiceBean implements RemoteService

当我尝试运行这段代码时,我得到了一个 InjectionException:

EJB5070: Exception creating stateless session bean : [{0}]
com.sun.enterprise.InjectionException: Exception attempting to inject Unresolved Ejb-Ref RemoteService@jndi: service.remote.RemoteService@null@service.remote.RemoteService@Session@null into class service.OrderServiceBean
at com.sun.enterprise.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:387)
at com.sun.enterprise.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:206)
at com.sun.enterprise.util.InjectionManagerImpl.injectInstance(InjectionManagerImpl.java:127)
at com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB(StatelessSessionContainer.java:538)
at com.sun.ejb.containers.StatelessSessionContainer.access$100(StatelessSessionContainer.java:111)
at com.sun.ejb.containers.StatelessSessionContainer$SessionContextFactory.create(StatelessSessionContainer.java:783)
at com.sun.ejb.containers.util.pool.NonBlockingPool.getObject(NonBlockingPool.java:199)
at com.sun.ejb.containers.StatelessSessionContainer._getContext(StatelessSessionContainer.java:489)
at com.sun.ejb.containers.BaseContainer.getContext(BaseContainer.java:1709)
at com.sun.ejb.containers.BaseContainer.preInvoke(BaseContainer.java:1238)
at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:195)
at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:83)
at $Proxy766.size(Unknown Source)
at

我没有 ejb 配置文件,但我应该不需要,对吧?远程服务与尝试引用它的服务在同一个 glassfish 实例上运行。检查 glassfish admin 中的 JNDI 浏览器,验证是否已使用正确的 jndi 名称部署了 EJB,如果我删除了 @EJB 注释并在构造函数中手动执行查找,它也可以正常工作:

public OrderServiceBean()
{
try
{
final Properties properties = new Properties();
properties.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
properties.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
properties.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
properties.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
properties.setProperty("org.omg.CORBA.ORBInitialPort", "3700");

final InitialContext initialContext = new InitialContext(properties);
this.service = (RemoteService) initialContext.lookup("RemoteService");
}

想法?

最佳答案

我不敢相信我没有尝试过,但看起来我没有,我显然没有尝试通过 mappedName 引用 EJB。因此,更改对此的引用使其起作用:

@EJB(mappedName="RemoteService")
private RemoteService service;

关于java - 远程服务的 EJB 依赖注入(inject)在 Glassfish 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3779748/

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