首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@异步EJB线程池配置

@异步EJB线程池配置
EN

Stack Overflow用户
提问于 2016-12-13 21:46:20
回答 1查看 4.4K关注 0票数 5

为了并行运行任务,我创建了一个具有@异步方法的@无状态EJB。

问题是,这个方法将被称为很多,在一个循环中,以便并行处理一个导入。默认情况下,在Jboss中,用于异步进程的EJB线程池为10。

我们还有其他带有@异步注释的进程,如果我理解得很好,就会将其他任务放到队列中,直到线程可用为止。

我不想用这个新的任务来污染其他异步任务,所以我开始考虑将这个@异步进程隔离到它自己的池中的方法。由于该进程可能需要100个线程,因此理想的做法是能够创建具有此大小的线程池。

我发现您可以使用jboss注释@Pool来配置EJB池,所以我认为这就是它,但我刚刚意识到这是针对EJB池的,而不是线程池.

有没有办法说这个异步方法应该由它自己的线程池来管理呢?

我在这里找到了如何为JBoss配置EJB,所以我想知道,如果不能通过注释或其他什么. Pool.html引用它,那又有什么意义呢?

也许这就是Java 6的缺失之一,而Java 6已经被7和ManagedExecutorService修复了?如果是,我必须看看我的Jboss是否符合Java 7。

谢谢,

F

EN

回答 1

Stack Overflow用户

发布于 2016-12-13 22:59:47

Java 7

最后,在Java 7中,在JSR 236: JavaTM EE的并发实用程序中引入了ManagedExecutorService,以便在可配置容器托管线程池中运行任务。在Java 6中,没有类似的方法。

因此,如果您的应用程序在Java7EE环境中运行,那么使用ManagedExecutorService是您的解决方案。

使用JCA工作管理器的Java 6

如果您在Java 6环境中工作,那么您不可能使用ManagedExecutorService,但是一些应用程序服务器正在实现JSR 237:应用服务器工作管理器

使用JCA进行注入的简单实现如下所示。

代码语言:javascript
复制
@Stateless
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public class ThreadsResource {

    @Resource(name="jca/workmanager")
    WorkExecutorFactory executorFactory;

    public void execute(){
        try(WorkExecutor executor = executorFactory.newExecutor();){
        Runnable runnable = new Runnable(){
            @Override
            public void run() {
            //some work to do
            }
        };
        executor.execute(runnable);
  }

如何定义工作经理请看一下配置Java连接器体系结构(JCA)子系统 (JBoss EAP6.3Doc)。

使用JCA工作管理器的仅限于某些应用服务器,例如JBoss 6。如果您使用的是JBoss AS7,则不会工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41131099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档