2012-01-04 34 views
15

Làm thế nào đúng "vòng đời" của một phiên Hibernate dưới mùa xuân nên được thực hiện?Spring + Hibernate session lifecycle

SessionFactory được Spring tạo tự động và đang lấy kết nối DB từ hồ bơi kết nối Glassfish. Hiện tại tôi đang có phiên Hibernate qua SessionFactory.getCurrentSession(). Sau đó, tôi bắt đầu giao dịch, thực hiện công việc và sau đó commit() hoặc rollback() ở cuối. Tôi có cần thực hiện bất kỳ hành động nào khác như disconnect(), close(), flush() hoặc bất kỳ hành động nào khác vào bất kỳ lúc nào để kết nối sẽ được trả lại đúng cách vào hồ bơi hay mọi thứ đã được Spring tự động thực hiện chưa?

Với nhiều phương pháp này, có một chút khó hiểu đối với tôi vào lúc này để hiểu khi nào nên làm gì, có thể ai đó có thể chỉ ra đúng hướng?

Trả lời

12

Khi SessionFactory được tạo tự động bởi Spring, Spring framework sẽ xử lý việc đóng kết nối. Khám phá Spring Resource Management

Nếu bạn muốn kiểm tra. Bạn có thể kiểm tra nhật ký, nếu bạn đang sử dụng tính năng ghi nhật ký cho ứng dụng của mình. Nó sẽ giống như:

(chính) INFO [AnnotationSessionFactoryBean] Đóng Hibernate SessionFactory

tôi nhận được dòng sau từ this link

Hợp đồng chính ở đây là việc tạo ra các thể hiện Session . Thông thường một ứng dụng có một phiên bản SessionFactory và các chủ đề phục vụ các yêu cầu của khách hàng có được các phiên Phiên từ nhà máy này. Trạng thái bên trong của SessionFactory là không thay đổi. Khi đã là , trạng thái nội bộ này được đặt. Trạng thái nội bộ này bao gồm tất cả siêu dữ liệu về Ánh xạ đối tượng/quan hệ. Người triển khai phải là chủ đề an toàn.

+0

SessionFactory có trên hệ thống của tôi được định cấu hình là bean đơn, vì vậy nó sẽ không bao giờ đóng ... – Laimoncijus

+0

@Laimoncijus: SessionFactory theo mặc định singleton. Trả lời sửa đổi cho phù hợp. Kiểm tra nó –

+0

Vì vậy, bạn không cần phải cấu hình singleton sessionfactory. Ngoài ra, hãy kiểm tra câu trả lời này: http://stackoverflow.com/questions/8523332/close-opened-hibernation-sessions-if-exist/8530891#8530891 –

2

Hy vọng this liên kết sẽ hướng dẫn bạn về phiên và giao dịch.

Sau đó, tôi bắt đầu giao dịch, thực hiện công việc rồi cam kết() hoặc quay lại() ở cuối. Tôi có cần thực hiện bất kỳ hành động nào khác như ngắt kết nối(), đóng(), tuôn ra() hoặc bất kỳ người nào khác vào bất kỳ lúc nào để kết nối có được là được trả lại đúng cách vào hồ bơi hay mọi thứ đã được tự động hoàn thành trước mùa xuân chưa?

Khi bạn gọi cam kết() trên giao dịch, nó sẽ tự động đóng phiên, cuối cùng gọi phương thức đóng trên kết nối để trở về hồ bơi của nó.

3

Khi bạn đang thực hiện truy vấn ngủ đông thông qua SessionFactory.getCurrentSession(), Spring thực hiện nhiệm vụ cần thiết là mở và đóng kết nối. SessionFactory bạn đang sử dụng trong cấu hình mùa xuân cũng gọi phương thức config.buildSessionFactory trong nội bộ.

Hầu hết điều này xảy ra trong việc triển khai AbstractSessionFactoryBean. Việc đóng kết nối được thực hiện bằng hibernate trong lớp SessionFactoryImpl bằng cách sử dụng câu lệnh settings.getConnectionProvider(). Close(); . Trong ngắn hạn, hibernate làm mọi thứ cho bạn.Mùa xuân chỉ gọi nó là sự giúp đỡ khi cần thiết.

6

Các chính sách về cách thức phát hành kết nối trở lại hồ bơi kết nối không có gì để làm với mùa xuân Nó được cấu hình bởi Hibernate bản thân thông qua các tham số cấu hình hibernate.connection.release_mode, được xác định bởi các enum trong org.hibernate.ConnectionReleaseMode

Bắt đầu từ phiên bản 3.1+, giá trị mặc định của hibernate.connection.release_modeauto giá trị ConnectionReleaseMode tương ứng phụ thuộc vào việc sử dụng giao dịch JTA hay JDBC. Trong trường hợp giao dịch JDBC được sử dụng, nó được đặt thành ConnectionReleaseMode.AFTER_TRANSACTION (ví dụ: after_transaction).

Hành vi của ConnectionReleaseMode.AFTER_TRANSACTION là: Kết nối sẽ được trở lại hồ bơi kết nối sau mỗi lần giao dịch, có nghĩa là bằng cách gọi hoặc transaction.commit() hoặc transaction.rollback(), cũng như kêu gọi session.close()session.disconnect()

Bạn có thể xác minh hành vi này trong hibernate documentation Section 11.5.

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