アプリケーション サーバーでスレッドを管理することはお勧めしません。EJB を使用している場合、仕様ではそれが許可されていません。
キャッシュ ソリューションを使用してパフォーマンスを向上させてみませんか? 最初のいくつかのリクエストは遅くなりますが、キャッシュがホットになるとすべてが非常に高速になります。
データのキャッシュが実行できない場合、1 つの要求を複数のスレッドに分割するのではなく、サーバーに対して複数の要求を行うようにクライアントを変更するのはどうでしょうか? 各メソッドが 1 つの Web サービスを呼び出すように、Web アプリケーションを変更する必要があります。クライアントは、現在のページに必要な各メソッドを (並行して) 呼び出し、最終結果を組み立てます (必要に応じて、部分的な結果を表示することもできます)。これを行うことで、並行して作業を行い、仕様に違反することはありません。
サーバーに次のようなものがあるとします。
public Result retriveData(Long id) {
Result myResult = new Result();
//...
//do some stuff
myResult.setSomeData(slowWebService1.retriveSomeData(id));
myResult.setSomeOtherData(slowWebService2.retriveSomeOtherData(id));
myResult.setData(slowWebService3.retriveData(id));
return myResult;
}
クライアントで:
Result result = webApplication.retriveData(10);
//use the result
私の提案は、呼び出しを複数の方法で分割することです。
public SomeData retriveSomeData(Long id) {
//do some stuff
SomeData data = slowWebService1.retriveSomeData(id);
//do more stuff
return data;
}
public SomeOtherData retriveSomeOtherData(Long id) {
//do some stuff
SomeOtherData data = slowWebService2.retriveSomeOtherData(id);
//do more stuff
return data;
}
public Data retriveData(Long id) {
//do some stuff
Data data = slowWebService3.retriveData(id);
//do more stuff
return data;
}
クライアントで:
//Call these methods in parallel, if you were using Swing, this could be done with
//SwingWorker (I have no idea how to it with Flash :)).
//You can either wait for all methods to return or show partial results.
callInBackground(webApplication.retriveSomeData(10), useDataWhenDone);
callInBackground(webApplication.retriveSomeOtherData(10), useDataWhenDone);
callInBackground(webApplication.retriveData(10), useDataWhenDone);
これを行うことで、以前と同じように Web アプリケーションのみを呼び出しているため、セキュリティ上の問題は発生しません。
私はWebsphereに精通していないので、非同期Beanを使用することがこれよりも優れているかどうかはわかりませんが、手動でスレッドを開始することは避けるべきです.