Tôi đang chạy một ứng dụng sử dụng Hibernate trên máy chủ Tomcat 8. Tôi muốn sử dụng một hồ bơi kết nối khác với Hibernate bởi vì họ làm cho nó khá rõ ràng rằng nó không thích hợp để sử dụng trong một môi trường sản xuất.Tại sao sử dụng C3PO và JNDI đồng thời tạo ra một vấn đề?
Ngoài ra, họ kể rằng:
Để sử dụng bên trong một máy chủ ứng dụng, bạn hầu như luôn luôn nên cấu hình Hibernate để có được kết nối từ một javax.sql.DataSource máy chủ ứng dụng đăng ký tại JNDI.
Vì vậy, có vẻ như tôi cần phải làm hai việc:
- Cấu hình Hibernate để làm việc với một hồ bơi kết nối của bên thứ ba - Hibernate khuyến C3PO
- Cấu hình Hibernate để có được kết nối từ một đối tượng
javax.sql.Datasource
đã đăng ký tại JNDI
Tôi đã nghiên cứu để xem cách thực hiện những thay đổi này và tôi đã xem qua this SO câu hỏi. Các poster đã được sử dụng C3PO và được hỏi làm thế nào để kết nối với cơ sở dữ liệu của họ thông qua một đối tượng JNDI Datasource
. Tuy nhiên, họ gặp vấn đề bởi vì họ đã sử dụng C3PO trong khi họ đang làm theo các bước của người trả lời để sử dụng Datasource JNDI. Người đăng ký đã nói điều này trong phần nhận xét của câu trả lời được chấp nhận:
vâng đúng, tôi đã làm sth thực sự ngớ ngẩn trong đó sử dụng cả c3p0 và JNDI. Tôi đã gỡ bỏ tất cả các cấu hình c3p0 và nó hoạt động tốt ngay bây giờ.
Hibernate khuyến nghị sử dụng nhóm kết nối của bên thứ ba, cụ thể là C3PO và sử dụng nguồn dữ liệu JNDI để nhận kết nối, và dường như gây ra sự cố cho người dùng này; và họ thậm chí còn đi xa đến mức nói về việc sử dụng cả hai cùng một lúc như thể đó là một sai lầm rõ ràng.
Vì vậy, tôi có thể không sử dụng cả hai cùng một lúc, hoặc tôi nên, như Hibernate khuyến cáo? Tất cả những gì tôi đang cố gắng làm là thay thế hồ bơi kết nối mặc định của Hibernate bằng một hồ bơi được thiết kế để sử dụng trong môi trường sản xuất và cấu hình Hibernate để lấy các kết nối từ đối tượng javax.sql.Datasource
được đăng ký trong JNDI.