Tôi đang gỡ lỗi ứng dụng web của mình. Nó được cấu hình để tạo ra một bean DataSourceTransactionManager và cũng là một bean HibernateTransactionManager khi khởi động. Đây không phải là cố ý nhưng do sự phụ thuộc của bên thứ ba gây ra. Hiệu ứng có vẻ lành tính. Những gì tôi nhìn thấy thông qua gỡ lỗi là khi chúng ta tồn tại một đối tượng thông qua một DAO Hibernate dựa trên - DataSourceTransactionManager được gọi và không phải là HibernateTransactionManager (cả hai đều được gọi là 'transactionManager'). Spring Javadoc ngụ ý (tôi nghĩ rằng, đọc lại nó bây giờ) điều này là tốt cho các nguồn lực địa phương - đó là tình hình của chúng tôi. I E. nó không phải là một môi trường dựa trên JTA phân tán.Có thể sử dụng DataSourceTransactionManager cho ORM persistence thay vì HibernateTransactionManager không?
Câu hỏi của tôi là - có bất kỳ tác động tiêu cực nào của việc không sử dụng HibernateTransactionManager cho sự kiên trì dựa trên ORM hay không. Tôi có thể thay đổi cấu hình để làm cho HibernateTransactionManager được sử dụng thông qua một vòng loại trên chú thích @Transactional trên DAO của chúng tôi.
Mọi thứ hoạt động tốt trong thử nghiệm đơn vị đơn giản, thiết lập thử nghiệm tích hợp nhưng tôi lo ngại về việc mở rộng quy mô sản xuất khi chúng tôi có hàng nghìn người dùng và mức độ đồng thời cao.
TIA, hy vọng điều này không quá tối nghĩa.
Spring 3.0.x BTW.
Đây là tài liệu Spring 3.1.
Sec 11.9 "Giải pháp cho vấn đề thường gặp".
Sử dụng đúng triển khai PlatformTransactionManager dựa trên lựa chọn công nghệ và yêu cầu giao dịch của bạn.
+1 Hmm. hấp dẫn. cảm ơn bạn. sẽ thử một trong các thử nghiệm này. Những gì tôi thấy là các cuộc gọi DAO đang diễn ra trong các giao dịch, và các cuộc gọi DAO getSession() - vì vậy Spring SessionFactoryUtils tay trở lại một phiên mới và tất cả có vẻ tốt. nhưng như bạn nói - tần suất chúng ta nhớ để nghỉ ngơi. –
Đẹp nhất. Tôi đã thử nghiệm này. Gây ra một ngoại lệ sau khi lưu, với Hibernate tx mgr tiết kiệm được cuộn lại. Với DataSourceTransactionManager nó không phải. –
Bạn có thể cung cấp tài liệu chính thức hỗ trợ từ của bạn "Không có trình quản lý txn ngủ đông tất cả các cuộc gọi được thực hiện cho HibernateOperations sẽ ở bên ngoài một giao dịch và trên một phiên riêng biệt"? Tôi đang sử dụng DataSourceTransactionManager + Hibernate. – DerekY