为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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

3 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

我尝试过这一点,并在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();}


查看完整回答
反对 回复 2019-07-06
  • 3 回答
  • 0 关注
  • 365 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号