petit probleme avec le context.lookup() [ejb] - Java - Programmation
Marsh Posté le 19-10-2009 à 11:36:34
Tu dois ajouter une annotation @Remote sur l'interface EJBBusinesRemote aussi, et tu peux ajouter à ton annotation sur EJBBusinesBean le paramètre mappedName="EJBBusines" afin de changer le nom par défaut que tu dois spécifier dans ta requête pour te connecter à l'EJB. Par défaut je crois que le nom est "NomDuBean/remote" ou "NomDuBean/local" selon le type d'EJB, dans ton cas ce serait donc "EJBBusines/local" ce qui explique pourquoi tu ne parviens pas à y accéder. Mais je ne suis pas certain que ce soit le cas dans Glassfish donc le mieux est de lire la doc de Glassfish à ce sujet ou spécifier un mappedName.
Un petit tutoriel trouvé sur Google: http://www.webagesolutions.com/kno [...] index.html
Et enfin sache que Busines s'écrit en réalité "Business".
Marsh Posté le 19-10-2009 à 11:54:04
je viens de voir un truc étrange, je suis passé sous netbeans pour voir un peu les annotations et j'ai corrigé deux trois trucs (notamment le @remote et le fait que j'avais deux ejb session...) mais toujours impossible de le déployer.
par contre le déploiement via l'interface web de glassfish fonctionne parfaitement lui, sur le même jar...
du coup je me demande un peu pourquoi netbeans ne le déploie pas si j'y arrive par ailleurs. mais soit, ce n'est pas le problème premier.
j'ai placer un mappedName et maintenant j'ai ce code:
Code :
|
Code :
|
le client:
Code :
|
le deployement des deux se fait bien sous la page web de glassfish donc, je recupere bien le jar avec la commande
Code :
|
mais le probleme reste le meme:
Code :
|
[EDIT] j'ai déjà fait le test du hello en ejb et il fonctionne correctement, je suis justement partie de ce projet pour développer le miens sachant que les libs etaient bonne
Marsh Posté le 19-10-2009 à 17:54:55
j'ai reinstallé glassfish entierement, changé les ports d'utilisation (j'ai decouvert qu'oracle utilisait les memes...) et maintenant le deploiement sous netbeans fonctionne (ça accelere pas mal les tests)
mais j'ai toujours la meme erreur alors que le deploiement du mon ejb ainsi que de mon client se passent bien.
erreur: EJBBusiness not found
voila les entete de ma classe et de son remote:
Code :
|
Code :
|
Marsh Posté le 19-10-2009 à 22:24:17
Tu dois travailler avec ton interface dans le code client, pas avec l'implémentation. La classe qui implémente l'interface ne doit pas être déployée dans le client non plus. Dans le client tu dois donc faire une requête JNDI et faire un cast du résultat en "EJBBusinessRemote".
Marsh Posté le 21-10-2009 à 12:06:50
Si tu as changé les ports et d'autres paramètres, tu dois fournir les nouveaux paramètres au client aussi, soit via un fichier de properties externe (j'ai oublié le nom) soit via une hashtable de paramètres que tu passes à l'InitialContext. Vérifie également que ton client possède tous les jar nécessaires dans son classpath parce que normalement un client EJB doit être déployé dans un serveur J2EE, si tu crées un client autonome tu dois l'accompagner de quelques fichiers jar du serveur correspondant (comme montré dans le tutoriel).
Marsh Posté le 21-10-2009 à 12:22:53
je l'ai deployé sur le serveur et tout fonctionne maintenant merci a toi.
une derniere question cependant:
Citation : La classe qui implémente l'interface ne doit pas être déployée dans le client non plus |
je dois faire comment pour ça? pour le moment j'ai le jar de mon ejb en import (ce qui me parait pas normal) mais a l'execution c'est bien le serveur qui tourne.
je dois juste mettre l'interface dans le client, juste changer le lookup?
Marsh Posté le 21-10-2009 à 21:42:32
C'est tout l'intérêt d'avoir une interface, pour ne pas avoir à déployer l'implémentation avec le client!
Si tu mets le jar du serveur complet dans le client ça fonctionnera mais tu n'as besoin que de l'interface. Fais un jar supplémentaire qui contient uniquement les interfaces et déploie-le avec le serveur ET le client, comme ça tu n'auras pas à déployer le serveur complet avec le client.
Marsh Posté le 22-10-2009 à 00:06:31
j'ai tout le set d'interface vu que j'essaye le plus possible de programmer "propre" donc je n'ai rien a changer ça tombe bien
merci a toi pour tes reponses.
j'ai juste une derniere requete, j'ai créé mes ejb entitées et façades mais j'ai un petit probleme lors de l'appel:
Code :
|
Code :
|
EJBBusinessPU etant mon persistenceunit (declaré dans persistence.xml)
j'ai pas eu beaucoup de temps pour chercher et j'aurai peut etre la reponse avant de revenir mais la je suis trop crevé pour y reflechir donc si quelqu'un passe par la et a une idée
Marsh Posté le 19-10-2009 à 08:31:11
voila je me suis lancé dans un projet de serveur et celui ci a besoin d'une base de donnée. j'ai decidé de créé le necessaire en ejb dans le but de le rendre facilement accessible via un client mais j'ai un petit probleme.
j'ai créé mon ejb et porté celui ci sur glassfish, il apparait dans "module ejb"
sur mon client maintenant j'essaye d'acceder a glassfish et de le recuperer mais bien que j'ai pas mal avancé dans la comprehension des ejb un probleme persiste:
j'ai soit: EJBBusinesRemote not found
soit: ejb ref resolution error for remote business interfaceEJBBusines.EJBBusinesRemote
selon que j'itilise :
-ctx.lookup("EJBBusinesRemote" );
ou
-ctx.lookup("EJBBusines.EJBBusinesRemote" );
voila le mini morceau de code que j'ai:
glassfish écoutant bien sur le port 4849 (si par défaut c'était le 4848 qu'il fallait utiliser et non le 3700 comme j'ai vu ailleurs)
je travaille sous kate pour ce projet (qui a dit maso?) mais ça vient de la lenteur de mon pc du coup je modifis les fichier dans kate et compile via le reseau.
je vous marque donc les import du client:
ainsi que la declaration de mon ejb:
mais un doute m'assaille: ne faut il pas déclarer l'ejb sur l'interface remote aussi/plutot?
voila merci a celui qui aurait un idée
Message édité par kranagard le 19-10-2009 à 17:56:04