Bonjour,
je souhaiterais comprendre dans le détail JTA: les liens entre transaction, connexion, thread etc.... Comment un contexte transactionnel peut être propagé entre un client lourd et un serveur d'application par exemple. etc.
J'ai en particulier les questions suivantes:
1) Je m'imagine un service JTA comme un serveur/service indépendant qui peut recevoir des requêtes depuis un client local ou distant: Ces requêtes sont alors du genre "démarre moi une transaction sur cette connection", "commit la", "rollback la" etc... Je le vois donc vraiment comme un serveur/service à part: qui garde des connexions à une (ou plus) BDD et qui délimite des transactions dessus sur ordre d'un client. Cette représentation mentale est-elle correcte ?
Dans cette modélisation, le client distant d'un service JTA ne possède pas de socket ouverte vers la BDD mais c'est le serveur qui ouvre une connexion pour le client. Juste ?
Client ------(RMI-IIOP)----->Service JTA /Driver JDBC ----(TCP)----->BDD
2) Au final, vu de la base de donnée, un commit/rollback se fait toujours sur une connexion TCP donnée, non ? Au final le service JTA ferait donc bien un connexion.commit() (ou plutôt XAResource.end() ), il travaillerai donc en arriére plan sur un object connexion (ou semblable). Suis-je complètement à côté de la plaque ?
3) Lorsque dans un serveur J2EE, on veut effectuer une transaction "à la main", il faut récupérer un object "UserTransaction" et de maniére conplètement indépendante un object "DataSource"(et donc une connexion).
Si le service JTA committe au final sur un object semblable à une connexion, comment le service JTA fait-il le lien entre les opérations faites sur la connexion obtenue par la datasource et les begin() end commit() appelés sur l'object UserTransaction. Le lien entre la Transaction courante et la connexion est-il fait implicitement car les 2 sont utilisés dans le même Thread? (genre le service JTA, au start() associe la transacion au thread courant et dès l'utilisation de la connexion celle-ci est également associée au thread courant, donc au final la connexion est enregistrée sur la transaction ouverte ?)
3) Prenons le cas d'une transaction initiée par le client sur un poste A, et ce client fait appel à 2 EJBs(par exemple avec attribut transactionnel REQUIRED) dans la même transaction. La encore le client récupère par un appel JNDI un UserTransaction et par un appel JNDI conplétement différent une DataSource et donc une connexion. Comment le service JTA sait-il qu'il faut effectuer des commit/rollback sur cette connexion particulière ?
Merci d'avance pour votre aide.
Partager