为JMS队列创建JBoss连接池



我正在开发一个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类是否自动为我创建连接池?如果是,我如何配置池的大小?

谢谢,菲利普

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

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

:这里是有关配置的更多信息的帖子。我强烈建议比较一下您现有的方法和这个方法的运行时间。原因是这篇有趣的文章表明,绑定到本地JNDI的远程连接工厂不会考虑JCA缓存。如果是这样的话,你可以使用尼古拉斯提到的方法。基本上是创建和缓存JMS连接,并使用合适的钩子来刷新该连接(当需要时)。

从技术上讲,您只需要一个连接,因为它们是线程安全的。参见如何处理到远程jms服务器的连接对象

最新更新