2010-09-22 37 views
6

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.

Trả lời

7

Vì vậy, servlet chứa và máy chủ ứng dụng đi kèm với trình điều khiển JDBC riêng của chúng?

Một số việc (ví dụ: WebLogic).

Chúng ta có xung đột không?

Chúng không nên. Không chắc chắn bạn sẽ được chọn khi tạo một nhóm kết nối độc lập ở cấp ứng dụng (mặc dù tất cả phụ thuộc vào chế độ ủy quyền của trình nạp lớp).

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 trình điều khiển và nếu khách hàng sử dụng phiên bản khác, chúng tôi có thể gặp sự cố.

Có danh sách các phiên bản được hỗ trợ.

Hiện tại, chúng tôi sử dụng 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.

Nếu điều này có nghĩa là bạn sử dụng hồ bơi kết nối do máy chủ ứng dụng cung cấp, trình điều khiển phải được cài đặt ở mức độ mức chứa, không ở cấp ứng dụng. Và điều này bằng cách nào đó kết thúc cuộc thảo luận.

+0

@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

+4

Để 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

+0

@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ó. –

6

Trong hầu hết các ứng dụng, trình điều khiển JDBC không được xuất xưởng như một phần của ứng dụng.

Nếu bạn gửi trình điều khiển JDBC của tàu, điều đó có nghĩa là bạn phải cung cấp trình điều khiển cho tất cả cơ sở dữ liệu bạn muốn hỗ trợ. Nó thêm rất nhiều thư viện không cần thiết.

Chỉ cần không thêm bất kỳ trình điều khiển nào và yêu cầu người dùng đặt tệp JAR có liên quan vào thư viện máy chủ nếu cần.

3

Sau đó, giá trị kỹ thuật của người lái xe trong tập tin chiến tranh, Bạn cũng nên kiểm tra giấy phép lái xe và đảm bảo rằng nó được phân phối bởi bên thứ ba.

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