ファイルの属性 (サイズ、更新時間など) をデータベースに保存します。したがって、問題はデータベースとファイルのトランザクションをどのように管理するかです。
Java EE 環境では、JTA はデータベース トランザクションを管理することしかできません。データベースの更新は成功したが、ファイルの操作に失敗した場合、ファイルのロールバック メソッドを作成する必要がありますか? また、EJB コンテナでのファイル操作は EJB 仕様に違反しています。
あなたの意見は何ですか?
ファイルの属性 (サイズ、更新時間など) をデータベースに保存します。したがって、問題はデータベースとファイルのトランザクションをどのように管理するかです。
Java EE 環境では、JTA はデータベース トランザクションを管理することしかできません。データベースの更新は成功したが、ファイルの操作に失敗した場合、ファイルのロールバック メソッドを作成する必要がありますか? また、EJB コンテナでのファイル操作は EJB 仕様に違反しています。
あなたの意見は何ですか?
ファイル システムなどの外部リソースへのアクセスは、理想的にはJCA コネクタを経由する必要があります。これについてはいくつかの投稿がありますが、ファイル システムへのトランザクション アクセス用のすぐに使用できる JCA コネクタを見つけられなかったので、次のようなものを書き始めました。
その他のプロジェクトについて:
複数のトランザクション参加者がいるとすぐに、アプリ. サーバーは実際に分散トランザクションを使用する必要があり、事態はさらに複雑になります。この複雑さを過小評価してはなりません (たとえば、データベースには分散トランザクション用の別のタイムアウト メカニズムがあります)。
考慮すべきもう 1 つの軽量なアプローチは、ファイル システムに書き込むSFSBを使用することです。SessionSynchronization
インターフェイスを実装するbeforeCompletion
と、afterCompletion
コールバックが取得されます。後者は、トランザクションがコミットまたはロールバックされたかどうかを示し、必要に応じてクリーンアップを行います。その後、トランザクション動作を実装できます。
JTA は単なるデータベース用ではありません。リソースが XA トランザクションをサポートしていれば、他のリソースと一緒に長く使用できます。たとえば、XADiskは、ファイルシステムと XA トランザクションとの統合の 1 つを可能にします。したがって、解決しようとしてきたファイルシステムとデータベースの一貫性の問題も解決できます。
それが役立つことを願っています。
ニチン
手動で。おそらく、これに対して補償トランザクションを作成する必要があります。
トランザクショナル ファイル アクセスについては、commons-transaction を参照してください。参照する:
いずれにせよ、@ewernli が指摘したように、EJB コンテナーの外部にファイルを書き込むか、JCA コネクターと対話する必要があります。