Witam
Mam oto taki problem. Pisze aplikację w której intefejsem jest servlet http który otrzymuje żądanie, parsuje je (sprawdzając przy tym poprawność żądania) i wykorzystując wstrzyknięty do servletu bean ejb dodaje wiadomości na kolejke jms. Z tej kolejki wiadomości zbierane są przez message driven beana. Mój problem polega na tym że chciałbym aby cały ten proces był transakcyjny.
Aplikacja ta ma przetwarzać b.dużo danych (zapytanie http może mieć 1,5 gb w contencie) na podstawie tego zapytania servlet może wygenerować powiedzmy milion wiadomości które wrzuca na kolejke. Całość dzieje sie w czesie rzeczywistym, ściągamy blok danych parsujemy go sprawdzamy poprawność danych tworzymy wiadomości i wrzucamy je na kolejke poprzez bezstanowego ejb'ka (i tak dla każdego bloku). Mój problem polega na tym że np w połowie przetwarzania danych w n-tym bloku requestu parametry okażą sie niepoprawne i chciałbym wykonać rollback czyli nie przyjmuje kolejnych bloków danych oraz wycofane sa wiadomości dotychczas puszczone na kolejke. O ile beany (te które dodają wiadomości na kolejke oraz message driven beany je odbierające) są zarządzane przez kontener to servlet musi być transakcją zarządzaną przez użytkownika. Pytanie moje brzmi jak taki mechanizm zorganizować to znaczy czy to jest transakcja rozproszona a jeśli tak (lub nie) to jak ją w servlecie obsłużyć. Korzystam z JEE5 oraz servera JBOSS.