Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Chú thích Seam @Transactional không hoạt động?

Tôi không hiểu rõ về cách thức hoạt động của Seam nên tôi xin lỗi trước nếu câu trả lời này không phù hợp.

Tôi nhận thấy rằng phương thức @Transactional protected . Điều này ngụ ý với tôi rằng nó đang được gọi bằng một phương thức nội bộ khác.

Với Spring's AOP, bạn đánh dấu công chúng phương thức với @Transactional được bao bọc và thay thế bằng proxy giao dịch. Khi một lớp bên ngoài gọi public phương thức, nó đang gọi proxy tạo thành giao dịch. Nếu lớp bên ngoài gọi một public khác phương pháp đó không được đánh dấu bằng @Transactional mà sau đó gọi một phương thức nội bộ, nghĩa là sẽ không có giao dịch nào được tạo vì proxy hoàn toàn không được gọi.

Vào mùa xuân, ngay cả khi bạn thay đổi doWork() của mình phương pháp công khai, vấn đề tương tự sẽ xảy ra. Không có giao dịch vì đối tượng proxy không được gọi. Các cuộc gọi phương thức được thực hiện bên trong lớp sẽ không thực hiện cuộc gọi đến đối tượng proxy.

Đọc nhanh một số tài liệu dường như cho thấy rằng, giống như Spring AOP, Seam đang sử dụng CGLib ủy quyền . Câu hỏi đặt ra là liệu nó có thể ủy quyền cho tất cả các phương thức - ngay cả khi chúng được gọi từ bên trong đối tượng được ủy quyền. Xin lỗi vì đã làm mất thời gian của bạn nếu câu trả lời này không áp dụng.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Di chuyển Java 11 - createConnectionBuilder () từ PoolDataSourceImpl xung đột với createConnectionBuilder () từ javax.sql.DataSource

  2. 'KHÔNG THÍCH' trong một truy vấn SQL

  3. THÊM trên SearchOracle.com

  4. Oracle - Chuyển đổi giá trị từ hàng thành phạm vi

  5. EF 4, cách thêm các lớp từng phần