【问题标题】:Can i use ExecutorService in an ejb?我可以在 ejb 中使用 ExecutorService 吗?
【发布时间】:2023-03-09 13:48:01
【问题描述】:

我有一个场景,通过循环遍历学生列表,从一个 ejb 调用中生成不同学生的结果。我正在考虑在 ejb 调用中使用 executorService 创建线程来处理每个学生。目前我只查找我的 ejb 一次。

【问题讨论】:

  • 我不知道你在问什么——你能详细说明一下吗?
  • 我的意思是用 ejb 方法为班级中的每个学生做一些独立的工作..我想为每个使用线程的学生并行地做这项工作..我是吗现在清楚了吗?或者您需要更多信息?

标签: ejb-3.0 executorservice


【解决方案1】:

我认为这篇文章应该回答你的问题

EJB's and Threading

一般来说,EJB 不应产生新线程或进行“手工”异步执行。

【讨论】:

  • 实际上,该 rule 应该适用于容器中的所有用户代码,而不仅仅是 EJB。但在当时这被写入规范时,“EJB”被视为整个服务器的底层(或总体,取决于你的观点)技术。
【解决方案2】:

在 EE 7+ 服务器中,您应该只使用 JSR 236,这让您的应用程序可以访问由应用程序服务器管理的执行程序/池。

否则,理论上,EJB 规范不允许 EJB 创建自己的 ExecutorService,这将创建/管理自己的线程:

企业 bean 不得尝试管理线程。企业 bean 不得尝试启动、停止、挂起或恢复线程,或 更改线程的优先级或名称。企业 bean 不得 尝试管理线程组。

这些功能是为 EJB 容器保留的。允许 企业 bean 来管理线程会减少容器的 能够正确管理运行时环境。

实际上,如果您可以完全控制运行您的应用程序的服务器(您知道哪些其他应用程序正在运行以及它们正在创建多少线程/池以避免系统过载),并且您限制在这些线程中执行的操作(例如,java:comp 查找不起作用、事务行为可能受到限制等)。

【讨论】:

    猜你喜欢
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多