2014-07-01 15 views
7

Właśnie zaktualizowaliśmy do wersji Spring 4 i JMS 2.0. Używamy CachingConnectionFactory i JmsTemplate publikować wiadomości i zauważył, że podczas publikowania do miejsca przeznaczenia, pierwsze prace próby, a następnie dalsze próby publikowania do tego samego miejsca przeznaczenia spowodować następujący wyjątek:Spring 4 CachingConnectionFactory z JMS 2.0 nie buforuje poprawnie producentów

spowodowane: javax. jms.IllegalStateException: producentem jest zamknięty

Wszystko działało dobrze z wiosny 3.2 i JMS 1.1 więc zrobiłem kilka kopanie, aby zobaczyć na czym polega problem i wydaje się, że problem jest w klasie CachedMessageProducer. Zwykle ta klasa ponownie implementuje wszystkie metody interfejsu MessageProducer. W szczególności istnieje metoda, która jest ponownie wdrażana i tylko resetuje właściwości, ale utrzymuje producenta przy życiu (ponieważ jest to fabryka pamięci podręcznej) po wysłaniu wiadomości za pomocą JmsTemplate.

Jednak na wiosnę 4 została wprowadzona nowa metoda o nazwie getProxyIfNecessary, która określa, czy używany jest JMS 2.0, a gdy wykryje JMS 2.0, utworzy serwer proxy Jms2MessageProducerInvocationHandler. Metoda invoke tego serwera proxy deleguje wszystkie wywołania do oryginalnego obiektu MessageProducer i wydaje się, że omija wywołania metod w CachedMessageProducer. Końcowym rezultatem jest to, że metoda close zostaje wywołana na oryginalnym obiekcie MessageProducer (czego nie chcemy, ponieważ powinna być buforowana). Oznacza to, że przyszłe próby publikacji podają wyjątek, że producent został zamknięty.

Czy ktoś jeszcze miał ten problem wcześniej? Nie jestem pewien, czy robię coś nie tak, lub jeśli jest to błąd z nową obsługą JMS 2.0 na wiosnę.

+0

Zakładam, że to błąd i utworzyłem bilet Jira: https://jira.spring.io/browse/SPR-11949 – cshannon

Odpowiedz

3

Tak jak się dowiedziałeś, jest to w rzeczywistości błąd, który został rozwiązany w nadchodzących 4.0.6 i 4.1.RC1. Dzięki!

Powiązane problemy