不建议在管理应用程序服务器中的线程。如果您使用的是EJB,则规格为disallows that。
为什么不使用缓存解决方案来提高性能?前几个请求会比较慢,但是一旦缓存很热,一切都会非常快。
如果缓存数据不可行,那么更改客户端以向服务器发出多个请求,而不是在多个线程中拆分一个请求呢?您需要更改您的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比这更好,但是你应该避免手动启动线程。
谢谢你的回复“iruediger”。你的意思是缓存从Web服务检索到的数据?我们不能这样做,因为来自用户的请求是唯一的(例如:输入是SSN,并且输出将是来自许多服务的所有医疗细节)。如果您的建议不是数据缓存,可以请您多解释一下。谢谢 – user418836 2011-06-10 21:47:15
是的,我正在考虑像[Ehcache](http://ehcache.org/)这样的数据缓存。由于这对您的系统来说不可行,您可以更改客户端以发出多个请求(查看我的答案)。 – iruediger 2011-06-10 22:36:46
我的客户端应用程序是一个Flash应用程序,所有Web服务都是外部第三方服务。 Flash播放器具有内部安全措施,不允许与托管服务器以外的其他服务器进行交互。唯一可能发生的情况是,所有这些第三方服务器都必须在其服务器上具有crossdomain.xml,才能访问我们的服务器域。没有服务提供商会同意。唯一的选择是从我们的应用服务器调用这些服务。我们又回到原点了。 – user418836 2011-06-12 04:21:44