2016-05-25 4 views
1

Я новый пользователь OpenJPA 2.2.2. Я заметил, что конфигурация базы данных должна быть определена в META-INF/persistence.xml. Это звучит слишком негибко. Кроме того, я нашел в документации OpenJPA 2.2.2:OpenJPA> Можно ли определить файл persistence xml где-то еще, чем META-INF с именем persistence.xml

Среда OpenJPA включает в себя комплексную систему по умолчанию конфигурации и переопределение:

  • OpenJPA сначала ищет необязательный openjpa.xml ресурс. OpenJPA ищет этот ресурс в каждом каталоге верхнего уровня вашего CLASSPATH. OpenJPA также найдет ресурс, если вы поместите его в каталог META-INF в любом каталоге верхнего уровня CLASSPATH. Ресурс openjpa.xml содержит параметры свойств в формате JPA формата.
  • Вы можете настроить имя или местоположение указанного ресурса, указав правильный путь ресурса в свойстве openjpa.properties System.

На основе вышеизложенного введение, кажется, что имя файла конфигурации базы данных возможно только быть persistence.xml. Более того, я попытался поместить его в каталог верхнего уровня моего CLASSPATH, т. Е. Не внутри каталога META-INF, он вообще не работает! Есть ли какой-либо способ более гибко определить эту хрупкость базы данных xml, скажем, в другом месте, чем META-INF, и с другим именем, чем persistence.xml?

ответ

0

Во-первых, для persistence.xml нет замены (p.xml). Это необходимо, несмотря ни на что. Кроме того, расположение этого файла четко определено в спецификации JPA (например, см. «8.2. Уставка единиц сохранения» в спецификации JPA 2.0). Вы ДОЛЖНЫ следовать этим правилам упаковки. OpenJPA в первую очередь следует правилам спецификации в отношении этого файла и его настроек. Поставщик JPA не будет игнорировать файл правил w.r.t p.xml. раздел текста копировать/вставить отсюда в документации OpenJPA:

http://openjpa.apache.org/builds/2.2.2/apache-openjpa/docs/manual#ref_guide_conf_specify

Как вы можете видеть, в этом разделе описывается дополнительный файл с именем openjpa.xml. Этот файл не заменяет файл p.xml! Это добавляет к этому. И, как говорится в документации, он просто используется для добавления свойств. То есть вы не можете определить свою единицу персистентности здесь, единственное, что вы можете определить, - это свойства (т. Е.). Если вы определяете здесь блок персистентности, он не будет использоваться. В качестве примера, давайте посмотрим на этот файл openjpa.xml:

<?xml version="1.0"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" 
version="1.0"> 

<persistence-unit name=""> 
    <properties> 
     <property name="openjpa.jdbc.Schema" value="MySchema" /> 
     <property name="openjpa.jdbc.DBDictionary" value="db2" /> 
    </properties> 
</persistence-unit> 

Этот файл определяет два свойства. Обратите внимание, что имя единицы сохранения сохраняется. Это преднамеренно, потому что, как я уже упоминал выше, мы не можем определить единицу сохранения в этом файле. Наконец, вы можете поместить этот файл в META-INF на свой путь к классам, как указано в документации. Если вы поместите это в то же место, что и ваш файл p.xml, он будет найден. Например, в моем тесте JSE JUnit я помещаю его на свой жесткий диск в каталог e: /openjpaConfig/META-INF/openjpa.xml. Затем я помещаю элемент classpath в свой JUnit-тест, чтобы указать на каталог e:/openjpaConfig. Путь к классам может указывать на банку, которая содержит этот файл в каталоге META-INF. В среде Java EE вы можете поместить файл в файл .jar и поместить файл .jar в каталог lib уха.