2011-07-11 51 views
0

我开发是一个JBoss 4.2.3服务器内承载和连接到正在另一台服务器上托管的JMS队列Web服务解决方案。创建JBoss的连接池的JMS队列

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

例如,我使用下面的代码来创建监制:

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

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

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

更新: 这里是post与参与配置的详细信息。我强烈建议比较现有方法和此方法的运行时间。原因是这个interesting后,这表明JCA缓存不会进入绑定到本地JNDI的远程连接工厂的图片。如果是这样的话,你可以使用尼古拉斯提到的方法。基本上创建并缓存JMS连接,并使用合适的钩子来刷新连接(需要时)。

+0

嗨,我已经改变了我的代码,尝试使用JBoss JMSRA连接(下面):connectionFactory =(ConnectionFactory)jmsContext.lookup(“java:/ JmsXA”); 但现在我得到的错误:javax.jms.InvalidDestinationException:没有这样的目的地:JBossQueue [queue]是否已经部署? 你知道我为什么得到这个错误吗? – Felipe

+0

你有集群化的Jboss环境吗?如果是,那么我相信你需要通过使用“/ JmsXA”而不是“java:/ JmsXA”来在全局JNDI中进行上下文查找。 – helios

+0

其实不,我只有一个JBoss。我是否必须改变JBoss配置文件中的任何内容才能使其工作? PS:我使用的是JBoss Messaging,而不是JBoss MQ。 – Felipe