Java EE 7 - 注入Runnable/Callable对象

 手机用户2502892757 发布于 2023-02-04 12:28

并发实用程序(JSR 236)已在Java EE 7中引入.

有没有办法如何将我的EJB注入Runnable/Callable对象?

具体来说,我想要这样的东西:

ejb与业务逻辑

@LocalBean
public class MyEjb {
    public void doSomeStuff() {
        ... do some stuff ...
    }
}

runnable/callable class我想要注入MyEjb的实例

public class MyTask implements Runnable {
    @EJB
    MyEjb myEjb;

    @Override
    public void run() {
        ...
        myEjb.doSomeStuff();
        ...
    }
}

启动新任务的对象

@Singleton
@Startup
@LocalBean
public class MyTaskManager {
    @Resource
    ManagedExecutorService executor;

    @PostConstruct
    void init() {
        executor.submit(new MyTask());
    }
}

MyTask中的myEjb字段始终为null.我想可以帮助JNDI查找,但有没有正确的方法如何做到这一点?

1 个回答
  • 您必须为容器提供将EJB注入Task实例的机会.您可以使用此代码中的动态实例来执行此操作:

    @Stateless
    public class MyBean {
        @Resource
        ManagedExecutorService managedExecutorService;
        @PersistenceContext
        EntityManager entityManager;
        @Inject
        Instance<MyTask> myTaskInstance;
    
        public void executeAsync() throws ExecutionException, InterruptedException {
        for(int i=0; i<10; i++) {
            MyTask myTask = myTaskInstance.get();
            this.managedExecutorService.submit(myTask);
        }
    }
    

    因为您不使用new运算符创建实例,而是通过CDI的实例机制创建实例,所以容器在调用时准备MyTask的每个实例myTaskInstance.get().

    2023-02-04 12:31 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有