2013-02-23 3 views
3

в Интернете Я часто нахожу последние, но противоположные данные по этой теме ..., поэтому я хотел бы задать вопрос о минимальных требованиях.Arquillian: Нужен ли мне domain.xml и arquillian.xml для минимальных тестов Glassfish Embedded с помощью Derby DB?

Моя цель состоит в том, чтобы сделать очень простой тест интеграции простой EJB 3.1 приложения:

  • Простой JPA 2.0 функциональность с EclipseLink
  • Arquillian с JUnit для тестирования
  • Maven
  • Derby DB (в памяти или файле в ./target), контекст сохранения JTA.
  • Embedded Glassfish в Arquillian

Так что я просто хочу, чтобы сделать простой тест JPA. Я получаю свою Glassfish, работающую в Arquillian, но когда я делаю свой материал JPA, мое приложение всегда не справляется с DB Derby (говорит, что нет таблиц и т. Д.), Но файлы DDL выглядят разумно. Я играл с указанием имени схемы, пользователя и т. Д. В моем persistence.xml, но ничего не помогает. Иногда появляются сообщения о том, как внести изменения в минимальный domain.xml для встроенной Glassfish в соответствие с моим persistence.xml или адаптировать arquillian.xml.

Мой вопрос: для этого минимального подхода - действительно ли я требую, чтобы src/test/glassfish/domains/domain1/domain.xml или arquillian.xml?

Я уверен, что некоторое время назад мне удалось сделать это с помощью Embedded Glassfish, но с использованием Hibernate 4 в качестве поставщика JPA. У меня нет доступа к проекту еще больше и, следовательно, я не могу сказать разницы, кроме того, что я определенно не добавил domain.xml и т. Д. Сообщения, подобные (other question here), действительно меня путают.

Важно, что я не использую управляемый сервер, а встроенный.

Спасибо и веселит, Timo

Вот одна из моих версий, смотрите мой следующий комментарий.

<persistence-unit name="localiser-core" transaction-type="JTA"> 
    <jta-data-source>jdbc/__default</jta-data-source> 
    <properties> 
     <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" /> 
     <property name="javax.persistence.jdbc.url" 
        value="jdbc:derby:memory:test;create=true" /> 
     <property name="javax.persistence.jdbc.user" value="" /> 
     <property name="javax.persistence.jdbc.password" value="" /> 

     <property name="eclipselink.target-database" value="Derby"/> 
     <property name="eclipselink.ddl-generation.output-mode" 
        value="database" /> 

     <property name="eclipselink.ddl-generation" value="create-tables" /> 
     <property name="eclipselink.application-location" value="target" /> 
     <property name="eclipselink.create-ddl-jdbc-file-name" value="create.sql"/> 
     <property name="eclipselink.drop-ddl-jdbc-file-name" value="drop.sql"/> 
     <property name="eclipselink.debug" value="ALL"/> 
     <property name="eclipselink.weaving" value="static"/> 
     <property name="eclipselink.logging.level" value="FINEST"/> 
     <property name="eclipselink.logging.level.sql" value="FINEST"/> 
     <property name="eclipselink.logging.level.cache" value="FINEST"/> 

    </properties> 

</persistence-unit> 
+0

Это одна из многих адаптаций моей настойчивости.xml - Я пробовал много вариантов с файлами, разными именами БД, именами пользователей и паролей и т. д. Также кажется, что он может вызывать SQL-запросы против БД, но похоже, что схемы просто нет. Кроме того, добавление/удаление имени источника данных JTA не помогло :( –

ответ

1

С вашего подключения URL является: JDBC: котелок: память: тест, создать = правда, что вы сказали Дерби является: подключение к базе данных в папке «тест», относительно текущего рабочего каталога где Derby запускается, и если этот «тест» базы данных отсутствует в текущем рабочем каталоге, создайте его с нуля.

Таким образом, одна из возможностей заключается в том, что ваше приложение имеет разные текущие рабочие каталоги каждый раз, или, возможно, что что-то еще в вашем приложении очищает ваш текущий рабочий каталог при каждом запуске приложения.

Таким образом, Derby не находит предыдущую базу данных в этом месте и поэтому создает новый новый.

Один из способов обойти это указать более явное расположение для вашей базы данных, используя URL соединения, такие как: JDBC: Derby: память:/Пользователи/Timo/TESTDB

Затем создайте базу данных один раз, до фронт, и после этого ваше приложение найдет базу данных в указанном месте и будет использовать ее.

+0

Привет, Брайан, большое спасибо за ваш ответ! Дело в том, что я пробовал тысячи мест, а также без памяти и папок, таких как «/ tmp /» и «target» (с использованием Maven). Однако, похоже, создается база данных, но жалуется на недостающую схему, которую она не умеет создавать в базе данных :( При отсутствии имени схемы кажется вывести его из имени пользователя, но затем все же он говорит, что схема не существует или по крайней мере не может найти соответствующие таблицы. –

+0

Кстати, я, хотя «память» - это зарезервированное имя, указывающее, что БД полностью перейдет в ОЗУ вместо жесткого диска? –

+0

К сожалению, я полностью упустил из виду «память» вашего URL! Это означает, что ваш база данных не будет сохраняться за пределами одного запуска вашей программы. Каждый экземпляр вашей программы создаст совершенно новую свежую копию базы данных в памяти, которая исчезнет в конце прогона. –

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