/ / Comment utiliser correctement LocalContainerEntityManagerFactoryBean avec JPA - hibernate, jpa, datasource, jndi, jta

Comment utiliser correctement LocalContainerEntityManagerFactoryBean avec JPA - hibernate, jpa, source de données, jndi, jta

J'ai téléchargé un exemple d'application qui utilise Hibernate et JPA. Le problème est l'unité de persistance. Il semble que je puisse utiliser soit <persistence-unit name="hibernatePersistenceUnit" transaction-type="RESOURCE_LOCAL"> ou <persistence-unit name="hibernatePersistenceUnit" transaction-type="JTA"> de mes recherches, je trouve que si j'utilise le premier, je dois également spécifier <non-jta-data-source> et avec le second <jta-data-source> (Je pense que c'est vrai mais corrigez-moi si je me trompe)

Je pense que le premier implique que leurl, driver, user, pwd seront configurés dans l'application web. Et le second cherchera la source via JNDI dans le conteneur (Corrigez-moi encore si je me trompe) Mais la valeur que je dois spécifier pour cette propriété est ma pierre d'achoppement. J'ai vu jdbc: sampleDS, java: sampleDS. (S'agit-il également de recherches jndi? Je n'ai pas vu jndi: sampleDS). Cela devrait-il donc être jdbc: ou java: ou jndi: et sont-ils tous "JNDI"?

Et le "sampleDS" qu'est-ce que ce nomfaire référence à? En d'autres termes, cela fait-il référence à un nom de bean (j'utilise spring et mon bean qui configure les informations de la source de données s'appelle jpaDataSource) si j'utilise resource_local ou fait-il référence à une ressource jndi quelque part sur le serveur d'applications, JBOSS par exemple, ou autre chose que je ne connais pas?

Réponses:

1 pour la réponse № 1

RESOURCE_LOCAL que vous utilisez si vous n'avez pas besoin de globaltransactions (transaction couvrant plusieurs unités de persistance, c'est-à-dire des bases de données) ou des sources de données définies par JNDI, si vous avez besoin de transactions globales, vous devez utiliser JTA qui à son tour nécessite que vous utilisiez des sources de données JNDI car elles résident dans le serveur d'applications qui est celui qui peut gérer les transactions globales.

Les sources de données JNDI sont configurées sur le serveur d'applications - dans le cas de JBOSS, soit dans les fichiers configuration / standalone.xml ou * -ds.xml dans le dossier des déploiements.

java: sampleDS est un nom JNDI, exemple de fichier mssql-ds.xml:

<?xml version="1.0" encoding="utf-8"?>
<datasources>
<datasource jndi-name="java:jboss/datasources/myDatabase" pool-name="myDatabase" enabled="true" jta="true" use-java-context="true" use-ccm="true">
<connection-url>
jdbc:sqlserver://localhost;databaseName=myDatabase
</connection-url>
<driver>
sqljdbc
</driver>
<security>
<user-name>
myusername
</user-name>
<password>
mypassword
</password>
</security>
</datasource>
<datasources>