限制Java EE应用程序中的并发资源使用

时间:2013-04-17 13:31:41

标签: java ejb threadpool

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

  • 我的第一个想法是使用由{a}支持的ExecutorService 具有N个工作线程的ThreadPool以便ThreadPool对象 将担任监管机构。当然,这不是EE解决方案。

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

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

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

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

你能否为我提出一个很好的架构来解决这个问题和/或评论我的想法以帮助我做出决定?

2 个答案:

答案 0 :(得分:1)

为什么不使用作品?看看here,了解如何在JBoss和Weblogic中使用Works。我不知道Glasshfish,我现在就把研究留给你;)
简而言之,Works是符合EE标准的线程。

答案 1 :(得分:1)

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