Używam zarządzania transakcjami przy użyciu Spring i Hibernate. Moja sytuacja jest następująca:
Mam fasoli który jest sorrounded przez transakcję i zadzwonić fasola B który jest zdefiniowany z transakcji w tym atrybucie „PROPAGATION_REQUIRED”Problem propagacji Spring Transaction
B w tym przypadku robi” t otworzyć nową transakcję, ale korzysta z istniejącej (patrz w dziennikach: "Uczestnictwo w istniejącej transakcji"). Jednak w przypadku, gdy metoda w B wyrzuci wyjątek runtimeException, w drodze powrotnej do A zmyje transakcję i spowoduje jej zaznaczenie do wycofania, nawet jeśli zewnętrzna metoda A złapie wyjątek i nie będzie wyrzuć to. Myślę, że to zachowanie jest złe, w tym przypadku chcę, aby A kontrolował transakcję, a B nie powinien w żadnym wypadku przerywać transakcji.
Czy istnieje sposób zdefiniowania B, aby otworzyć transakcję, jeśli nie została zdefiniowana żadna transakcja, ale DO NOTHING, jeśli jest już zawarta w transakcji exising i pozwolić wyższemu poziomowi podjąć decyzję o zatwierdzeniu lub wycofaniu?
Zobacz więcej odpowiedzi na ten temat w wątku w społeczności wiosennej here.
Mówi Pan, że nie ma na to rozwiązania w postaci gotowej do użycia. Nadal będę starał się znaleźć bardziej ogólne rozwiązanie, które wymaga mniej pracy, zanim oznaczysz tę odpowiedź jako najlepszą. – Spiderman
z pewnością nie ma potrzeby wybierania poprawnej odpowiedzi w ciągu godziny od pytania. Ale program byłby miły :-) –
Aby zamknąć tę sprawę, myślę, że żadne obejście nie pasuje do moich żądań. Dlatego też takie zachowanie według projektu wiosny wydaje mi się ograniczeniem. Jedynym realnym rozwiązaniem jest zastąpienie wiosennej implmentacji zgodnie z sugestią. – Spiderman