为JMS队列创建JBoss连接池

时间:2011-07-11 16:03:58

标签: java jboss jms connection-pooling

我正在开发一个Web服务解决方案,该解决方案托管在JBoss 4.2.3服务器中,并连接到另一台服务器上托管的JMS队列。

到目前为止,每次调用Web服务时,我都会创建一个到JMS队列的新连接,这意味着每当打开一个新会话时,就会创建一个到JMS队列的新连接。

例如,我使用下面的代码创建Producer:

    InitialContext jmsContext;
    ConnectionFactory connectionFactory;
    Properties properties;
    Queue queue;

    properties = JMSProperties.getJNDIProperties();

    jmsContext = new InitialContext(properties);

    connectionFactory = (ConnectionFactory) jmsContext.lookup("ConnectionFactory");

    connection = connectionFactory.createConnection();

    session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

    queue = (Queue) jmsContext.lookup(queueName);

    producer = session.createProducer(queue);

    connection.start();

我知道这个实现效率不高,我正在考虑创建一个连接池,这样每次Web服务收到新请求时我都不必创建新连接。

如何配置JBoss以便它将为JMS队列创建连接池? ConnectionFactory类是否自动为我创建连接池?如果是这样,我该如何配置池的大小?

谢谢, 菲利普

2 个答案:

答案 0 :(得分:0)

此Wiki链接应该有所帮助:http://community.jboss.org/wiki/JBossJMSRA

=============================================== ======

<强>更新: 以下是post,其中包含有关配置的更多信息。我强烈建议您比较现有方法和此方法的已用时间。原因是这个interesting帖子表明JCA缓存没有出现在绑定到本地JNDI的远程连接工厂的图片中。如果是这种情况,你可以使用尼古拉斯提到的方法。基本上使用适当的钩子创建和缓存JMS连接以刷新该连接(在需要时)。

答案 1 :(得分:0)

从技术上讲,您只需要一个连接,因为它们是线程安全的。见How to handle a Connection object to remote jms server