У меня есть клиентское приложение RCP, которое использует встроенное Derby в той же JVM для сохранения. Я обращаюсь к нему через JPA, используя RESOURCE_LOCAL и Eclipse Link в качестве поставщика JPA. Я оставляю экземпляр Derby для JPA и persistence.xml.Завершение базы данных Derby с использованием JPA, а не DriverManager
factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME, props);
persistence.xml
<properties>
<property name="eclipse.weaving" value="false" />
<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
<property name="javax.persistence.jdbc.url" value="jdbc:derby:pathToDb" />
<property name="eclipselink.logging.level.sql" value="FINEST" />
<property name="eclipselink.logging.parameters" value="true" />
</properties>
В какой-то момент в приложении, мне нужно, чтобы остановить основной базы данных Derby. Все примеры показывают призвание:
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
DriverManager.getConnection("jdbc:derby:pathToDb;shutdown=true");
Это проблематично, особенно в RCP приложения с несколькими загрузчиков классов (он использует OSGI под одеялом). Я пробовал использовать
if (factory.isOpen())
factory.close();
но это не отключает экземпляр Derby, только соединение JPA с ним.
Есть ли способ, используя JPA, для закрытия основного экземпляра Derby?
Update
Я попытался с помощью консоли OSGi, чтобы остановить сохраняемости связанные пучки включая javax.persistence, JPA и Дерби. Прекращение этих действий не освобождало блокировки файлов, которые Derby помещал в файлы журналов.
Update 2
Пересмотренный уточнить, что использование не в приложении OSGI сервера.
В ваш запрос по списку рассылки derby-пользователя было внесено предложение: http://apache-database.10148.n7.nabble.com/Shutdown-Derby-database-using-JPA-not-DriverManager-tp147171p147172. html –
Предложение: список всех служб, экспортируемых пакетом Derby, возможно, есть тот, который выставляет драйвер или оболочку вокруг базы данных –