我计划在一个项目中使用 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 中设置的内存中测试 URL,而不是我设置的那个setupDataBase
(是的,我确实做到了调用该方法)。此外,没有创建数据库文件(我用调试器验证了路径是正确的)。
那么,这个问题的规范解决方案是什么?