猿问

在JSF托管bean中启动新线程安全吗?

在JSF托管bean中启动新线程安全吗?

对于在会话范围内的JSF托管bean中生成线程是否安全,我找不到明确的答案。线程需要调用无状态EJB实例上的方法(依赖-注入到托管bean)。

背景是,我们有一份需要很长时间才能生成的报告。这导致HTTP请求超时,因为我们不能更改服务器设置。因此,我们的想法是启动一个新线程,让它生成报告并临时存储它。同时,JSF页面显示一个进度条,轮询托管bean直到生成完成,然后再请求下载存储的报告。这似乎是可行的,但我想确定我所做的不是一次黑客攻击。


胡说叔叔
浏览 366回答 3
3回答

慕无忌1623718

我尝试过这一点,并在JSF托管bean中运行得很好。ExecutorService executor = Executors.newFixedThreadPool(1);@EJBprivate IMaterialSvc materialSvc; private void updateMaterial(Material material, String status,  Location position) {     executor.execute(new Runnable() {         public void run() {             synchronized (position) {                 // TODO update material in audit? do we need materials in audit?                 int index = position.getMaterials().indexOf(material);                 Material m = materialSvc.getById(material.getId());                 m.setStatus(status);                 m = materialSvc.update(m);                 if (index != -1) {                     position.getMaterials().set(index, m);                 }             }         }     });}@PreDestroypublic void destory() {     executor.shutdown();}
随时随地看视频慕课网APP

相关分类

Java
我要回答