J'ai une application d'entreprise A et B déployée (en WLS 10.0). A est le "framework", B est une application client. Le client émet les appels suivants:Besoin d'aide pour comprendre JNDI et une exception ClassCastException particulière dans J2EE
Object o = ctx.lookup(jndiName); // line 1
cf = (ConnectionFactory) o; // line 2
ConnectionFactory est une interface, définie comme:
public interface ConnectionFactory
extends java.io.Serializable, javax.resource.Referenceable {
...
}
Ce qui se passe est:
- Si le pot contenant la classe d'interface est sur la classpath du système, la ligne 2 est exécutée correctement
- Si la classe d'interface n'est pas sur le chemin d'accès au système du système, mais est h les applications séparément, la ligne 2 lève une exception ClassCastException (qui a le texte informatif que o est un ConnectionFactoryImpl)
Pourquoi est-ce possible? Je suppose que la recherche JNDI renvoie seulement un talon à l'objet distant (ai-je raison à ce point?), Alors pourquoi est-ce important que le classloader de la classe d'interface soit différent?
Le genre de réponse que j'attendre:
- Oui, il devrait se produire la façon dont vous l'expérience, parce que ...
- Non, il ne devrait pas se produire de cette façon, parce que si ... alors ..., donc il y a quelque chose de louche dans votre configuration
- La situation que vous avez décrite est très étrange, êtes-vous sûr de ne pas manquer quelque chose quelque part?
- ... :)
Il serait également bien si quelqu'un pourrait expliquer comment le JNDI et les talons de travail, d'où vient la coulée se produit (sur le côté client sur le talon, ou sur l'objet original sur le côté à distance?), etc.
Merci pour votre aide!
Merci pour la réponse. Ce qui m'a troublé, c'est que Weblogic écrit à propos des EJB que l'invocation d'EJB inter-applications ne peut se faire que via une interface distante. Je sais que cela n'a rien à voir avec les EJB, mais j'ai déduit que demander un objet JNDI résidant dans une autre application utiliserait un mécanisme distant similaire, ce qui ne devrait pas être vrai. – ron
C'est exact, oui.Lorsqu'un EJB accessible à distance est publié sur JNDI, il publie explicitement un stub. – skaffman