55 votes

Différence entre une "source de données jta" et une source de données "ressource-locale"?

Les termes "jta-source de données" et "ressources locales de la source de données sont un peu vague pour moi. Je suis en train de mettre à plat ce que je suis la compréhension ( ou prennent ) et je voudrais vous dire où je suis bon / mauvais.

  • La même base de données peut être considéré comme un jta-source de données ou comme une ressource locale de la source de données
  • S'il est mentionné comme jta-source de données, puis les haricots / autres classes peuvent utiliser JTA. Par conséquent, un usertransaction interface
  • Ne peut pas utiliser CMT / GSM si la source de données est la ressource locale
  • S'il est mentionné que les ressources locales de la source de données, les transactions ne sont pas JTA conscient. Code pouvez utiliser EntityTransaction interface mais pas un usertransaction interface

Merci!

70voto

Pascal Thivent Points 295221

Les termes "jta-source de données" et "ressource locale de la source de données" sont un peu vague pour moi.

Je suppose que vous avez fait référence à l' jta-datasource et non-jta-datasource - éléments. En bref:

  • si le type de transaction de l'unité de persistance est JTA, l' jta-datasource élément est utilisé pour déclarer le nom JNDI de la source de données JTA qui sera utilisé pour obtenir des connexions. C'est le cas le plus courant.
  • si le type de transaction de l'unité de persistance de ressources locales, l' non-jta-data-source doit être utilisé pour déclarer le nom JNDI de non-source de données JTA.
  • La même base de données peut être considéré comme un jta-source de données ou comme une ressource locale de la source de données

Cela est correct. Et je n'ai pas mentionné juste au-dessus, mais certains fournisseurs permettent même de déclarer à la fois un jta-datasource et un non-jta-datasource et l'utiliser plus tard pour une lecture optimisée grâce à la non-JTA connexions (c'est à dire qui ne seront pas associés à une transaction JTA).

  • S'il est mentionné comme jta-source de données, puis les haricots / autres classes peuvent utiliser JTA. Par conséquent, un usertransaction interface.

La première partie est correcte, la dernière partie pas tout à fait. À partir de l'EJB 3.0, l'article 13.3.4 Haricots d'Entreprise à l'Aide de contenants Géré la Démarcation des Transactions:

Le haricot d'entreprise les méthodes des affaires [...] ne doit pas tenter d'obtenir ou d'utiliser l' javax.transaction.UserTransaction interface.

Et de l'article 16.12 un usertransaction Interface:

Le contenant ne doit pas faire l' UserTransaction interface à la disposition de l'entreprise les haricots qui ne sont pas autorisés à utiliser cette interface.

En d'autres termes, l' UserTransaction interface n'est pas disponible pour CMT haricots d'entreprise.

  • Ne peut pas utiliser CMT / BMT si la source de données est la ressource locale

La formulation est un peu déroutant ici, mais je dirais que ce n'est pas strictement exact. À partir de la JPA 1.0 de la spécification, de la section § 5.5 Contrôle des Transactions:

Une application gérée gestionnaire d'entité peut être un JTA gestionnaire d'entité ou d'une ressource locale de l'entité gestionnaire.

...

Les deux JTA les gestionnaires de l'entité et de ressources locales gestionnaires de l'entité doivent être pris en charge dans Java EE web de conteneurs et de conteneurs d'EJB. Un EJB de l'environnement, JTA gestionnaire d'entités est généralement utilisé.

Et la section 6.2.1.2 type de transactions

L' transaction-type de l'attribut est utilisé pour indiquer si les gestionnaires de l'entité fournies par l'entité gestionnaire de l'usine de l'unité de persistance doit être JTA les gestionnaires de l'entité ou de ressources locales gestionnaires de l'entité. La valeur de cet élément est - JTA ou RESOURCE_LOCAL. Un type de transaction JTA suppose qu'une source de données JTA sera fournie - tel que défini par l' jta-data-source élément ou par le conteneur. En général, dans les environnements Java EE, un transaction-type de RESOURCE_LOCAL suppose qu'un non-source de données JTA seront fournis. Dans un environnement Java EE, si cet élément n'est pas spécifié, la valeur par défaut est JTA.

Ainsi, vous POUVEZ utiliser une application gérée gestionnaire d'entités qui peuvent être une ressource locale de l'entité gestionnaire (vous devez injecter EntityManagerFactory pour obtenir de l'EM dans ce cas) et il ne sera pas partie d'une transaction JTA. Voir cette (très intéressant) de discussion.

  • S'il est mentionné que les ressources locales de la source de données, les transactions ne sont pas JTA conscient. Code pouvez utiliser EntityTransaction interface mais pas un usertransaction interface

Encore une fois, la formulation est un peu confus, mais je dirais que c'est correct.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X