2012-05-21 98 views
0

爲什麼DataSource接口未定義由JDBC指定的標準數據源屬性 - DataSource數據源屬性

隨着DataSource型我不能這樣設置如下性質的參考ds

public DbUtil(DataSource ds, String dbName, String port){ 
    ds.setServerName(dbName); 
    ds.setPortNumber(port); 
} 

回答

3

因爲你不應該這些價值傳遞不像普通的舊DriverManager。數據源通常在容器上配置,只能使用JNDI查找。

如果您再次開始傳遞這些值,則會損害具有可配置數據源的整個點。

以下是來自API的報價。

DataSource接口由驅動程序供應商實現。

DataSource對象具有的屬性,可以修改時 必要的。例如,如果數據源移動到不同的 服務器,則可以更改服務器的屬性。好處是 ,因爲數據源的屬性可以更改,訪問該數據源的任何代碼 不需要更改。

1

因爲它沒有意義的手動設置數據源的數據庫名稱或數據庫配置,如果允許這將打破在運行時的數據源功能,同時使用Oracle要更改服務器的詳細信息和你會開始指向Sybase。

這些參數都應該被提供給容器,你可以在運行時只使用這些,可以讓一個機制來代替或改變這些細節就太危險了。

這裏需要注意的另一件事是,如果這些屬性成爲合約的一部分,那麼對於調用者而言,這只是太多的信息,而這是針對封裝的。

你的代碼不需要知道這些細節的配置部分。

1

的JDBC 4.1規範,部分9.4.1的DataSource屬性回答你的問題:

的DataSource屬性並非是通過JDBC客戶端直接訪問。 該設計通過定義類的實現 而不是應用程序使用的公共DataSource接口上的訪問方法得到了加強。另外,客戶端操作的對象可以是隻有 實現DataSource接口的包裝器。對於 屬性的setter和getter方法不需要暴露給客戶端。

而且司機實施者可以添加特定於他們的數據庫

+0

是制定者/ getter和我想回答我的問題是在下面的語句:需要操縱DataSource實現的性能「管理工具使用內省來訪問這些屬性。「 –