problème EJB en remote - Java - Programmation
Marsh Posté le 09-11-2008 à 22:30:45
Bonjour,
étant donné la nature du message "impossible d''ajouter une ressource non-XA à une transaction JTS globale", j'aurais comme l'impression que tu fais appel à un driver SQL non-XA sur ton serveur distant.
As-tu bien les même configurations pour ton driver SQL sur le serveur distant ?
Bref, en gros, pour ta transaction globale, il te faut que tes ressources qui y participent (l'EJB, la connexion à ta base, ...) soient toutes transactionnelles, ce qui ne semble pas être le cas ici.
En espérant que ce soit ça ...
lothar83fr a écrit : bonjour
|
Marsh Posté le 10-11-2008 à 17:17:05
daccord, enfin je pensse avoir compris...
Seulement je ne sais pas comment rendre mes ressources "XA".
J'utilise le dernier driver mysql, mon persistence.xml est configuré en JTA.
La seule chose qui pourrais peut être poser problème c'est que j'utilise pour le serveur interface un glassfish d'il y a un an... alors que le serveur des ejb metiers est à jours.
J'ai peur qu'en mettant à jours le tout ne rende ensuite mon projet irrécupérable...
Marsh Posté le 14-11-2008 à 10:30:54
lothar83fr a écrit : daccord, enfin je pensse avoir compris... |
" Rendre les ressources "XA" ":
mon truc à moi de fainéant (mais ça fait partie des bonnes pratiques) : tous mes EJB sont CMT (c'est mon serveur d'appli qui gère les transactions), mes drivers JDBC utilisés sont XA (bcp travaillé sur Oracle, tu as deux drivers différents pour le non XA et le XA, suffit de choisir le bon) et normalement, le serveur d'appli s'en sort tout seul avec son Transaction Manager : toutes les ressources impliquées savent faire le "2 phase commit" et il peut donc faire une transaction globale.
Faut voir dans ta chaîne, depuis la méthode déclarée transactionnelle (une façade en général) jusqu'à ta base, quelles sont les ressources impliquées et voir s'il y en a pas une qui ne l'est pas (la partie communication en fait aussi partie, un service web n'est pas transactionnel par ex, mais bon là ça n'a pas l'air d'être ton cas, c'était pour l'exemple)
"La seule chose qui pourrais peut être poser problème c'est que j'utilise pour le serveur interface un glassfish d'il y a un an... alors que le serveur des ejb metiers est à jours." :
Peut être ... mais alors là, aucune idée, peut être qu'ils implémentent des versions d'API JTA/JTS différents ? peut être que ça rien à voir ? mais là, bonne chance
Marsh Posté le 09-11-2008 à 17:38:52
bonjour
voila je suis débutant en java et j'ai un petit soucis avec mes ejbs.
lorsqu'ils tournent sur la même machine (corbaname:iiop:localhost:3700... ) tout fonctionne.
Seulement quand je met mes ejbs metiers sur un serveur distant et que je tente d'y accéder :
Internal Exception: java.sql.SQLException: Erreur lors de l'établissement d'une connexion. Raison : java.lang.IllegalStateException: impossible d''ajouter une ressource non-XA à une transaction JTS globale.
Error Code: 0
Call: SQLCall(INSERT INTO utilisateur (prenom, etat, login, ip, pseudo, port, timeOut, nom, mdp) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?))
Query: InsertObjectQuery(Ecml.Projet.metier.Utilisateur[idUtilisateur=null])
gestionUtilisateur:
gestionUtilisateurBean:
l'interface (qui est un webservice):
voila si quelqu'un peut m'aider ...
edit:
voici le sun-ejb-jar.xml
Message édité par lothar83fr le 09-11-2008 à 18:00:34