2010-09-23 117 views
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"); 
    } 

想法?

回答

1

我不敢相信我没有尝试过,但它似乎我没有,我显然没有尝试通过mappedName引用EJB。所以改变这个参考使它工作:

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