2011-07-11 47 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