並列化が必要な Websphere Java EE アプリケーションがあり、CommonJ 作業コンポーネントの使用を検討しています。
各「スレッド」には、データベースからのデータに対する独自のビューが必要です。このほとんどはプリフェッチされますが、一部を取得するにはデータベースにアクセスする必要があります。これらすべてのスレッドの全体的な作業の期間は「長い」(つまり、基礎となるデータが変更されるのに十分な時間) と予想されます。
その結果、アプリケーションによって使用され、スレッドの作業中にクエリされるデータを確実に分離する必要があります。
これを確実にする唯一の方法は、「グローバル」トランザクションを持ち、XA トランザクションを使用することのようです。しかし、可能な限りこの複雑さ (およびオーバーヘッド) を回避したいと考えており、アイデアや代替案を探しています。何か考えはありますか?
また、Common-J Work Components はコンテナ管理のトランザクションをどの程度サポートしていますか?
@Karl:おそらくオーバーヘッドを意味していたのでしょう。私たちの考えでは、XA トランザクションとメッセージングは、トランザクションを共有する Common-J 作業コンポーネントが回避できるオーバーヘッドを発生させるのでしょうか? 操作対象のデータセットは、30 万行を超える個別のデータ行であり、それぞれに対して約 100 の計算を行う必要があります。これらは、共有されたキャッシュされた読み取り専用データで動作するさまざまなスレッドに分割できますが、キューへのコピー/キューからの読み取りの比較メモリオーバーヘッドは法外に思えます. 同意しますか?
@Karl: エンティティごとに数十から数百ミリ秒。別のタスクとして、ロジック処理の改善にも力を入れています。
すべてのスレッドが 1 つのデータベース内の一貫したデータ ビューを持つ必要がある場合、XA トランザクションを使用する必要がありますか? これに対する私の答えは、各スレッドには独自の JPA EntityManager (接続など) が必要であり、アクセスを調整するために XA が必要であるということです。
しかし、XAなしでこれを行うことができれば、はるかに良いのではないでしょうか?