Chúng tôi có một sản phẩm phần mềm thương mại đang được phát triển. Nó hỗ trợ các chương trình phụ trợ của Oracle, MySQL và SQL * Server (chúng tôi cũng sử dụng H2 để thử nghiệm). Chúng tôi thực hiện thử nghiệm tích hợp với các cơ sở dữ liệu khác nhau bằng cách sử dụng các trình điều khiển JDBC của một phiên bản cụ thể. Maven xử lý tất cả những điều này thật đẹp.Các trình điều khiển JDBC có nên được đưa vào WAR không?
Khi đóng gói ứng dụng dưới dạng WAR, có ổn không nếu chúng tôi bao gồm các trình điều khiển JDBC? Thực hành tiêu chuẩn là gì?
Vì chúng tôi không biết cơ sở dữ liệu nào có thể được sử dụng trước thời hạn nên chúng tôi phải bao gồm tất cả. Các thùng chứa servlet được nhắm mục tiêu là Tomcat và Jetty, nhưng một số khách hàng cũng sẽ muốn chạy trong WebSphere và JBoss.
Vì vậy, servlet chứa và các máy chủ ứng dụng đi kèm với trình điều khiển JDBC riêng của chúng? Chúng ta sẽ xung đột? Một mối quan tâm khác là chúng tôi đã phát triển và thử nghiệm với một phiên bản của người lái xe và nếu một khách hàng sử dụng một phiên bản khác, chúng tôi có thể có vấn đề.
Hiện tại chúng tôi sử dụng các hạt nguồn dữ liệu Spring, nhưng đang trong quá trình chuyển sang tra cứu JNDI cho nguồn dữ liệu.
@Pascal Thivent: (liên quan đến đoạn về hồ bơi kết nối) bạn có thể thêm một số liên kết hoặc giải thích một chút không? Tôi đồng ý với quan điểm của bạn (và tôi đã làm như bạn mô tả nhiều lần vì đó là cách trực quan nhất), nhưng tôi đã nói rằng đó là một thực hành không tốt (vì cùng thư viện trong ứng dụng-máy chủ và ứng dụng được triển khai có thể gây xung đột) và tất cả các thư viện nên được đóng gói trong tập tin chiến tranh của ứng dụng. Điều này là thực tế hơn cho các trường hợp, khi nhiều hơn thì 1 ứng dụng được triển khai trên cùng một máy chủ (tomcat trong trường hợp của tôi). – Roman
Để mở rộng câu cuối cùng: nguồn dữ liệu JNDI được quản lý vùng chứa và * yêu cầu ngầm * trình điều khiển có mặt trong thư viện của vùng chứa. Vùng chứa sẽ không quét các thư viện WAR cho trình điều khiển. Điều này thực sự kết thúc cuộc thảo luận :) – BalusC
@Roman Chắc chắn, xem [Apache Tomcat 6.0 Lớp tải HOW-TO] (http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html). Nếu bạn muốn sử dụng ** built-in ** kết nối của Tomcat hồ bơi, trình điều khiển phải có sẵn trong $ CATALINA_HOME/lib hoặc Tomcat sẽ không thể tải nó. –