Je travaille avec Spring JMS DefaultMessageListenerContainer et initialise les files d'attente sur la méthode init du ressort et détruit la méthode listnereContainer on destroy. Mais quand je arrêter le serveur tomcat en utilisant "./catalina.sh stop" commande, j'obtenir l'exception suivante quand je outil le vidage de fil:Spring-ActiveMQ: DefaultMessageListenerContainer n'est pas détruit
"localhost-StartStop-2" # 155 démon prio = 5 os_prio = 0 tid = 0x00007fd4c0015800 nid = 0x5265 dans Object.wait() [0x00007fd4c4f60000] java.lang.Thread.State: WAITING (sur le moniteur d'objet) at java.lang.Object.wait (méthode native) - en attente sur < 0x00000007752ccae8> (a java.lang.Object) à java.lang.Object.wait (Object.java:502) à org.springframework.jms.listener.DefaultMessageListenerContainer.doShutdown (DefaultMessageListenerContainer.java:545) - verrouillé < 0x00000007752ccae8> (a java.lang.Object) à org.springframework.jms.listener.AbstractJmsListeningContainer.shutdown (AbstractJmsListeningContainer.java:237) à org.springframework.jms.listener.AbstractJmsListeningContainer.destroy (AbstractJmsListeningContainer. java: 177) à com.bng.ocg.queue.QueueConnection.destroy (QueueConnection.java:71) à sun.reflect.NativeMethodAccessorImpl.invoke0 (native Method)
Voici init et détruire les méthodes :
public void init() {
try {
connection = pooledConnectionFactory.createConnection();
session = connection.createSession(false,
Session.DUPS_OK_ACKNOWLEDGE);
updateDefaultQueue();
updateDefaultConsumer();
} catch (JMSException e) {
Logger.sysLog(LogValues.error, this.getClass().getName(), coreException.GetStack(e));
} catch (Exception e) {
Logger.sysLog(LogValues.error, this.getClass().getName(), coreException.GetStack(e));
}
}
public void destroy(){
for(DefaultMessageListenerContainer defaultMessageListenerContainer : defaultMessageListenerContainersCdrQueue)
defaultMessageListenerContainer.destroy();
for(DefaultMessageListenerContainer defaultMessageListenerContainer : defaultMessageListenerContainersDataSyncMsgQueue)
defaultMessageListenerContainer.destroy();
for(DefaultMessageListenerContainer defaultMessageListenerContainer : defaultMessageListenerContainersUrlHitterMsgQueue)
defaultMessageListenerContainer.destroy();
try {
session.close();
} catch (JMSException e) {
Logger.sysLog(LogValues.error, this.getClass().getName(), coreException.GetStack(e));
}
try {
connection.close();
} catch (JMSException e) {
Logger.sysLog(LogValues.error, this.getClass().getName(), coreException.GetStack(e));
}
pooledConnectionFactory.clear();
}
private void updateDefaultQueue() {
for (int i = 0; i < cdrQueueInitialLength; i++) {
cdrQueueList.add(cdrQueueNamePrefixString + i);
}
for (int i = 0; i < dataSyncMsgQueueInitialLength; i++) {
dataSyncMsgQueueList.add(dataSyncMsgQueueNamePrefixString + i);
}
for (int i = 0; i < urlHitterMsgQueueInitialLength; i++) {
urlHitterMsgQueueList.add(urlHitterMsgQueueNamePrefixString + i);
}
}
private void updateDefaultConsumer() throws JMSException
{
/*for (int i = 0; i < cdrQueueInitialLength; i++) {
defaultMessageListenerContainer = defaultMessageListenerContainerFactory
.getObject();
defaultMessageListenerContainer.setDestination(session
.createQueue(cdrQueueList.get(i)));
defaultMessageListenerContainer
.setMessageListener(cdrMessageListener);
defaultMessageListenerContainer.start();
defaultMessageListenerContainersCdrQueue
.add(defaultMessageListenerContainer);
}*/
for (int i = 0; i < dataSyncMsgQueueInitialLength; i++) {
defaultMessageListenerContainer = defaultMessageListenerContainerDataSyncFactory
.getObject();
defaultMessageListenerContainer.setDestination(session
.createQueue(dataSyncMsgQueueList.get(i)));
defaultMessageListenerContainer
.setMessageListener(dataSyncMsgListener);
defaultMessageListenerContainer.start();
defaultMessageListenerContainersDataSyncMsgQueue
.add(defaultMessageListenerContainer);
}
for (int i = 0; i < urlHitterMsgQueueInitialLength; i++) {
defaultMessageListenerContainer = defaultMessageListenerContainerUrlHitterFactory
.getObject();
defaultMessageListenerContainer.setDestination(session
.createQueue(urlHitterMsgQueueList.get(i)));
defaultMessageListenerContainer
.setMessageListener(urlHitterMsgListener);
defaultMessageListenerContainer.start();
defaultMessageListenerContainersUrlHitterMsgQueue
.add(defaultMessageListenerContainer);
}
}
Une suggestion pour résoudre ce problème?