在JSF托管bean中启动新线程安全吗?对于在会话范围内的JSF托管bean中生成线程是否安全,我找不到明确的答案。线程需要调用无状态EJB实例上的方法(依赖-注入到托管bean)。背景是,我们有一份需要很长时间才能生成的报告。这导致HTTP请求超时,因为我们不能更改服务器设置。因此,我们的想法是启动一个新线程,让它生成报告并临时存储它。同时,JSF页面显示一个进度条,轮询托管bean直到生成完成,然后再请求下载存储的报告。这似乎是可行的,但我想确定我所做的不是一次黑客攻击。
3 回答

慕无忌1623718
TA贡献1744条经验 获得超4个赞
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();}
添加回答
举报
0/150
提交
取消