【问题标题】:Error while initializing persistence.xml初始化persistence.xml时出错
【发布时间】:2015-12-08 21:16:44
【问题描述】:

我正在做一个项目: Web 动态项目 + JPA 2.1 / EclipseLink 2.5.2 雄猫 8.0.28 / JRE 1.8.0_66 日食月神

当在一个简单的 JPA 项目中作为 Java 应用程序执行时,项目的 JPA 部分运行良好。 我没有对那部分代码做任何改动。

我想在 JSP 中打印一些请求结果。我生成了一个 servlet 并尝试打印已在数据库中创建的用户名。几个小时以来,我遇到了关于 JDBC 驱动程序和persistence.xml 的错误,但没有找到。

为了解决依赖问题,我添加了 Maven。

现在,我的用户打印在 JSP 中,这很好,但是我之前使用的“Run.java”类不再工作了。

在将我的应用程序作为“Java 应用程序”运行时遇到的错误让我感到很困惑:

Exception in thread "main" java.lang.ExceptionInInitializerError
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.<clinit>(EntityManagerFactoryProvider.java:55)
    at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactoryImpl(PersistenceProvider.java:92)
    at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:188)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
    at dao.LayerDAO.<init>(LayerDAO.java:16)
    at exec.Run.main(Run.java:18)
Caused by: java.lang.NullPointerException
    at org.eclipse.persistence.platform.server.NoServerPlatformDetector.checkPlatform(NoServerPlatformDetector.java:28)
    at org.eclipse.persistence.platform.server.ServerPlatformUtils.detectServerPlatform(ServerPlatformUtils.java:58)
    at org.eclipse.persistence.internal.jpa.IsolatedHashMap.<clinit>(IsolatedHashMap.java:48)
    ... 7 more

很明显,当我在 DAO 类中创建 EntityManagerFactory 时会发生错误(与使用 JSP 的相同)。

这是我的 POM:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>CitizenWeb</groupId>
    <artifactId>com.citizenweb</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <build>
        <sourceDirectory>src</sourceDirectory>
        <resources>
            <resource>
                <directory>src</directory>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.3</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <warSourceDirectory>WebContent</warSourceDirectory>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <properties>

        <!-- Generic properties -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <!-- Web -->
        <jsp.version>2.2</jsp.version>
        <jstl.version>1.2</jstl.version>
        <servlet.version>2.5</servlet.version>

        <!-- Logging -->
        <logback.version>1.0.13</logback.version>
        <slf4j.version>1.7.5</slf4j.version>

        <!-- Test -->
        <junit.version>4.11</junit.version>

    </properties>
    <dependencies>

        <!-- Other Web dependencies -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>${jstl.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>${servlet.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>${jsp.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- Logging with SLF4J & LogBack -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>${logback.version}</version>
            <scope>runtime</scope>
        </dependency>
        <!-- EclipseLink -->
        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>org.eclipse.persistence.core</artifactId>
            <version>2.5.2</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>org.eclipse.persistence.jpa</artifactId>
            <version>2.5.2</version>
        </dependency>
        <!-- MySQL DB -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.37</version>
        </dependency>

    </dependencies>
</project>

如果需要,这是我的 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="CitizenWeb" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <mapping-file>META-INF/orm.xml</mapping-file>
        <properties>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/citizen"/>
            <property name="javax.persistence.jdbc.user" value="user"/>
            <property name="javax.persistence.jdbc.password" value="user"/>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
        </properties>
    </persistence-unit>
</persistence>

实体映射由 orm.xml 管理

这里也是 DAO 类的开始:

package dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Persistence;
import javax.persistence.Query;

import entities.Address;
import entities.GroupAssoc;
import entities.RightsGranted;
import entities.User;

public class LayerDAO implements IFLayerDAOLocal {

    EntityManager em = Persistence.createEntityManagerFactory("CitizenWeb").createEntityManager();

    public void createUser(User user) {
        System.out.println("DAO > addUser > "+em.hashCode());
        em.getTransaction().begin();
        em.persist(user);
        em.getTransaction().commit();
    }

这里没有任何改变,persistence.xml 中也没有

由于项目性质的变化(JPA -> Web Dynamic+JPA),“唯一”的变化是在 build.path 中。 maven已经解决了webserver和mysql连接器的问题,但是现在app端坏了。

你看到了什么我没有看到的东西吗?

谢谢。

【问题讨论】:

  • 奇怪,我认为这是 EclipseLink 2.6.1 特有的问题。你说应用程序实际上完全出错了?升级到最新的 EclipseLink 可能值得一试。在最近的版本中,这已最小化为仅记录异常,没有崩溃。相关bug链接:bugs.eclipse.org/bugs/show_bug.cgi?id=463629
  • 好吧,我觉得这看起来很眼熟。 stackoverflow.com/questions/34085811/… 。显然,自从您上次迭代此问题以来,事情再次走下坡路。
  • 是的,我记得你告诉我的关于 EclipseLink 2.6.1 的内容,这就是我强制使用 2.5.2 版本的原因 :) 你看,我听你的 ^^ 是的,我有一个运行。 java 类,以便轻松操作我的读写操作:添加用户、删除它们等。与 DB 的所有操作都由 LayerDAO.class 处理。 LayerDAO 工作正常,因为它将我的用户数据打印到 JSP 页面中。 Run.java 的相同处理导致我出现此错误。
  • 嗯,我第一次遇到这个问题时,是在尝试使用 Glassfish。但我绝对没有成功使用它。在项目的目标运行时中,我将 Glassfish 更改为默认 JRE (1.8.0_66) 并开始工作。但我需要一个网络服务器。所以这次我尝试了Tomcat,正如你所说,事情再次走下坡路。我试图用 2.6.1 EclipseLink 版本更改 2.5.2,它适用于我的 JSP。但是 java Run 类仍然卡在 错误。

标签: java maven jpa persistence tomcat8


【解决方案1】:

在项目的构建路径中,我添加了一个备用“JRE 系统库”。 我以前有:JDK 1.8.0_66 我添加了:JRE 1.8.0_66

现在 JSP 和 java Run 类都可以工作了。

【讨论】:

    猜你喜欢
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-02
    • 2019-02-02
    • 1970-01-01
    相关资源
    最近更新 更多