2

有一个 Java EE 应用程序,我们可以在其中处理成批的作业。处理涉及调用具有限制的外部服务,因此我们只能同时发送 N 个请求。这个瓶颈必须在我们的应用程序逻辑中实现,我想知道我们怎样才能以最好的方式实现这一点。幸运的是,集群不是必需的,因此我们可以将问题限制在单个服务器实例上。

  • 我的第一个想法是使用ExecutorServiceThreadPool具有 N 个工作线程的 a 支持的对象,以便该ThreadPool对象充当调节器。当然,这不是 EE 解决方案。

  • 我的第二个想法是以某种方式ThreadPool在容器中配置这样一个并使用它,但到目前为止我还没有找到任何这样的功能。

  • 第三个想法是在EJB中使用Semaphore(N)对象。@Singleton

  • 第四个想法是以某种方式创建一个有限的无状态会话 bean 池,并将有限资源访问权放入其中。由于 bean 编号由容器管理,因此资源使用也会受到限制

(澄清一下:一般的解决方案是最好的,但众所周知,我们在 Glassfish 3.1.1 上运行,可能稍后在 JBoss 6.x 上运行)

您能否为这个问题推荐一个好的架构和/或评论我的想法以帮助我做出决定?

4

2 回答 2

1

你为什么不使用Works在这里查看有关如何在 JBoss 和 Weblogic 中使用 Works 的概述。我不了解 Glasshfish,我现在将研究留给您;)
简而言之,Works 是符合 EE 的线程。

于 2013-04-17T13:34:35.663 回答
1

Java EE 中并发消息处理的规范解决方案是使用 MDB。您可以通过限制 MDB 池大小来限制并发运行的任务数。

于 2013-04-17T13:49:01.540 回答