1

Tomcat で JSF 2 と Weld Cdi を使用して Web フロントエンドを開発しています。
現在、リクエスト時間を最適化するために複数の Web サービスを並行して実行する際に問題が発生しています。
ユーザーは、リストから複数の項目を選択できます。
選択された項目ごとに、リスト キーをパラメーターとして使用して、プロセスが 1 つの Web サービスからその情報を収集します。

私の現在のアプローチは、Bean に注入される Web サービス ポート インターフェイスを返す Producer を使用することです。Bean は、選択されたキーごとにループでこの Web サービスを呼び出します。

@Inject
private WSAnzeigeAssetsummen serviceAccess;
:

for ( Integer pfNr : sessionKeys.getPfnrList() ) {
   summaryTable = serviceAccess.execute(snr, pfnr, requestType, "", desiredRows, userName);
   processResult(summaryTable):
}

高速化するために、Future を返す ExecutorService と必要な数のワーカーを使用しようとしました。

この構成の問題は、ワーカーにサービス ポートを挿入できないことです。これは、ワーカーが管理されていないためです。サービス ポートを手動で作成することは機能しますが、プロデューサー クラスを無視するため、高く評価されません。

また、テスト時に、定義済みの結果セットを提供するダミーのサービス ポートを挿入することはできません。

tomcat-weld 環境での並列実行について何も見つからなかったので、私のアプローチに何か問題があるに違いありません。

このような状況を解決するための正しいアプローチは何ですか?

編集:私が試したことをより明確にするために...

public class DataCollector implements ISumRequest<Integer, Integer, String, FutureResult> {

ExecutorService pool = Executors.newCachedThreadPool();
@Inject
SessionBean sessionBean;

public Future<FutureResult> collectInformation(Integer snr, Integer pfnr, String requestType) {

    CollectWorker worker = new CollectWorker (snr,pfnr,requestType,sessionBean.getUserName());     
    return pool.submit(worker);        
}

}

このようにすると、ワーカーは管理されません。

4

1 に答える 1