gpt4 book ai didi

java - 在 Java EE 7 应用程序中使用 ThreadPoolExecutor 的 Drools 导致重新部署时出现问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:15:06 26 4
gpt4 key购买 nike

我们在 Weblogic 12.2.1 上的 JavaEE 7 应用程序中使用 Drools 6.3.0Final。当我们的应用程序最初部署时,我们看到 8 个名为“drools-worker-X”的线程,其中 X 的范围从 1 到 8(在具有 HT 的 4 核 CPU 上)。现在,当我们重新部署应用程序时,8 个线程仍处于“Park”状态,并创建了 8 个新线程(再次编号为 1 到 8)。这在每次重新部署时都会继续。

我们发现 org.drools.core.concurrent 包中的 ExecutorProviderImpl 类创建了一个新的 ThreadPoolExecutor,其 corePoolSize 和 maxPoolSize 均设置为 CPU 核心数,超时设置为 60 秒。一旦我们重新部署了一定次数,JVM 就会变慢并且我们的应用程序不再正常运行。

当我们的应用程序关闭时,有什么方法可以正确关闭这些工作线程吗?

最佳答案

您可以实现一个 Startup-EJB,它在一个带有 @PreDestroy 注释的方法中关闭 ExecutorService。我刚刚在我们自己的项目中对其进行了测试,它似乎非常有效。

import java.util.concurrent.ExecutorService;
import org.kie.internal.concurrent.ExecutorProviderFactory;
...

@Startup
@Singleton
public class PlausiServiceLifecycleManager {

/**
* Shuts down Drools' internal ExecutorService, so that its threads can terminate.
*/
@PreDestroy
public void shutdown() {
ExecutorService executor = (ExecutorService) ExecutorProviderFactory.getExecutorProvider().getExecutor();
executor.shutdown();
}


}

关于java - 在 Java EE 7 应用程序中使用 ThreadPoolExecutor 的 Drools 导致重新部署时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36985107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com