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?