Управление вашими потоками на серверах приложений не рекомендуется.Если вы используете EJB, спецификация запрещает, чтобы .
Почему бы вам не использовать решение для кэширования для повышения производительности?Первые несколько запросов будут выполняться медленнее, но после того, как кеш нагреется, все будет очень быстро.
Если кэширование данных неосуществимо, как насчет изменения клиента для выполнения нескольких запросов к серверу вместо разделенияодин запрос в несколько потоков?Вам необходимо изменить свое веб-приложение, чтобы каждый метод вызывал один веб-сервис.Клиент будет вызывать (параллельно) каждый метод, необходимый для текущей страницы, и собирать конечный результат (при желании можно отобразить частичные результаты).Делая это, вы будете работать параллельно и не будете нарушать спецификацию.
Я предполагаю, что у вас есть что-то подобное на вашем сервере:
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);
Делая это, вы вызываете только ваше веб-приложение, как и раньше, поэтому не должно быть никаких проблем с безопасностью.
Я не знаком с Websphere, поэтому не могу сказать, лучше ли использовать его асинхронные bean-компоненты, но IMHO вам следует избегать запуска потоков вручную.