1. Java トランザクションとは
通常の概念では、トランザクションはデータベースにのみ関連します。
トランザクションは、ISO/IEC によって確立された ACID 原則に準拠する必要があります。 ACID は、原子性、一貫性、分離性、耐久性の略語です。トランザクションのアトミック性とは、トランザクションの実行中に障害が発生すると、トランザクションによって行われた変更が無効になることを意味します。一貫性とは、トランザクションが失敗したときに、トランザクションの影響を受けるすべてのデータをトランザクションが実行される前の状態に復元する必要があることを意味します。分離とは、トランザクションがコミットされるまで、トランザクション実行中のデータへの変更が他のトランザクションから認識されないことを意味します。永続性とは、トランザクションの実行が失敗した場合でも、送信されたデータのステータスが正しい必要があることを意味します。
平たく言えば、トランザクションはアトミックな操作単位のセットです。データベースの観点から見ると、トランザクションは SQL 命令のセットです。すべてが正常に実行されるか、実行中にエラーが発生した場合、何らかの理由で命令の 1 つが実行されると、前の実行はキャンセルされ、すべての命令が成功します。より簡単な答えは、すべての実行が成功するか、キャンセルされて実行されないかのどちらかです。
トランザクションの概念はデータベースから来ていますが、Java トランザクションとは何でしょうか?どういう関係があるのでしょうか?
実際、Java アプリケーション システムでデータベースを操作したい場合は、JDBC を通じて実装されます。追加、変更、削除はすべて、対応するメソッドを通じて間接的に実装され、トランザクション制御もそれに応じて Java プログラム コードに渡されます。したがって、データベース操作トランザクションは慣例的に Java トランザクションと呼ばれます。
2. Java トランザクションが必要な理由
トランザクションはデータ セキュリティ操作を解決するために提案されており、トランザクション制御は実際にはデータへの安全なアクセスを制御することです。簡単な例を次に示します。たとえば、銀行振込業務で、口座 A が自分の口座から口座 B に 1,000 元を送金したいとします。まず口座 A の残高から 1,000 元を差し引いてから、口座 B の残高を差し引く必要があります。 1,000元増額されます。中間ネットワークに問題が発生し、Aの口座からの1000元の引き落としが終了し、ネットワークの中断によりBの運営が失敗した場合、ビジネス全体が失敗し、送金のキャンセルを要求するように制御する必要がありますAさんのアカウントの業務です。この方法によってのみ、ビジネスの正確性が保証されます。この操作を完了するには、トランザクションが必要です。アカウント A の資金の減少とアカウント B の資金の増加が 1 つのトランザクションにまとめられます。すべての実行が成功するか、すべての実行が成功するかのどちらかです。操作はキャンセルされるため、データのセキュリティが維持されます。
3. Java トランザクションの種類
Java トランザクションには、JDBC トランザクション、JTA (Java Transaction API) トランザクション、コンテナ トランザクションの 3 種類があります。
1. JDBC トランザクション
JDBC トランザクションは Connection オブジェクトによって制御されます。 JDBC 接続インターフェース (java.sql.Connection) は、自動送信と手動送信という 2 つのトランザクション モードを提供します。 java.sql.Connection は、トランザクションを制御する次のメソッドを提供します。
public void setAutoCommit(boolean)
public boolean getAutoCommit()
public void commit()
public void rollback()
JDBC トランザクション区切りを使用すると、複数の SQL ステートメントを 1 つのトランザクションに結合できます。 JDBC トランザクションの欠点の 1 つは、トランザクションの範囲が 1 つのデータベース接続に制限されていることです。 JDBC トランザクションは複数のデータベースにまたがることはできません。
2. JTA (Java トランザクション API) トランザクション
JTA は、実装に依存せず、プロトコルに依存しない高レベルの API であり、アプリケーションとアプリケーション サーバーは JTA を使用してトランザクションにアクセスできます。
JTA を使用すると、アプリケーションは分散トランザクションを実行できます。つまり、複数のデータベースに分散できる 2 つ以上のネットワーク コンピュータ リソース上のデータにアクセスして更新できます。 JDBC ドライバーの JTA サポートにより、データ アクセス機能が大幅に強化されます。
JTA を使用してトランザクションを定義する場合は、javax.sql.XADataSource、javax.sql.XAConnection、および javax.sql.XAResource インターフェースを実装する JDBC ドライバーが必要になります。これらのインターフェイスを実装するドライバーは、JTA トランザクションに参加できます。 XADataSource オブジェクトは、XAConnection オブジェクトのファクトリです。 XAConnection は、JTA トランザクションに参加する JDBC 接続です。
アプリケーション サーバーの管理ツールを使用して XADataSource を設定する必要があります。ガイダンスは、アプリケーション サーバーと JDBC ドライバーのドキュメントに記載されています。
J2EE アプリケーションは、JNDI を使用してデータ ソースをクエリします。アプリケーションはデータ ソース オブジェクトを見つけると、javax.sql.DataSource.getConnection() を呼び出してデータベースへの接続を取得します。
XA 接続は、非 XA 接続とは異なります。 XA 接続は JTA トランザクションに参加することを覚えておくことが重要です。これは、XA 接続が JDBC の自動コミット機能をサポートしていないことを意味します。同時に、アプリケーションは XA 接続で java.sql.Connection.commit() または java.sql.Connection.rollback() を呼び出してはなりません。
代わりに、アプリケーションは UserTransaction.begin()、UserTransaction.commit()、および serTransaction.rollback() を使用する必要があります。
3. コンテナトランザクション
コンテナ トランザクションは主に J2EE アプリケーション サーバーによって提供されます。コンテナ トランザクションのほとんどは、JNDI に基づくかなり複雑な API 実装である JTA に基づいて完了します。 JTAトランザクション管理をコーディングで実装する場合と比較して、J2EEアプリケーションサーバが提供するEJBコンテナが提供するコンテナトランザクション管理機構(CMT)を利用することで同じ機能を実現できます。これにより、トランザクションに追加するメソッドを簡単に指定でき、指定すると、コンテナーがトランザクション管理タスクを処理します。これは私たちの土木工学ソリューションです。この方法により、論理コーディングからトランザクション コードを除外し、すべての問題の解決を J2EE コンテナーに任せることができるからです。 EJB CMT を使用するもう 1 つの利点は、プログラマが JTA API のコーディングを気にする必要がないことですが、理論的には EJB を使用する必要があります。
4. 3 種類の Java トランザクションの違い
1. JDBC トランザクション制御の制限はデータベース接続内にありますが、その使用方法は簡単です。
2. JTA トランザクションは強力です。トランザクションは複数のデータベースまたは複数の DAO にまたがる可能性があり、その使用方法も複雑です。
3. コンテナトランザクションとは、主に J2EE アプリケーションサーバーが提供するトランザクション管理を指し、EJB アプリケーションに限定されます。
以上がJava の原理を理解する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。