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