我將創建一個數據圖和單數據節點的單個項目。刪除其「數據源廠」,因爲我們會在代碼中指定它(從來沒有嘗試過這一點,如果離開「數據源廠」空的原因在啓動時出現任何問題,你可以將它設置爲任何所提供的選擇,例如JNDIDataSourceFactory的,有理解這只是佔位符,並且在運行時會被忽略)。
現在使用同一個映射項目啓動2個ServerRuntimes,每次,但2組不同的數據源屬性。這些屬性會導致Cayenne忽略XML中設置的DataSource Factory。
Module m1 = new Module() {
@Override
public void configure(Binder binder) {
binder.bindMap(Constants.PROPERTIES_MAP)
.put(Constants.JDBC_DRIVER_PROPERTY, "com.my.Driver")
.put(Constants.JDBC_URL_PROPERTY, "jdbc://db1_url")
.put(Constants.JDBC_USERNAME_PROPERTY, "db1login")
.put(Constants.JDBC_PASSWORD_PROPERTY, "db1password");
}
};
Module m2 = new Module() {
@Override
public void configure(Binder binder) {
binder.bindMap(Constants.PROPERTIES_MAP)
.put(Constants.JDBC_DRIVER_PROPERTY, "com.my.Driver")
.put(Constants.JDBC_URL_PROPERTY, "jdbc://db2_url")
.put(Constants.JDBC_USERNAME_PROPERTY, "db2login")
.put(Constants.JDBC_PASSWORD_PROPERTY, "db2password");
}
};
ServerRuntime r1 = new ServerRuntime("cayenne-project.xml", m1);
ServerRuntime r2 = new ServerRuntime("cayenne-project.xml", m2);
R1和R2應該是應用單身,你可以創建任何一個適合各個請求ObjectContexts。如果您在請求之間重複使用ObjectContext(例如,這是一個大多數只讀應用程序),則可以從r1和r2創建2個上下文並緩存它們。
非常感謝 - 這樣做的伎倆 – user1574741 2013-03-21 12:41:29