2017-06-05 58 views
0

,但是有一些關於未關閉的JMS連接的警告,然後由ActiveMQ關閉。 MDB得到一個messageHandler注入,它獲得注入了replysender的方法在下面給出。MessageDrivenBean:AMQ122000:我正在關閉一個JMS連接,當您通過MDB發送某些消息時,您仍然打開

這是我得到的警告:當試塊已完成下面的代碼中

[org.apache.activemq.artemis.jms.client] (Finalizer) AMQ122000: I''m closing a JMS connection you left open. Please make sure you close all JMS connections explicitly before letting them go out of scope! see stacktrace to find out where it was created: java.lang.Exception 
at org.apache.activemq.artemis.jms.client.ActiveMQConnection.<init>(ActiveMQConnection.java:155) 
at org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createConnectionInternal(ActiveMQConnectionFactory.java:750) 
at org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:233) 
at org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:229) 
[...] 

警告時(不是每個時間)(如此直接log.debug後(..)) :

private Message doSendAndReturn(XmlMessageCreator messageCreator) throws JMSException { 
    Message message = null; 
    try (Session session = cf.createConnection().createSession(false, Session.AUTO_ACKNOWLEDGE);) { 
     MessageProducer producer = session.createProducer(jmsReplyQueue); 
     message = messageCreator.createMessage(session); 

     producer.send(message); 
     log.debug("JMSTemplate sended message to myEnvironment with ID " 
       + message.getJMSMessageID() 
       + "\n Using Thread " 
       + Thread.currentThread().getName()); 
    } 
    return message; 
} 

我仍然讀取即使世界的連接工廠但「CF」無參考是經由上下文中定義的全局單變量這些警告也發生:

@Resource(lookup = "java:/myProject_myEnvironment_factory") 
private ConnectionFactory cf; 

當在log.debug(...)上設置一個斷點時,我可以看到它似乎工作了一段時間,但有時卻不行。這種方法在前三次工作時被調用約7次,然後一次拋出警告四次(可能也是前一次調用),等等。 每次我在webapp中執行特定的任務時,這都是可重複的。

我不知道這裏出了什麼問題。

任何意見將不勝感激。提前致謝。

回答

0

我認爲問題在於雖然會話對象是在try-with-resource部分中定義的,但是在try-with-resource部分中沒有顯式變量用於連接。

try (Session session = cf.createConnection().createSession(false, Session.AUTO_ACKNOWLEDGE);) { 

到:

對其進行更改之後

try (
      Connection connection = cf.createConnection(); 
      Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
     ) { 

我沒有得到警告了。 謝謝傾聽。

相關問題