簡體   English   中英

在Cayenne中設置數據庫路徑

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM