2013-09-22 3 views
2

Я планирую использовать Apache Cayenne в проекте, но я борюсь с тем, чтобы он был правильно настроен.Установить путь базы данных в Cayenne

Cayenne tutorial показывает, как установить местоположение базы данных в 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

Это тестовый URL в памяти, который я установил на C ayenneModeller, а не тот, который я установил в setupDataBase (и да, я сделал очень то, что этот метод вызывается). Кроме того, файлы базы данных не создаются (я проверял с помощью отладчика, что путь правильный).

Итак, каково решение этой проблемы?

ответ

3

Я думаю, что выход журнала вы видите из этой строки:

Configuration configuration = Configuration.getSharedConfiguration() 

Т.е. по умолчанию DataSource загружается перед установкой. Хотя есть способы взломать последовательность запуска 3.0, я настоятельно рекомендую вместо этого переключиться на Cayenne 3.1B2. Он находится на грани становления «RC» и «final», поэтому не беспокойтесь по его текущему статусу Beta.

Один способ создания данных DataSource может быть построен в 3.1 путем определения нескольких свойств в модуле Cayenne DI, как описано here, и позволяя 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); 
+0

Это сделало трюк, спасибо. – DarkDust

Смежные вопросы