2017-06-05 4 views
0

MDB経由でいくつかのメッセージを送信すると、閉じられていないJMS接続に関する警告がActiveMQによって閉じられます。 MDBには、以下に示すreplyメソッドが与えられたreplysenderを取得する、messageHandlerを取得します。MessageDrivenBean:AMQ122000:開いたままのJMS接続を閉じています

これは私が得るか警告です:

[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; 
} 

theresのは、接続ファクトリが、「CF」への言及は、文脈によって定義されたグローバルシングルトン変数でないとき、私はまだこれらの警告も発生することをお読みください。

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

log.debug(...)でブレークポイントを設定すると、何度か動作するように見えることがありますが、時にはそうではないことがわかります。このメソッドは、最初の3回の作業が行われている間に約7回呼び出され、1回は警告を4回スローします(前回の呼び出しでも同様です)。 これは、Webアプリケーション内で特定のタスクを実行するたびに再現可能です。

私はここで何がうまくいかないのか分かりません。

アドバイスはありがたいです。前もって感謝します。

答えて

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); 
     ) { 

私はこれ以上の警告を取得しておりません。 お寄せいただきありがとうございます。

関連する問題