![](/img/trans.png)
[英]JSF: How to use selectOneRadio for immediate update of backing bean?
[英]how to use thread in bean in jsf
在我使用JSF的Web应用程序中,我有100条记录从前端选中(使用复选框),点击按钮时,需要启动那些选定的100条记录(它将使用RESTAPI调用创建调查),调用bean中的一个方法来调用REST API。
目前,每个记录按顺序处理,每条记录平均需要20秒。 所以,如果我选择近100条记录,我的请求超时..我打算用bean调用bean中的方法..请问我该怎么办? bean中的方法是以参考号作为参数的initiatereview。
托管bean最终是一个POJO。 所以,你的问题归结为如何使用多个线程在不同的对象上执行类似的任务 ,所以最终是Java问题而不是JSF问题 。 为此,您必须使用ExecutorService
接口。 完成此任务的简短示例:
@ManagedBean
@RequestScoped
public class SomeBean {
List<String> records;
//other fields, constructor, getters and setters...
public void foo() {
int poolSize = records.size();
ExecutorService executor = Executors.newFixedThreadPool(poolSize);
for (final String record : records) {
executor.execute(new Runnable() {
public void run() {
//tasks to perform in the threads...
}
});
}
executor.shutdown();
}
}
这个例子的一些注释:
poolSize
值不应该是poolSize
records.size()
,我只是将其作为每个工作要创建的线程的示例。 请注意,您应该创建服务器支持的多个线程。 此变量的实际值取决于测试结果。 我建议使用10作为初始值,然后将其更改为测量性能结果。 Runnable
接口的类,该接口将保存您要完成的任务,而不是创建匿名类。 请注意,这是一种可能的解决方案。 IMO最好将记录列表发送到将处理它们的组件,例如通过JMS调用。 然后组件将调用您的restful服务以及处理记录所必须执行的其他操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.