gpt4 book ai didi

java - Glassfish 4 中 ManagedExecutorService 的设置被忽略

转载 作者:行者123 更新时间:2023-12-03 23:08:28 24 4
gpt4 key购买 nike

在描述我的问题之前,我想概述一下我希望通过我的应用程序实现的目标。

我基本上想下载可能有大量文件,并定义最大并行下载数。

我想在应用程序服务器上运行此应用程序并为此选择 Glassfish 4(我想尝试 Netbeans 并且 Glassfish 的集成很好,没有其他原因)。

首先,我尝试使用异步 ejb 方法实现它,但为了限制并行下载的数量,我将不得不操纵 ejb 容器池,我真的不想弄乱它。

所以我认为我可以充分利用 Java EE 并发实用程序 (JSR 236),尤其是 ManagedExecutorService

我的代码:

@Stateless
public class DownloaderBean implements DownloaderService {

@Resource(name = "concurrent/downloaderExecuterService")
ManagedExecutorService downloadExecutorService;

@Override
public List<Future<Boolean>> executeDownloadTasks(List<DownloadCallable> tasks) {
try {
return downloadExecutorService.invokeAll(tasks);
} catch (InterruptedException ex) {
Logger.getLogger(DownloaderBean.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
}
}

下载本身很完美,但对执行者施加限制对我来说不起作用。 (我提交了200个DownloadCallable,全部同时执行)

我对“concurrent/downloaderExecuterService”的设置:

  • 启用=真
  • 线程优先级=5
  • longrunningtasks=true
  • hungafterseconds=0
  • 核心池大小=7
  • 最大池大小=10
  • keepaliveseconds=60
  • threadlifetimeseconds=0
  • 任务队列容量=2147483647

我的理解是 maximumpoolsize 我定义了 ManagedExecutorService 允许执行多少个并行线程, taskqueuecapacity 定义了多少个线程可以排队等待执行。

因此队列中应该有 10 个并行下载,最大为 2147483647,但这是行不通的。

是我的设置有误还是我遗漏了什么?

预先感谢您的帮助。

最佳答案

您必须使用“查找”而不是“名称”进行注入(inject)

@Resource(lookup = "concurrent/downloaderExecuterService")
ManagedExecutorService downloadExecutorService;

关于java - Glassfish 4 中 ManagedExecutorService 的设置被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20826182/

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