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.