2
我无法获得依赖注入为我的远程服务工作,我找不到原因。我想要一个RemoteService的实例,所以我写了。远程服务的EJB依赖注入在Glassfish上失败
@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 [email protected]: [email protected]@[email protected]@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浏览器验证EJB是否已经被d eployed使用正确的JNDI名称,如果我在构造函数中手动删除@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");
}
想法?