2010-09-23 1 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, что и служба, пытающаяся ссылаться на нее. Проверка браузера JNDI в браузерах из Glassfish проверяет, что 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

Я не могу поверить, что не пробовал, но, похоже, я этого не сделал, я, очевидно, не пробовал ссылаться на EJB через mappedName. Поэтому изменение ссылки на это заставляет его работать:

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