Как улучшить OpenJPA с помощью Ant + IntelliJ IDEA - PullRequest
6 голосов
/ 20 декабря 2011

Это сводит меня с ума, и я шокирован тем, что официальная документация абсолютно бесполезна.

Вот что у меня есть:

  • IntelliJ IDEA 11
  • OpenJPA 2.1.1

Поскольку openjpa добавлен в список используемых библиотек, у меня уже был путь к классу к OpenJPA, который выглядит следующим образом

<path id="library.openjpa.classpath">
    <fileset dir="${basedir}/lib/openjpa">
        <patternset refid="library.patterns"/>
    </fileset>
</path>

Согласно официальномудокументацию я добавил следующую цель

<target name="enhance">
    <copy includeemptydirs="false" todir="${basedir}/lib/openjpa">
        <fileset dir="src" excludes="**/*.launch, **/*.java"/>
    </copy>

    <taskdef name="openjpac" classname="org.apache.openjpa.ant.PCEnhancerTask">
        <classpath refid="library.openjpa.classpath"/>
    </taskdef>

    <openjpac>
        <classpath refid="library.openjpa.classpath"/>
    </openjpac>
</target>

Это дает мне исключение

C: \ work \ prj \ build.xml: 283: org.apache.openjpa.util.MetaDataException:MetaDataFactory не может быть настроен (conf.newMetaDataFactoryInstance () возвратил ноль).Это может означать, что свойства конфигурации не найдены.Убедитесь, что у вас есть файл META-INF / persistence.xml, что он доступен в вашем classpath или файл свойств, который вы используете для конфигурации, доступен.Если вы используете Ant, посмотрите атрибуты или вложенного элемента задачи.Это также может произойти, если ваши дистрибутивные файлы OpenJPA повреждены или ваша политика безопасности слишком строгая.

Я протестировал с Process Monitor и может видеть, что он открываетсяи читает persistence.xml.

Кто-то сообщил об ошибке , у меня возникли проблемы, и он получил ответ, что нахождение persistence.xml не является источником проблемы.

Вопросы:

  1. Что я могу сделать, чтобы заставить его работать?
  2. Можно ли заставить его работать, пропустив необходимость для persistence.xml и просто указав шаблон для файлов .classЯ хочу быть улучшенным?
  3. Это больше вопрос муравья.Как я могу заставить OpenJPA Enhancer искать persistence.xml в каталоге, отличном от того, где находится openjpa-2.1.1.jar?

Ответы [ 2 ]

8 голосов
/ 24 декабря 2011

Так что я не смогу заставить его работать без документов propertiesFile.Вот версия, которая работает для меня.Также указание единицы измерения персистентности через # приводит к сбою с NullReferenceException.

<target name="enhance">
    <taskdef name="openjpac" classname="org.apache.openjpa.ant.PCEnhancerTask">
        <classpath refid="library.openjpa.classpath"/>
    </taskdef>

    <openjpac>
        <classpath refid="library.openjpa.classpath"/>
        <classpath location="${reporting.output.dir}"/>
        <config propertiesFile = "${basedir}/src/META-INF/persistence.xml"/>
    </openjpac>
</target>
0 голосов
/ 21 декабря 2011

Похоже, вы пропустили важную часть документации.В вашем library.openjpa.classpath отсутствует ссылка на ваши сущности и местоположение файла persistence.xml.Попробуйте добавить это и посмотреть, как это происходит.

<path id="jpa.enhancement.classpath">
  <pathelement location="bin"/> <!-- add something like this -->

  <!-- lib contains all of the jars that came with the OpenJPA binary download -->
  <fileset dir="lib">
    <include name="**/*.jar"/>
  </fileset>
</path>
...