2010-09-07 31 views
7

Đã có nhiều bài đăng đăng nhập hoạt động khác nhau (bắt đầu, cam kết & rollback) của trình quản lý giao dịch của Spring. Tuy nhiên, gần đây tôi đã gặp một vấn đề bế tắc mà chỉ ghi lại hoạt động là không đủ.Cách đăng nhập nội dung giao dịch Xuân

Vấn đề cơ bản trong mã của chúng tôi là việc sử dụng lộn xộn các tuyên truyền giao dịch REQUIRED và REQUIRES_NEW. Có rất nhiều cuộc gọi phương thức qua lại mà chúng tôi kết thúc với rất nhiều giao dịch được xếp chồng lên nhau. Than ôi, cơ sở mã là rất lớn và giải pháp cấp bách ... (Chúng ta đều biết điều này là gì.)

Vấn đề là bế tắc vì mã được thêm vào thực thể truy vấn trong một giao dịch đã được sửa đổi tuần tự trong một giao dịch khác Giao dịch. Spring spits ra một ngoại lệ cho biết cập nhật của thực thể X lần vì nó bị khóa. Bây giờ, biết điều này là tốt đẹp, nhưng làm thế nào để tìm thấy mã bị lỗi: Truy vấn mà các khóa đầu.

Câu hỏi của tôi (cuối cùng): Có cách nào để ghi nhật ký các thực thể được thêm vào giao dịch không? Bằng cách này, tôi có thể tìm kiếm các giao dịch khóa thực thể mà Spring đang phàn nàn.

Cảm ơn! :-)

Trả lời

0

Cố gắng đăng nhập truy vấn trong ORM của bạn. Có thể nó sẽ là cách dễ dàng hơn để tìm giao dịch "xấu".

1

Đại biểu mùa xuân cho người quản lý giao dịch, do đó Spring không biết thực thể nào được xúc động trong giao dịch, người quản lý giao dịch thực hiện. Như Donz đã nói, nhìn vào người quản lý giao dịch để biết thông tin là phương pháp điều tra tốt nhất.

Bạn cũng có thể xem tất cả các định nghĩa giao dịch và xóa REQUIRES_NEW khỏi mọi thứ ngoại trừ chỉ ghi/viết luôn các phương thức kiểu (như kiểm tra hoặc ghi nhật ký). Nếu bạn có REQUIRES_NEW trong logic nghiệp vụ chính của bạn, đó là lỗi hoặc một số thiết kế rất kỳ quặc. Loại bỏ một cách mù quáng nó có thể có ít tác dụng phụ hơn bạn nghĩ.

Các vấn đề liên quan