2013-03-04 32 views
9

Sau một vài truy vấn được thực hiện tôi nhận được thông báo sau từ Hibernate:Hibernate - Buộc dọn dẹp tài nguyên container trên hoàn thành giao dịch

HHH000106: Forcing container resource cleanup on transaction completion 

Tất cả mọi thứ dường như được làm việc tốt, không có lỗi, nhưng tôi thiên đường không tìm thấy bất kỳ lời giải thích nào về ý nghĩa của thông điệp này, hoặc nếu tôi nên làm bất cứ điều gì về nó.

Tôi đang sử dụng Hibernate/JPA với các giao dịch toàn cầu JTA.

Bất kỳ ý tưởng nào?

+0

Cố gắng đặt thuộc tính 'hibernate.connection.release_mode' thành' on_close' và xem bạn vẫn nhận được thông báo hay chưa. – DDK

+1

ông rõ ràng googled trước khi đặt câu hỏi. Tôi không nghĩ rằng ông đang tìm kiếm giải pháp đó, tôi có thể sai tuy nhiên – ant

+0

Vâng, tôi đang tìm kiếm một lời giải thích, không nhất thiết phải là một giải pháp :) – Vedran

Trả lời

6

(Để hoàn thành câu trả lời xwoker của.)

Các nguồn lực chúng ta đang nói về là:

  • ResultSet
  • Tuyên Bố

nhắn này xảy ra bởi vì bạn để lại một số trong những nguồn lực mở tức là bạn đã không gọi phương thức close() của mình. Do ConnectionReleaseMode hiện tại: các tài nguyên đó trở nên vô dụng và Hibernate thông báo cho bạn rằng nó đang gọi phương thức close() cho bạn.

Để tránh nhật ký này: chỉ cần gọi phương thức close() (trên (các) ResultSet và (các) Result) của bạn trước khi kết thúc giao dịch.

+0

Thật vậy, đã tìm thấy, đã đóng và cố định - Tôi có thể ngủ yên bình ngay bây giờ :) – Vedran

6

Thông báo này được sản xuất trong org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl (ít nhất là nơi duy nhất tôi tìm thấy nó được sử dụng) và được khai báo là INFO:

public void afterTransaction() { 
    transactionTimeOutInstant = -1; 
    if (connectionReleaseMode() == ConnectionReleaseMode.AFTER_STATEMENT || 
      connectionReleaseMode() == ConnectionReleaseMode.AFTER_TRANSACTION) { 
     if (hasRegisteredResources()) { 
      LOG.forcingContainerResourceCleanup(); 
      releaseResources(); 
     } 
     getLogicalConnection().aggressiveRelease(); 
    } 
} 

Nếu một số ConnectionReleaseModes nhất định được sử dụng và có tài nguyên đã đăng ký, Hibernate thông báo cho bạn biết rằng nó sẽ phát hành các tài nguyên này.

Nếu đây là hành vi mong muốn, đừng làm gì cả.

1

Thông báo nhật ký này HHH000106: Forcing container resource cleanup on transaction completion cũng có thể được kích hoạt bởi các vấn đề an toàn luồng, nếu phiên Hibernate vô tình được chia sẻ giữa các luồng khác nhau (và do đó các giao dịch khác nhau). Nếu vậy, nó có thể được theo sau bởi một ngoại lệ như Trying to return an unknown connection2! và rò rỉ kết nối JDBC từ nhóm kết nối.

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