Après une petite journée de recherches effrénées sur le web, j'ai enfin réussis à faire fonctionner mes EJB3.
C'est loin d'être compliqué, sauf si l'on s'écarte un chouïa des tuto. ce qui est le cas dans 100% des cas si l'on a décidé, comme moi, de déployer ses EJB3 dans un EAR.
Les binding ne semblent fonctionner que si l'on dépose le jar EJB dans le même conteneur que l'application, voici un lien à potasser, pour ceux qui ont des problème de binding.
L'info qui m'a sauvé ajouter le nom de l'EAR au lookup -> "java:global/nom_de_l_EAR/nom_du_jar_EJB/nom_beans_ejb"... sauf que cela ne marche pas, pourquoi ? ; parce que les beans sont en dehors de l’application, et seul l'instance de l'EJB répond au lookup java:global/nom_de_l_EAR/nom_du_jar_EJB"
le detail intéressant est que les deux interfaces, Local et Remote répondent, ce qui me laisse penser qu'il n'y a pas deux état possible pour les EJB qui seraient LOCAL ou DISANT mais trois;
* Local dans le même container ; @EJB fonctionne sans probleme de lookup, avec l'interface Local et Remote * Local dans un container different, par exemple dans un EAR ; le lookup doit comporter le nom de l'EAR et se terminer par le nom de la classe avec son chemin complet, et fonctionne avec l'interface Local et Remote * Distant, que je n'ai pas testé mais j'imagine que seule l'interface Remote fonctionne en mettant en oeuvre des process de sérialisation.
pour gagner du temps il est possible de se placer en mode debug sur le code avant le binding et de tester son chemin comme une expression du genre ; ctx.lookup("java:global/nom_EAR/nom_EJB!chemin.complet.de.la.Classe" ) ou d'autres test.
Il y a aussi d'autres informations dans cette FAQ très intéressante, qui est peut être à lire de bout en bout.
Bon codage
Message édité par Mr p0mme le 12-01-2014 à 02:46:28
Marsh Posté le 12-01-2014 à 02:43:51
Après une petite journée de recherches effrénées sur le web, j'ai enfin réussis à faire fonctionner mes EJB3.
C'est loin d'être compliqué, sauf si l'on s'écarte un chouïa des tuto. ce qui est le cas dans 100% des cas si l'on a décidé, comme moi, de déployer ses EJB3 dans un EAR.
Les binding ne semblent fonctionner que si l'on dépose le jar EJB dans le même conteneur que l'application, voici un lien à potasser, pour ceux qui ont des problème de binding.
https://glassfish.java.net/javaee5/ [...] le_global_
L'info qui m'a sauvé ajouter le nom de l'EAR au lookup -> "java:global/nom_de_l_EAR/nom_du_jar_EJB/nom_beans_ejb"... sauf que cela ne marche pas, pourquoi ? ; parce que les beans sont en dehors de l’application, et seul l'instance de l'EJB répond au lookup java:global/nom_de_l_EAR/nom_du_jar_EJB"
le lookup suivant résous ce problème;
"java:global/nom_de_l_EAR/nom_du_jar_EJB/nom_beans_ejb!chemin.complet.de.la.Classe"
ou comme indiqué dans la FAQ ;
java:global[/<app-name>]/<module-name>/<bean-name>!<fully-qualified-interface-name>
le detail intéressant est que les deux interfaces, Local et Remote répondent, ce qui me laisse penser qu'il n'y a pas deux état possible pour les EJB qui seraient LOCAL ou DISANT mais trois;
* Local dans le même container ; @EJB fonctionne sans probleme de lookup, avec l'interface Local et Remote
* Local dans un container different, par exemple dans un EAR ; le lookup doit comporter le nom de l'EAR et se terminer par le nom de la classe avec son chemin complet, et fonctionne avec l'interface Local et Remote
* Distant, que je n'ai pas testé mais j'imagine que seule l'interface Remote fonctionne en mettant en oeuvre des process de sérialisation.
pour gagner du temps il est possible de se placer en mode debug sur le code avant le binding et de tester son chemin comme une expression du genre ; ctx.lookup("java:global/nom_EAR/nom_EJB!chemin.complet.de.la.Classe" ) ou d'autres test.
Il y a aussi d'autres informations dans cette FAQ très intéressante, qui est peut être à lire de bout en bout.
Bon codage
Message édité par Mr p0mme le 12-01-2014 à 02:46:28