Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Adnotacja Seam @Transactional nie działa?

Nie wiem, jak działa Seam, więc z góry przepraszam, jeśli ta odpowiedź nie ma zastosowania.

Zauważyłem, że metoda, która jest @Transactional jest protected . To sugeruje mi, że jest wywoływany przez inną metodę wewnętrzną.

Dzięki AOP firmy Spring oznaczasz publiczne metody z @Transactional które są pakowane i zastępowane przez proxy transakcji. Gdy klasa zewnętrzna wywołuje public jest to wywołanie proxy, który tworzy transakcję. Jeśli klasa zewnętrzna wywoła inny public metoda, która nie oznaczone @Transactional który następnie wywołuje metodę wewnętrzną, co oznacza, że ​​nie zostanie utworzona transakcja, ponieważ serwer proxy w ogóle nie jest wywoływany.

Wiosną, nawet jeśli zmienisz doWork() metody, aby być publicznym, ten sam problem by się zdarzył. Brak transakcji, ponieważ obiekt proxy nie jest wywoływany. Wywołania metod wykonane wewnątrz klasy nie powodują wywołania obiektu proxy.

Szybkie przeczytanie dokumentacji wydaje się wskazywać, że podobnie jak Spring AOP, Seam używa proxingu CGLib . Pytanie brzmi, czy jest w stanie przekazać wszystkie metody — nawet jeśli są wywoływane z obiektu proxy. Przepraszamy za marnowanie czasu, jeśli ta odpowiedź nie ma zastosowania.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SELECT DISTINCT CLOB_COLUMN Z TABELI;

  2. Oracle PL/SQL — kolekcje (tabele zagnieżdżone)

  3. słaba wydajność Hibernate select w porównaniu do bezpośredniego uruchamiania - jak debugować?

  4. Zapytanie o sprawdzenie rozmiaru tabeli w bazie danych Oracle

  5. Oracle Forms/Applications w Internet Explorerze 8 przy użyciu JInitatora