Javaトランザクションの詳細


一、事務
(1)トランザクション(Transaction)は、一般的に、やるべきことややるべきことを指す.コンピュータ用語では、データベース内の様々なデータ項目にアクセスして更新する可能性のあるプログラム実行ユニット(unit)を指す.
(2)トランザクションには、原子性、一貫性、独立性、持続性の4つの属性が必要です.この4つの属性は一般にACID特性と呼ばれる.原子性(atomicity).1つのトランザクションは分割できない作業単位です.例えばAがBに1000元振り込むと、原子性(同時に成功するか、同時に失敗するか)を保証しなければなりません.
コンシステンシ(consistency).トランザクションは、データベースを1つのコンシステンシ状態から別のコンシステンシ状態に変更する必要があります.コンシステンシは原子性と密接に関連しています.たとえば、AがBに振り替えた場合、Aが金を引いたわけではありませんが、Bは受け取っていません(これは非コンシステンシです).
独立性(isolation).1つのトランザクションの実行は他のトランザクションに干渉されてはいけない.すなわち、1つのトランザクション内の操作および使用されるデータは、同時実行される他のトランザクションから独立しており、同時実行される各トランザクション間で互いに干渉することはできない.例えば、AとCが同時にBに振り替えられると、Bは同じ時間に1人のトランザクションしか取引できない(同時に1つのトランザクションしか実行できない).
永続性(durability).永続性は永続性(permanence)とも呼ばれ、トランザクションがコミットされると、データベース内のデータの変更は永続性であるべきである.次の他の操作や障害はそれに影響を与えるべきではない.AはBに振り替え、成功するとBの口座に振り替え額が格納され、他の操作をしない前提でデータは永続性である.
二、Hibernate事務処理
(1)Hibernate取引
Hibernateフレームワークでは、Transactionインタフェースを使用してトランザクションインプリメンテーション(JTA,JDBC)の抽象化を維持します.トランザクションはセッションに関連付けられ、セッションが呼び出されます.beginTransaction()をインスタンス化します.
Transactionインタフェースの方法は、void begin()が新しいトランザクションを開始することです.void commit()は、FlushModeで作業を終了します.NEVERを除く.void rollback()は、このトランザクションのロールバックを強制します.void settimeout(int seconds)このインスタンスから開始された後続の呼び出しによって開始されたトランザクションのタイムアウトを設定します.boolean isAlive()取引がまだ存在するかどうかをチェックします.void registerSynchronization(Synchronization s)このトランザクションに登録されたユーザーは、コールバックを同期します.boolean wasCommited()トランザクションが正常にコミットされたかどうかを確認します.boolean wasRolledBack()トランザクションが正常にロールバックされたかどうかを確認します.
(2)Hibernateトランザクションバインディング
Hibernateは、ローカルスレッドを使用してトランザクションをバインドし(1つのスレッドで複数のスレッドを起動して異なるデータ作業を操作することはできません)、サービスメソッドを要求すると、Soring AOPによって自動的にHibernate Sessionを開き、トランザクションを開始し、データに関連するすべての作業を実行し、トランザクションを終了し、Sessionを閉じます.モデルの鍵は取引と取引の間の一対一の関係Sessionである.
例:
public Integer save(One one,Tow tow) {
    oneDao.save(one);
    towDao.save(tow);
    return 1;
}

三、分散取引
(1)JTAはアプリケーションシステムのデータ量がますます大きくなると、システムデータを異なるデータベースに分散する必要がある.ビジネスが複数のデータベースで原子間操作を行う必要がある場合、JTA(Java Transaction API)を選択できます.JTAトランザクションはJDBCトランザクションよりも強力です.1つのJTAトランザクションには複数の参加者があり、1つのJDBCトランザクションは1つのデータベース接続に限定されます.
(2)JTAの原理の異なるデータベースには異なるデータベースベンダーがあり、JTAはこの異なるデータベースを管理し、原子トランザクションを統一的に作成し、すべて成功すれば成功し、1つが成功しなければすべての操作をロールバックする(JTAはまだ重量級)
(3)インスタンスSpringには多くのJTAフレームがありますが、ここではatomikosフレームを使用しています.具体的なコードはリンクをクリックして見てください
四、分散型メッセージの最終的な一貫性トランザクション
(1)最終的な一貫性アプリケーションシステムのデータがますます膨大になると、最終的なデータの一貫性は、即時に応答し、複数のデータ操作をうまく行うことができる良い解決策となっている(ただし、一定の成功を保証することはできないが、しばらくしてから最終的に成功しなかった可能性がある).
(2)実装原理アプリケーションが要求を受信すると,アプリケーションはまずユーザが要求したデータを分散メッセージミドルウェアに保存し,保存操作を行う.保存に成功すると、コミット成功情報がユーザーに返されます.次に、分散メッセージミドルウェアは、要求を異なる処理マシンに送信し、処理マシンは、メッセージを受信してトラフィック処理を行う.例えばAはBに振り替え、Aはまず振り替え情報(すでに引き落とした)を提出し、それからメッセージが送信される分散型メッセージミドルウェアでは、メッセージミドルウェアは処理機器に送信されて処理され、振り替えに成功した後はユーザーに振り替え成功情報を送信し、成功しない場合は返金される.