【问题标题】:Managed Executor Service in TomEETomEE 中的托管执行器服务
【发布时间】:2017-10-05 16:09:52
【问题描述】:

我有一台具有 48 个 CPU 的服务器,在 TomEE+ 7.0.2 上托管 Java EE 7 REST API。

一些 API 在运行并行算法时需要使用尽可能多的 CPU。 并行化部分不需要任何数据库或其他资源,只需在共享的 double[][] 矩阵中进行一些繁重的工作。

我通常在 EJB 上下文中工作,但对于这个特定的实例,它不是必需的(也最好不是)。

到目前为止,我正在使用

ExecutorService pool = Executors.newFixedThreadPool(maxThreads); 

为了实例化一个执行器,但是由于这似乎在操作系统级别产生了实际线程,所以我不是它的忠实粉丝 - 在一些 JMeter 负载测试之后,它甚至导致了一个点,整个 bash 被阻塞了在硬重启之前,我什至无法对服务器进行 SSH 连接。

我偶然发现了“托管执行器服务”的概念,但我在网上找不到有关如何使用它(以及配置它)的教程/示例。

有人可以分享以下想法吗?

a) 如何在 TomEE 中配置线程池(例如通过 server.xml、context.xml 或 tomee.xml),代码示例将不胜感激?

b) 有没有办法只使用一些默认线程池(并且足够聪明以至于不需要调整,如果没有,我可以从哪里开始调整)?

c) 我如何在 Java 中查找线程池 - 首选通过 JDNI 查找?

d) 如果我曾经决定将该资源作为 EJB 的一部分,那么注入的代码会是什么样子?

我的应用程序上下文在 server.xml 中指定为“myContext”,所以如果您提供示例,您能否准确地指出查找字符串的外观?

除了我非常简单地安装了 TomEE+ 7.0.2 之外,到目前为止我没有接触任何配置。

非常感谢您的帮助!

丹尼尔

【问题讨论】:

    标签: service parallel-processing apache-tomee executor tomee-7


    【解决方案1】:

    这是一个很好的入门教程:https://martinsdeveloperworld.wordpress.com/2014/02/25/using-java-ees-managedexecutorservice-to-asynchronously-execute-transactions/

    如果你注入@ManagedExecutorService,TomEE 应该给你一个默认的服务和池。如果没有,那可能是一个错误:

    @Resource
    private ManagedExecutorService mes;
    

    你应该可以像这样在 TomEE.xml 中配置它(我没有测试这个):

    <Resource id="myManagedExecutorService" type="javax.enterprise.concurrent.ManagedExecutorService">
        Core = 5
        Max = 25
        KeepAlive = 5 s
        Queue = 15
        WaitAtShutdown = 30 seconds
    </Resource>
    

    在你的代码中:

    @Resource("myManagedExecutorService")
    private ManagedExecutorService mes;
    

    我通过查看 service-jar.xml 发现了这一点。在我看来,您可能还想要 JMS 和 @Asyncronous,它们比 ManagedExecutorService 更好

    【讨论】:

    • 您的资源声明无效,因为它不是有效的 XML
    • 它既是有效的 XML 也是有效的配置。它是包装在 XML 节点中的 java 属性
    • 哦,我明白了,对不起。我以为它们应该是Resource 属性
    • 是的。他们这样做的原因是,可以从属性文件中复制相同的值,该文件可用于配置服务器
    • 谢谢,很高兴知道。实际上,我正在研究让它(ManagedExecutorService 和包javax.enterprise.concurrent)在普通的 Tomcat 8.5 中工作。你知道这是否可能吗?
    【解决方案2】:

    你可以在这里找到文档http://tomee.apache.org/admin/configuration/resources.html#_managedexecutorservice

    这些执行器的主要优点是:

    1. 它在容器中配置 - 无需自定义应用配置,但仍可在不重新编译/更改应用的情况下进行调整
    2. 它不受 @Asynchronous 限制,它没有定义任何特定的池,因此可移植性不是很高,而这些托管池非常统一
    3. 这些池对“企业”友好,因为您有侦听器来添加安全性和审核
    4. 这些池传播一些上下文(通常是安全和 jndi/类加载器)

    在电影中,我们是 ali

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      • 2022-06-23
      相关资源
      最近更新 更多