EJB : Problème méthode findAll() avec Jonas [RESOLU] - Java - Programmation
Marsh Posté le 27-07-2006 à 11:34:43
- Essaye peut-être sans le CDATA dans ton EJB-QL;
- Dans les options de ton serveur, il doit être possible de logger tous les queries SQL envoyés au RDBMS. Tu risques d'y trouver qq chose d'intéressant.
Marsh Posté le 27-07-2006 à 14:39:35
- Pour le CDATA, j'ai essayé sans : aucun changement
- Pour le logging des requetes de Jonas, je cherche, je n'ai pas trouvé pour l'instant. Si quelqu'un sait comment faire...
Marsh Posté le 27-07-2006 à 15:00:58
J'oubliais : merci, sircam, pour ta contribution, toutes les propositions sont bonnes à prendre.
Marsh Posté le 27-07-2006 à 16:13:55
Je pose donc à tous la question, fort justement suggérée par sircam :
"Quelqu'un sait-il comment logger les requêtes SQL émises par Jonas, y compris celles générées par les conteneurs EJB ?".
Merci, votre réponse n'est certes pas vitale, mais Ô combien attendue
Marsh Posté le 27-07-2006 à 17:00:51
Google : Jonas log jdbc ?
Marsh Posté le 28-07-2006 à 09:26:31
Ben non, je suis pas de ceux qui postent une question dès qu'ils ne savent pas faire quelque chose. J'ai cherché un bon moment sur le net, et j'ai pas trouvé la solution. J'ai aussi fouillé les fichiers de config de Jonas, ainsi que la console d'admin, mais, même en activant tous les logs que j'ai trouvés, les requêtes ne sont pas loggées.
Merci quand même sircam, à un moment j'ai cru que la recherche que tu m'indiquais allait me donner la réponse (un peu d'espoir, ca fait du bien), mais pour l'instant je n'ai rien trouvé de probant.
Quelqu'un d'autre sait-il comment faire ?
Sircam, tu sais faire ça avec d'autres serveurs d'application ? Comment ? Ca peut m'aider dans ma recherche.
Marsh Posté le 28-07-2006 à 11:07:47
Tu as dû (très mal) mal chercher. 15 secondes:
Citation : The P6Spy tool is integrated into JOnAS and it provides an easy way to trace the SQL requests sent to the database. |
A défaut, il est aussi possible de logger les queries au niveau Oracle, c'est sûr et certain!
Marsh Posté le 28-07-2006 à 12:09:38
En effet j'avais très mal cherché (pourtant j'y avais passé du temps ), et j'ai trouvé entre temps. Merci sircam.
Et grâce à ca j'ai trouvé la solution à mon problème, cf. mon post suivant, qui est celui que je poste sur tous les forums que j'ai utilisés.
Merci encore sircam !
Marsh Posté le 28-07-2006 à 12:10:47
Ca y est, j'ai trouvé les réponses à toutes mes questions !
Premièrement, pour logger les requêtes sql émises par Jonas, il existe l'excellent outil p6spy, qui, en plus, est livré avec la version 4.7.4 (et probablement d'autres) de Jonas.
La configuration est très simple et expliquée ici : http://www.p6spy.com/documentation/install.htm
Grâce à cet outil, j'ai pu voir la requête problématique générée :
SELECT SICC_ADMIN.TS_WF_TRAITETEMPO_0.ID_TRT FROM SICC_ADMIN.TS_WF_TRAITETEMPO SICC_ADMIN.TS_WF_TRAITETEMPO_0
Vous voyez le problème ? En fait Jonas ne voit visiblement pas que "SICC_ADMIN" est le schéma de la table, et préfixe donc l'alias TS_WF_TRAITETEMPO_0 avec, ce qui est évidemment interdit. La requête devrait être :
SELECT TS_WF_TRAITETEMPO_0.ID_TRT FROM SICC_ADMIN.TS_WF_TRAITETEMPO TS_WF_TRAITETEMPO_0
Pour régler le problème, j'ai trouvé 2 solutions, dans XDoclet :
1 - Dans la classe BiduleBean.java, supprimer le schéma dans les commentaires suivants :
Code :
|
Code :
|
Puis relancer XDoclet. Les classes et descripteurs sont regénérés correctement.
2 - Si, comme moi, vous utilisez l'assistant XDoclet de création d'EJB CMP dans Eclipse, lors de l'étape de sélection de la table et des champs, supprimez le schéma dans le nom de la table avant de valider l'étape.
Voilà, j'espère que cette explication aidera ceux qui seront comme moi confrontés à ce bug (parce que ca ressemble à un bug, quand même) de Jonas.
Marsh Posté le 28-07-2006 à 14:48:02
Evidemment ces solutions supposent que l'on n'ait pas besoin de préciser le schéma, ce qui n'est pas toujours le cas. Je n'ai trouvé (vu que je n'ai pas trop cherché) aucune façon d'éviter le préfixage par Jonas des alias utilisés.
Marsh Posté le 27-07-2006 à 09:48:07
Bonjour,
J'ai un problème pour utiliser la méthode findAll() d'un EJB entité (CMP), et d'ailleurs également pour toute méthode finder personnalisée. Je tiens à préciser tout de suite que je suis débutant en matière d'EJB.
J'utilise Jonas 4.7.4 comme serveur, Oracle 9i comme base de données, et XDoclet 1.2.3 pour la génération du code.
Voici un extrait de mon fichier ejb-jar.xml :
Lorsque je veux appeler cette méthode, par un code du style :
mon serveur Jonas tombe, et j'obtiens les messages d'erreur suivants :
Je précise pour finir que je n'ai en revanche aucun problème pour utiliser un findByPrimaryKey().
Quelqu'un a-t-il idée de l'origine du problème ? J'ai cherché dans tous les sens sur le net, mais je ne trouve pas de problème semblable.
Merci beaucoup d'avance !
Message édité par mixoumix le 28-07-2006 à 12:11:31