2015-06-15 3 views
1

У меня есть два почти идентичных проектов (как созданные с мавена, и очень просто), где один разворачивает без каких-либо проблем, а другой дает мне PersistenceException:развертывания EJB-модуль для ObjectDB терпит неудачу: PersistenceProvider не найдено

javax.persistence.PersistenceException: JBAS011466: PersistenceProvider 'com.objectdb.jpa.Provider' not found 

И я просто не вижу, чего здесь не хватает.

проект - это веб-приложение. Я получил его от JPA Java EE 6 Tutorial. У меня есть простая страница jsp, сервлет, объект базы данных и факт без состояния для объекта.

Когда я раскрываю, я могу позвонить СПЯ, ввести некоторые примерные данные, которые будут переданы в сервлет, который затем снова записывает данные в базу данных ObjectDB с использованием компонент и соответствующий объект. просто.

не работает проект должен быть EJB-модуль с только entity и stateless bean.

Но когда я пытаюсь развернуть его на моем локальном сервере WildFly, я получаю вышеуказанную ошибку. Я также заметил, что скомпилированный ejb.jar имеет всего несколько килобайт, в то время как веб-приложение war использует 1,4 МБ. Поэтому я предполагаю, что он включает в себя необходимую библиотеку objectdb.jar. Но я могу включить ejb.jar для включения библиотеки.

Вот мой Maven pom.xml из рабочего веб-приложения (извините, что длинно):

<groupId>com.me</groupId> 
<artifactId>ObjectDBMavenTest</artifactId> 
<version>2.01.1-00001</version> 
<packaging>war</packaging> 

<name>ObjectDBMavenTest</name> 

<properties> 
    <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
</properties> 

<dependencies>  
    <dependency> 
     <groupId>com.objectdb</groupId> 
     <artifactId>objectdb</artifactId> 
     <version>2.6.1_06</version> 
    </dependency> 
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-web-api</artifactId> 
     <version>7.0</version> 
     <scope>provided</scope> 
    </dependency> 
</dependencies> 
<repositories> 
    <repository> 
     <id>objectdb</id> 
     <name>ObjectDB Repository</name> 
     <url>http://m2.objectdb.com</url> 
    </repository> 
</repositories> 
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.1</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
       <compilerArguments> 
        <endorseddirs>${endorsed.dir}</endorseddirs> 
       </compilerArguments> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.3</version> 
      <configuration> 
       <failOnMissingWebXml>false</failOnMissingWebXml> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.6</version> 
      <executions> 
       <execution> 
        <phase>validate</phase> 
        <goals> 
         <goal>copy</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>${endorsed.dir}</outputDirectory> 
         <silent>true</silent> 
         <artifactItems> 
          <artifactItem> 
           <groupId>javax</groupId> 
           <artifactId>javaee-endorsed-api</artifactId> 
           <version>7.0</version> 
           <type>jar</type> 
          </artifactItem> 
         </artifactItems> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

И как сравнение с pom.xml из не работает проект EJB:

<groupId>com.me</groupId> 
<artifactId>Database</artifactId> 
<version>2.01.1-00001</version> 
<packaging>ejb</packaging> 

<name>Database</name> 

<properties> 
    <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>com.objectdb</groupId> 
     <artifactId>objectdb</artifactId> 
     <version>2.6.1_06</version> 
    </dependency> 
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-web-api</artifactId> 
     <version>7.0</version> 
     <scope>provided</scope> 
    </dependency> 
</dependencies> 
<repositories> 
    <repository> 
     <id>objectdb</id> 
     <name>ObjectDB Repository</name> 
     <url>http://m2.objectdb.com</url> 
    </repository> 
</repositories> 
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.1</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
       <compilerArguments> 
        <endorseddirs>${endorsed.dir}</endorseddirs> 
       </compilerArguments> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-ejb-plugin</artifactId> 
      <version>2.3</version> 
      <configuration> 
       <ejbVersion>3.1</ejbVersion> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.6</version> 
      <executions> 
       <execution> 
        <phase>validate</phase> 
        <goals> 
         <goal>copy</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>${endorsed.dir}</outputDirectory> 
         <silent>true</silent> 
         <artifactItems> 
          <artifactItem> 
           <groupId>javax</groupId> 
           <artifactId>javaee-endorsed-api</artifactId> 
           <version>7.0</version> 
           <type>jar</type> 
          </artifactItem> 
         </artifactItems> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

Откровенно говоря, я d не вижу большой разницы, только тот, который будет войны файл a a jar.

Если это имеет значение, вот мои два файла persistence.xml.

работает

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> 
    <persistence-unit name="ObjectDBMavenTestPU" transaction-type="JTA"> 
     <provider>com.objectdb.jpa.Provider</provider> 
     <properties> 
      <property name="javax.persistence.jdbc.url" value="$objectdb/db/guests.odb"/> 
      <property name="javax.persistence.jdbc.user" value="user"/> 
      <property name="javax.persistence.jdbc.password" value="password"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

и не работает

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> 
    <persistence-unit name="MyDatabase" transaction-type="JTA"> 
    <provider>com.objectdb.jpa.Provider</provider> 
    <properties> 
     <property name="javax.persistence.jdbc.url" value="$objectdb/db/myDatabase.odb"/> 
     <property name="javax.persistence.jdbc.user" value="user"/> 
     <property name="javax.persistence.jdbc.password" value="password"/> 
     <property name="javax.persistence.schema-generation.database.action" value="create"/> 
    </properties> 
    </persistence-unit> 
</persistence> 

Может кто-нибудь увидеть, что я делаю неправильно здесь?

ответ

1

Wow просто пишут об этом здесь, на SO помогли мне найти мою ошибку :) Мне просто нужно заставить maven включить все зависимости.Это может быть сделано путем включения следующего плагина в pom.xml:

<plugins> 
... 
<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <executions> 
     <execution> 
     <phase>package</phase> 
     <goals> 
      <goal>single</goal> 
     </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <descriptorRefs> 
     <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
    </configuration> 
    </plugin> 
</plugins> 

Теперь нужно objectdb.jar библиотека включена в зависимости от ejb.jar и я, наконец, можно развернуть его без ошибок. Спасибо всем за заботу :)

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