2010-09-23 24 views
2

Je n'arrive pas à obtenir l'injection de dépendances pour mon service distant et je ne comprends pas pourquoi. Je veux une instance de RemoteService donc j'ai écrit.L'injection de dépendance EJB du service distant échoue sur Glassfish

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

et le haricot lui-même est défini avec mappedName = "RemoteService:

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

Lorsque je tente d'exécuter ce code j'obtenir une 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 

Je n'ai pas config ejb Le service distant s'exécute sur la même instance de glassfish que le service essayant de référencer le fichier .Le contrôle du navigateur JNDI dans glassfish admin vérifie que l'EJB a été eployed avec le nom JNDI correct et si je retire l'annotation @EJB et faire la recherche manuellement dans le constructeur, il fonctionne aussi:

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"); 
    } 

Idées?

Répondre

1

Je ne peux pas croire que je ne l'avais pas essayé mais il semble que je ne l'avais pas, je n'avais évidemment pas essayé de référencer l'EJB via mappedName. Donc, en changeant la référence à ceci le fait fonctionner:

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