2014-07-01 9 views
7

Wir haben gerade ein Upgrade auf Spring 4 und JMS 2.0 durchgeführt. Wir sind mit einem CachingConnectionFactory und JmsTemplate Nachrichten zu veröffentlichen und festgestellt, dass, wenn zu einem Ziel zu veröffentlichen, die ersten Arbeiten Versuch und dann weitere Versuche zum gleichen Ziel zu veröffentlichen, die folgende Ausnahme verursachen:Spring 4 CachingConnectionFactory mit JMS 2.0 wird nicht korrekt zwischengespeichert Hersteller

Verursacht durch: javax. jms.IllegalStateException: der Hersteller ist geschlossen

Alles hat gut funktioniert mit Feder 3.2 und JMS 1.1, so habe ich einige graben, um zu sehen, was das Problem war und es scheint, das Problem in der CachedMessageProducer Klasse. Normalerweise implementiert diese Klasse alle Methoden in der MessageProducer Schnittstelle neu. Insbesondere gibt es eine close() Methode, die neu implementiert wird und nur Eigenschaften zurücksetzt, aber den Hersteller am Leben erhält (da es sich um eine Zwischenspeicherungs-Factory handelt), nachdem eine Nachricht mit der JmsTemplate gesendet wurde. In Spring 4 gibt es eine neue Methode namens getProxyIfNecessary, die feststellt, ob JMS 2.0 verwendet wird, und wenn JMS 2.0 erkannt wird, wird ein Jms2MessageProducerInvocationHandler-Proxy erstellt. Die Aufrufmethode dieses Proxys delegiert alle Aufrufe an das ursprüngliche Objekt MessageProducer und scheint Methodenaufrufe im CachedMessageProducer zu umgehen. Das Endergebnis ist, dass die close-Methode für das ursprüngliche MessageProducer-Objekt aufgerufen wird (was wir nicht wollen, da es zwischengespeichert werden sollte). Dies bedeutet, dass zukünftige Veröffentlichungsversuche die Ausnahme bilden, dass der Produzent geschlossen wurde.

Hat jemand anderes dieses Problem schon einmal gehabt? Ich bin mir nicht sicher, ob ich etwas falsch mache oder ob dies ein Fehler mit der neuen JMS 2.0-Unterstützung im Frühjahr ist.

+0

Ich gehe davon aus, dass dies ein Fehler ist, und ich habe ein Jira-Ticket erstellt: https://jira.spring.io/browse/SPR-11949 – cshannon

Antwort

3

Wie Sie selbst herausgefunden haben, ist dies in der Tat ein Fehler und dies wird in den kommenden 4.0.6 und 4.1.RC1 gelöst. Vielen Dank!