[英]Set database path in Cayenne
我正計划在項目中使用Apache Cayenne,但實際上卻很難正確設置它。
Cayenne教程顯示了如何在CayenneModeller中設置數據庫位置。 我的問題是我想在運行時動態確定的路徑上使用Apache Derby,但我找不到如何使Cayenne實際使用該路徑的方法。
我試圖這樣設置路徑:
private static boolean setupDataBase() {
String path = Globals.USER_DATA_DIRECTORY + File.separator + "db";
try {
DataSource dataSource = new PoolManager(
"org.apache.derby.jdbc.EmbeddedDriver",
"jdbc:derby:" + path + ";create=true",
1,
1,
null,
null
);
Configuration configuration = Configuration.getSharedConfiguration();
DataDomain domain = configuration.getDomain();
DataNode node = domain.getNode("MaciNode");
node.setDataSource(dataSource);
return true;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
但是,當我稍后調用DataContext.createDataContext()
,控制台中的日志顯示如下:
信息:創建的連接池: jdbc:derby:memory:testdb; create = true
這是內存測試網址我在CayenneModeller設置,而不是一個我在設置setupDataBase
(是的,我也很是該方法被調用)。 另外,不會創建數據庫文件(我已通過調試器驗證路徑正確)。
那么,該問題的規范解決方案是什么?
我認為您看到的日志輸出來自以下行:
Configuration configuration = Configuration.getSharedConfiguration()
即在安裝您的數據源之前,將加載默認的數據源。 盡管有多種方法可以破解3.0啟動序列,但我強烈建議改用Cayenne 3.1B2。 它即將成為“ RC”和“最終”,因此請不要為它的當前Beta狀態感到震驚。
可以在3.1中構建自定義DataSource的一種方法是,按照此處所述在Cayenne DI模塊中定義一些屬性,然后讓Cayenne擔心正確的啟動順序。 修剪上面建議中不相關的部分,您的啟動代碼可能如下所示:
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");
}
};
ServerRuntime r1 = new ServerRuntime("cayenne-project.xml", m1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.