Ich habe Fragen wie folgt:
- Was ist der Unterschied zwischen diesen beiden?
- Werden beide von allen Datenbanken unterstützt?
- Unterscheiden sich JPA TransactionManager und JTA TransactionManager?
JPA-Implementierungen haben die Wahl, Transaktionen selbst zu verwalten ( RESOURCE_LOCAL
) oder von der JTA-Implementierung des Anwendungsservers verwalten zu lassen.
In den meisten Fällen ist RESOURCE_LOCAL in Ordnung. Dies würde grundlegende Transaktionen auf JDBC-Ebene verwenden. Der Nachteil ist, dass die Transaktion lokal für die JPA-Persistenz-Einheit ist. Wenn Sie also eine Transaktion wünschen, die mehrere Persistenz-Einheiten (oder andere Datenbanken) umfasst, ist RESOURCE_LOCAL möglicherweise nicht gut genug.
JTA wird auch zum Verwalten von Transaktionen zwischen Systemen wie JMS und JCA verwendet, aber das ist für die meisten von uns eine ziemlich exotische Verwendung.
Um JTA verwenden zu können, benötigen Sie Unterstützung auf Ihrem Anwendungsserver sowie Unterstützung vom JDBC-Treiber.
Als Ergänzung zu anderen Antworten
Hier ist ein Auszug aus dem äußerst nützlichen Artikel (veröffentlicht auf der Apache TomEE- Website), der auch bei der Beantwortung der ersten Frage des OP helfen kann (der Link zum Artikel befindet sich unten).
Wenn Sie die Java Persistence API lernen möchten, tun Sie sich selbst einen Gefallen und lesen Sie den vollständigen Artikel hier: JPA-Konzepte: JPA 101 .
quelle
transaction-type=RESOURCE_LOCAL
und@PersistenceContext
und@Transactional
verwaltet von SpringResource_Local und JTA sind Transaktionsmanager (Methoden zum Ausführen von Transaktionen). Dies ist nicht die Eigenschaft der Datenbank, sondern die Komponente, die für die Koordination von Transaktionen verantwortlich ist. JPA- und JTA-Transaktionsmanager sind unterschiedlich. Der JPA-Transaktionsmanager ist für JPA-Transaktionen verantwortlich und Sie möchten eine verwenden, wenn Sie nur eine JPA-Transaktion ausführen. Der JTA-Transaktionsmanager ist ein Allzweck-Transaktionsmanager und kann andere Ressourcen wie JMS-Warteschlangen in die Transaktion einbeziehen. In der Regel verwenden Java EE-Container einen JTA-Transaktionsmanager für EJBs, JPA-Entitäten usw.
quelle
resource_local vs JTA geht es um lokale Transaktion vs globale Transaktion. Es geht darum, wie wir mehrere Ressourcen unter einer einzigen Transaktion verwalten können.
Bei CMT vs BMT geht es darum, wer die Transaktion öffnet und schließt - Anwendungsentwickler oder Anwendungsserver.
quelle