2014-07-01 11 views
7

Abbiamo appena effettuato l'aggiornamento a Spring 4 e JMS 2.0. Stiamo utilizzando un CachingConnectionFactory e un JmsTemplate di pubblicare messaggi e ho notato che quando si pubblica a una destinazione, i primi lavori tentativo e poi ulteriori tentativi di pubblicare alla stessa destinazione causare la seguente eccezione:Spring 4 CachingConnectionFactory con JMS 2.0 non corregge correttamente i produttori

causati da: javax. jms.IllegalStateException: il produttore è chiusa

Tutto ha funzionato bene con la Primavera 3.2 e 1.1 JMS così ho fatto un po 'scavare per vedere quale fosse il problema e sembra che il problema è nella classe CachedMessageProducer. Normalmente questa classe re-implementa tutti i metodi nell'interfaccia MessageProducer. In particolare, esiste un metodo close() che viene nuovamente implementato e che reimposterà solo le proprietà, ma manterrà il produttore attivo (poiché si tratta di un factory di memorizzazione nella cache) dopo l'invio di un messaggio utilizzando JmsTemplate.

Tuttavia, nella primavera 4 c'è un nuovo metodo chiamato getProxyIfNecessary che determina se JMS 2.0 viene utilizzato o meno e quando rileva JMS 2.0 crea un proxy Jms2MessageProducerInvocationHandler. Il metodo di richiamo di questo proxy sta delegando tutte le chiamate all'oggetto originale MessageProducer e sembra ignorare le chiamate di metodo in CachedMessageProducer. Il risultato finale è che il metodo close viene chiamato sull'oggetto originale MessageProducer (che non vogliamo poiché dovrebbe essere memorizzato nella cache). Ciò significa che i futuri tentativi di pubblicazione danno l'eccezione che il produttore è stato chiuso.

Qualcun altro ha già riscontrato questo problema? Non sono sicuro se sto facendo qualcosa di sbagliato o se questo è un bug con il nuovo supporto JMS 2.0 in primavera.

+0

Suppongo che questo sia un bug e ho creato un ticket Jira: https://jira.spring.io/browse/SPR-11949 – cshannon

risposta

3

Come hai scoperto tu stesso, questo è davvero un bug e questo è risolto nel prossimo 4.0.6 e 4.1.RC1. Grazie!

Problemi correlati