Каково место хранения встроенной базы данных Derby, созданной как GlobalNamingResource в tomcat?

В настоящее время я использую встроенную базу данных Derby, созданную при первом использовании GlobalNamingResource, указанного в файле server.xml tomcat 8.0 (в Windows 7).

В настоящее время я могу использовать его в коде Java, но если я хочу получить к нему доступ с помощью других инструментов, таких как Eclipse Data Source Explorer, я не могу найти его нигде в своих файловых системах (в Windows 7).

Относящаяся к делу часть моего server.xml выглядит так:

<Resource auth="Container"
    driverClassName="org.apache.derby.jdbc.EmbeddedDriver" 
    maxActive="100" maxIdle="30" maxWait="10000" 
    name="jdbc/myDB" password="" username=""
    type="javax.sql.DataSource" 
    url="jdbc:derby:Databases/myDerbyDB;create=true" />

В context.xml содержится следующее:

<ResourceLink name="jdbc/myDBLink" global="jdbc/myDB" 
    auth="Container" type="javax.sql.DataSource" /> 

Код Java использует (немного сокращенно):

DataSource ds = (DataSource) env.lookup("java:/comp/env/jdbc/myDBLink");

Это отлично работает при перезапусках и перезагрузках моего сервера tomcat. Доступ к базе данных можно получить с помощью Hibernate, EclipseLink, чистого JDBC и т. д., и данные в нем хорошо сохраняются. В документации указано, что он должен храниться где-то ниже CATALINA_HOME, но там я не могу найти ничего похожего на базу данных Derby. Также, когда я просматриваю все свои Диски, я не могу найти ни папку с именем myDerbyDB, ни папку Databases, содержащую что-то связанное.

Итак, мой вопрос: где Дерби хранит мои данные?


person themole    schedule 05.12.2016    source источник
comment
Какой инструмент вы используете для поиска на ваших дисках? Учитывая этот URL-адрес подключения JDBC, вы обязательно сможете найти эту папку. Возможно, вы используете Tomcat на другом сервере и ищете не тот сервер? Попробуйте найти папку с именем seg0 или файл с именем «db.lck». Когда вы говорите, что можете получить доступ к базе данных через чистый JDBC, вы имеете в виду, что вы получаете доступ к той же базе данных? Если да, то какой URL-адрес подключения JDBC вы используете в этой чистой программе JDBC и можете ли вы определить, где он хранит базу данных?   -  person Bryan Pendleton    schedule 06.12.2016
comment
Ваша база данных будет в $WORKING_DIR\Databases\myDerbyDB. Если вы используете Tomcat как службу Windows, то $WORKING_DIR будет зависеть от того, как это задается механизмом службы Windows. У вас могут возникнуть проблемы с его поиском, если служба работает от имени пользователя, который не является вашим обычным логином.   -  person Steve C    schedule 06.12.2016
comment
Derby запускается во встроенном режиме как глобальный ресурс в tomcat (то есть не глобальный с точки зрения системы). Сам Tomcat запускается Eclipse. Я использовал проводник Windows для поиска папок с именами, похожими на базу данных (например, myDerbyDB). Интересно, что когда я ищу seg0, я получаю результат, указывающий на путь установки eclipse (в моем примере: D:\jee-neon\eclipse\Databases\‹name›\seg0). Это не отображалось при поиске по именам баз данных. Спасибо за подсказку.   -  person themole    schedule 07.12.2016


Ответы (1)


Итак, благодаря комментариям Брайана и Стива я нашел ответ на свой вопрос.

Для управляемых Tomcat баз данных Derby Embedded, когда tomcat работает в Eclipse под Windows, derby.system.home, по-видимому, относится к папке installation Eclipse, а не к рабочей области.

Итак, когда ваша Eclipse IDE установлена ​​ниже

D:\eclipse

URL-адрес JDBC

jdbc:derby:Databases/myDerbyDB

будет ссылаться на базу данных Derby, расположенную в

D:\eclipse\Databases\myDerbyDB

Спасибо Стиву и Брайану!

person themole    schedule 07.12.2016