我有一个独立的Java应用程序,它使用ExecutorService并行处理大量作业
ExecutorService es = Executors.newFixedThreadPool(10);
Run Code Online (Sandbox Code Playgroud)
我现在想在EJB bean中重用相同的解决方案但不确定如何正确初始化ThreadPool,因为我通常会让Java EE容器控制所有线程资源.我可以使用相同的代码,还是有另一种正确的方法来获取Jboss托管线程池?
该应用程序具有CPU密集型长进程,当客户端请求时,该进程当前在一个服务器(EJB方法)上串行运行.
理论上可以(从概念的角度)将该进程拆分为N个块并并行执行它们,只要可以收集并连接所有并行作业的输出,然后再将其发送回发起进程的客户端.我想使用这种并行化来优化性能.
如何使用EJB实现此并行化?我知道我们不应该在EJB方法中创建线程.相反,我们应该发布消息驱动bean(MDB)消息(每个作业一个).但那时它不再是同步通话了.在这种情况下,同步似乎是一个要求,因为我需要在将所有作业的输出发送回客户端之前收集它们的输出.
这有解决方案吗?