0

並列化が必要な Websphere Java EE アプリケーションがあり、CommonJ 作業コンポーネントの使用を検討しています。

各「スレッド」には、データベースからのデータに対する独自のビューが必要です。このほとんどはプリフェッチされますが、一部を取得するにはデータベースにアクセスする必要があります。これらすべてのスレッドの全体的な作業の期間は「長い」(つまり、基礎となるデータが変更されるのに十分な時間) と予想されます。

その結果、アプリケーションによって使用され、スレッドの作業中にクエリされるデータを確実に分離する必要があります。

これを確実にする唯一の方法は、「グローバル」トランザクションを持ち、XA トランザクションを使用することのようです。しかし、可能な限りこの複雑さ (およびオーバーヘッド) を回避したいと考えており、アイデアや代替案を探しています。何か考えはありますか?

また、Common-J Work Components はコンテナ管理のトランザクションをどの程度サポートしていますか?

@Karl:おそらくオーバーヘッドを意味していたのでしょう。私たちの考えでは、XA トランザクションとメッセージングは​​、トランザクションを共有する Common-J 作業コンポーネントが回避できるオーバーヘッドを発生させるのでしょうか? 操作対象のデータセットは、30 万行を超える個別のデータ行であり、それぞれに対して約 100 の計算を行う必要があります。これらは、共有されたキャッシュされた読み取り専用データで動作するさまざまなスレッドに分割できますが、キューへのコピー/キューからの読み取りの比較メモリオーバーヘッドは法外に思えます. 同意しますか?

@Karl: エンティティごとに数十から数百ミリ秒。別のタスクとして、ロジック処理の改善にも力を入れています。
すべてのスレッドが 1 つのデータベース内の一貫したデータ ビューを持つ必要がある場合、XA トランザクションを使用する必要がありますか? これに対する私の答えは、各スレッドには独自の JPA EntityManager (接続など) が必要であり、アクセスを調整するために XA が必要であるということです。
しかし、XAなしでこれを行うことができれば、はるかに良いのではないでしょうか?

4

1 に答える 1

1

WAS での XA トランザクションの何が複雑だと思いますか? XA トランザクションは、データの整合性が心配な場合に適しているように思えます。

WAS 内で独自のスレッドを作成して管理するとなると、少し厄介になる可能性があります。私は、独自のスレッドを管理しないようにします。物事を並行処理する可能性のある方法の 1 つは、データをキューまたはトピックにパブリッシュし、多数の複数の並行リスナーをキューから受け取ることです。このようにして、同時実行を構成し、コンテナーにスレッドを管理させることができます。

カール

于 2009-04-22T15:11:54.220 に答える