Glassfish 3.1.2中连接工厂池大小配置的奇怪行为

时间:2013-09-08 20:07:08

标签: java-ee glassfish activemq message-driven-bean

我在j2ee世界中很新,我的MDB配置问题。 我们将Glassfish 3.1.2和ActiveMQ 5.6.0用于我们的JMS队列(不是主题,只是队列)。 我们已经在Glassfish中部署了一个企业应用程序,其中包含3个连接到3个不同JMS队列的MDB。

每个队列都具有以下配置(来自Glassfish管理控制台):

  • intial-pool-size:20
  • max-pool-size:64
  • resize-quantity:1

我们也将相同的配置添加到sun-ejb.xml文件中的METADATA项目文件夹中。

要检查其行为,每个MDB都有:

  1. 静态int变量(计数器)
  2. 私有(非静态)int变量(internalCounter)
  3. 一个构造函数,我们在其中增加静态计数器,将其值赋给internalCounter并将值显示在日志中。通过这种方式,我们为每个MDB实例提供“自定义”唯一ID
  4. 只有System.out.println(internalCounter)和Thread.sleep(2000)的“onMessage”方法(仅用于性能测试)
  5. 当我们使用大量消息(每秒20-30 msg)测试系统时,我们注意到我们的MDB无法以与我们将它们放入队列相同的速度处理消息,因此从ActiveMQ web界面我们看到每个队列的“排队消息”增量。

    检查日志,我发现:

    1. Glassfish为每个队列创建30个MDB实例
    2. Glassfish对每个队列总是使用相同的10个实例(实例#21到#30),而我的期望是Glassfish为每个队列使用全部30个MDB
    3. 我使用以下配置再次运行此测试(通过admin-console和xml项目文件):

      • intial-pool-size:0
      • max-pool-size:64
      • resize-quantity:1

      在日志中我发现Glassfish仅创建和使用10个MDB实例(#1到#10)

      拜托,你能帮助我吗?

      提前致谢,请原谅我的英语不好

      Alessio的

0 个答案:

没有答案