Как использовать Java DB (с именем Derby) с Hibernate - PullRequest
3 голосов
/ 05 октября 2009

Привет, ребята, я могу подключить Derby через Eclipse Database Development, но я не могу подключить Derby с тем же URL-адресом, что и Eclipse Database Development через Hibernate. Ошибка: «вызвано: java.sql.SQLException: другой экземпляр Derby, возможно, уже загрузил базу данных» *

Ответы [ 2 ]

2 голосов
/ 06 октября 2009

Только что завершил проект, который сделал это, используя Derby с Hibernate, пару дней назад. (Дерби работает в той же JVM.)

Насколько я понимаю, когда вы используете встроенный драйвер, он по умолчанию запускает экземпляр базы данных как часть драйвера и до тех пор, пока вы зависаете в соединении, в котором работает база данных. Но для Hibernate ему нравится иметь DataSource, который должен быть источником пула данных.

Приведенный выше ответ верен, неплохо было бы запустить Derby в качестве сервера сетевой БД, даже если вы используете ту же JVM. Вы по-прежнему можете использовать встроенный драйвер JDBC, который, кажется, знает, когда база данных, к которой вы подключаетесь, находится в режиме сети, и настраивается соответствующим образом. (Это также позволяет использовать сторонний инструмент для подключения к базе данных и просмотра и редактирования данных и схемы во время ее работы, что очень удобно для отладки.)

System.setProperty("derby.system.home", applicationHome);

NetworkServerControl serverControl = new NetworkServerControl(InetAddress.getByName(m_address),port);

serverControl.start(new PrintWriter(System.out, true)); 

Когда база данных запущена, вы помещаете экземпляр DataSource в реестр JNDI. Затем Hibernate может получить доступ к этому источнику данных, учитывая его имя, из реестра JNDI.

EmbeddedConnectionPoolDataSource40 dataSource = new EmbeddedConnectionPoolDataSource40();
dataSource.setDatabaseName(databaseName);
dataSource.setUser(username);
dataSource.setPassword(password);

EmbeddedConnectionPoolDataSource40 - это реализация DataSource для использования с пулом DataSource, поэтому соединения можно использовать, где это возможно. Я использовал Apache Commons DBCP и изменил один из примеров , чтобы создать свой собственный источник данных пула с помощью EmbeddedConnectionPoolDataSource40.

2 голосов
/ 05 октября 2009

Кажется, что вы используете Derby как встроенную БД , а не как сервер БД.

Проблема в том, что оба работают в разные JVM и заданная база данных доступен только с одной JVM.

Eclipse запустит еще одну JVM, когда вы начнете тестировать свою программу и не сможете подключиться к встроенной БД в eclipse. Я думаю, как использовать Derby в качестве сетевого сервера БД может вам помочь.

...