[JNDI] Problème de lookup
Bonjour à tous,
je développe actuellement une application cliente en Flex (Flash) avec un backend java situé sur un serveur Glassfish V3.
Pour faire le pont entre Flex et Java, j'utilise Graniteds qui est une Webapp.
Lorsque je mets en relation Flex avec des pojo, cela marche bien. Maintenant j'essaie de configurer GraniteDS afin d'intéragir avec des EJBs mais je pense avoir un soucis de localisation avec JNDI (j'y connais pas grand chose sic).
Voici mon arborescence : un EAR nommé EAR, un projet EJB nommé...EJB et ma webapp nommée GRANITEDS. La structure est disponible en PJ.
Mon fichier services-config.xml utilisé par GraniteDS pour localiser les services est le suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
<?xml version="1.0" encoding="UTF-8"?>
<services-config>
<services>
<service
id="granite-service"
class="flex.messaging.services.RemotingService"
messageTypes="flex.messaging.messages.RemotingMessage">
<destination id="stateless">
<channels>
<channel ref="my-graniteamf"/>
</channels>
<properties>
<factory>ejbFactory</factory>
</properties>
</destination>
</service>
</services>
<factories>
<factory id="ejbFactory" class="org.granite.messaging.service.EjbServiceFactory">
<properties>
<lookup>java:global/EAR/GRANITEDS_war/{capitalized.destination.id}ServiceBean</lookup>
</properties>
</factory>
</factories>
<channels>
<channel-definition id="my-graniteamf" class="mx.messaging.channels.AMFChannel">
<endpoint
uri="http://{server.name}:8080/{context.root}/graniteamf/amf"
class="flex.messaging.endpoints.AMFEndpoint"/>
</channel-definition>
</channels>
</services-config> |
il est correctement configuré sauf pour la propriété <lookup>. En effet, le {capitalized.destination.id} est remplacé au runtime par "Stateless" et va donc chercher dynamiquement mon bean "StalessServiceBean". Par contre, je ne sais pas trop quoi mettre avant...
Cas1 : <lookup>/GRANITEDS/{capitalized.destination.id}ServiceBean</lookup>
Résultat :
Citation:
[RPC Fault faultString="" faultCode="Could not lookup for: /GRANITEDS/StatelessServiceBean" faultDetail="nullorg.granite.messaging.service.ServiceException
at org.granite.messaging.service.EjbServiceInvoker.<init>(EjbServiceInvoker.java:65)
at org.granite.messaging.service.EjbServiceFactory.getServiceInstance(EjbServiceFactory.java:126)
at org.granite.messaging.amf.process.AMF3MessageProcessor.processRemotingMessage(AMF3MessageProcessor.java:135)
at org.granite.messaging.amf.process.AMF3MessageProcessor.process(AMF3MessageProcessor.java:59)
at org.granite.messaging.amf.process.AMF0MessageProcessor.process(AMF0MessageProcessor.java:78)
at org.granite.messaging.webapp.AMFMessageServlet.doPost(AMFMessageServlet.java:59)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:755)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
at org.granite.messaging.webapp.AMFMessageFilter.doFilter(AMFMessageFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:326)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:227)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:170)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:619)
Caused by: javax.naming.NamingException: Lookup failed for '/GRANITEDS/StatelessServiceBean' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: ]
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:518)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at org.granite.messaging.service.EjbServiceFactory.lookup(EjbServiceFactory.java:60)
at org.granite.messaging.service.EjbServiceInvoker.<init>(EjbServiceInvoker.java:63)
... 37 more
Caused by: javax.naming.NameNotFoundException:
at com.sun.enterprise.naming.impl.TransientContext.resolveContext(TransientContext.java:310)
at com.sun.enterprise.naming.impl.TransientContext.lookup(TransientContext.java:218)
at com.sun.enterprise.naming.impl.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:77)
at com.sun.enterprise.naming.impl.LocalSerialContextProviderImpl.lookup(LocalSerialContextProviderImpl.java:119)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:505)
... 42 more
"]
Il ne trouve pas GRANITEDS donc. J'ai essayé beaucoup de syntaxe, notamment celle ci :
Cas 2 : <lookup>java:global/EAR/GRANITEDS_war/{capitalized.destination.id}ServiceBean</lookup>
Résultat :
Citation:
...
...
Caused by: javax.naming.NamingException: Lookup failed for 'java:global/EAR/GRANITEDS_war/StatelessServiceBean' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: GRANITEDS_war]
...
...
Là, JNDI arrive apparemment à localiser EAR mais pas GRANITEDS_war (comme généré sur mon serveur Glassfish).
J'ai essayé beaucoup de syntaxes sans jamais réussir à trouver la bonne et étant novice avec JNDI, je ne sais pas quoi mettre en lookup...
Qui pourrait m'aider ?
Merci :ccool: