2011-07-05 33 views
8

Chúng tôi có một hệ thống nơi dữ liệu được phân đoạn theo ngày. Vì vậy, ví dụ trong SqlServer chúng tôi có một cơ sở dữ liệu mỗi tháng dữ liệu. Mỗi phân vùng tháng sử dụng một trình điều khiển JQueryc Datasource được bao bọc trong một hồ bơi kết nối C3P0 DataSource.Làm cách nào để đóng một java.sql.DataSource

Sau một khoảng thời gian phạm vi ngày của phân vùng đủ lớn để chúng tôi muốn ngoại tuyến. Trong trường hợp đó, chúng tôi chỉ xóa DataSource của tháng có liên quan khỏi danh sách có sẵn. Tuy nhiên, lý tưởng, khi offlining tôi muốn "đóng" DataSource để hồ bơi từ bỏ tất cả các kết nối đến DB.

DataSource không có phương thức gần để gọi cho nên tôi không biết cách dọn dẹp.

Mọi đề xuất?

Trả lời

7

Có vẻ như nếu bạn sử dụng C3PO gộp DataSources, thì bạn có thể phát hành chuỗi và kết nối được liên kết với DataSource bằng cách sử dụng DataSources.destroy(DataSource).

9

Bạn không đóng DataSource - bạn đóng kết nối trả về bởi số DataSource. Bản thân số DataSource không bao giờ là "mở" như vậy.

Tôi cho rằng hồ bơi sẽ từ bỏ kết nối mở sau khi hết giờ, vì vậy tôi khuyên bạn không nên lo lắng về điều đó :) Nếu bạn cần buộc đóng các kết nối, bạn cần phải giữ tham chiếu với chính hồ bơi kết nối và sử dụng bất kỳ cơ sở nào được cung cấp bởi c3p0 trực tiếp.

+0

Tôi nghĩ rằng OP không chỉ muốn đóng nguồn dữ liệu, ông muốn loại bỏ toàn bộ nhóm kết nối C3P0 vì vậy không có kết nối gộp vào DB đã lỗi thời được quản lý nữa. –

+0

@David: Anh ấy sẽ xóa DataSource khỏi danh sách của riêng mình, điều này sẽ chặn thêm bất kỳ kết nối nào được tạo ... nhưng tôi nghĩ anh ấy muốn bất kỳ kết nối hiện có nào. –

+0

@Jon - để làm rõ tôi mong đợi sẽ không có kết nối hoạt động bên ngoài hồ bơi chỉ là các kết nối nhàn rỗi trong chính hồ bơi mà tôi muốn đóng. Tôi sẽ kiểm tra xem liệu tôi có thể định cấu hình sao cho các kết nối không hoạt động sẽ ngừng hoạt động –

1

Trong trường hợp của tôi, câu trả lời @ sudocode đã không làm việc, vì vậy tôi đã thu được Datasource gộp và tôi đóng nó:

ComboPooledDataSource datasource = 
       (ComboPooledDataSource) envContext.lookup("jdbc/oracledb"); 
datasource.close(); 
Các vấn đề liên quan