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アプリケーション内で特定のタスクを実行するたびに再現可能です。
私はここで何がうまくいかないのか分かりません。
アドバイスはありがたいです。前もって感謝します。