EJB中的线程生成库

时间:2016-01-07 23:34:00

标签: java multithreading java-ee ejb

是否允许在EJB中使用生成和管理线程的库?

我用类似这样的类编写了一个JavaSE库:

public class LibraryClass {
    public void longRunningMethod() {
        ExecutorService service = Executors.newFixedThreadPool(10);
        //schedule tasks
        service.shutdown();
        try {
            service.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

示例EJB:

@Stateless
class Bean {
    public void beanMethod() {
        LibraryClass libraryClass = new LibraryClass();
        libraryClass.longRunningMethod();
    }
}

在EJB中使用这样的东西可以吗?

规范声明“企业bean不得尝试管理线程”,如果线程在EJB之外进行管理,甚至可能失控于开发人员(例如使用第三方库时),这仍然适用?

1 个答案:

答案 0 :(得分:0)

总的来说,这个建议是正确的。这是一种不好的做法,因为您已经在一个“已包含”的环境中运行,该环境已经为您完成了繁重的线程处理/线程池(分配)。如果您确实想要跨越线程,请确保容器知道它们或为其提供构造以便它可以处理和监视它。这是通过在Java中使用Executor服务实现的。参见herehere