部署到tomcat的war无法抛出java.lang.NoClassDefFoundError: javax/persistence/PersistenceException

2023-12-28

我是这个论坛的新手,也是 JPA / EJB 的新手。

我正在尝试将包含小型应用程序的 .war 文件部署到 tomcat 服务器。该应用程序使用 JTA 与 Derby 数据库进行通信。

当我在 eclipse 中运行的 tomcat 服务器上运行和部署应用程序时,一切都工作正常,但是当我导出 .war 文件并尝试浏览应用程序时,它会抛出 java.lang.ClassNotFoundException: javax.persistence.PersistenceException 。

我的持久性文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>

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

    <persistence-unit name="lab1" transaction-type="RESOURCE_LOCAL">
        <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
        <!--<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>-->
        <class>entity.Team</class>
        <class>entity.Gambler</class>
        <class>entity.Bet</class>
        <class>entity.Game</class>
        <class>entity.Gameday</class>
          <properties>
       <property name="openjpa.ConnectionURL" value="jdbc:derby://localhost:1527/hean0901;create=true"/>
            <property name="openjpa.ConnectionDriverName" value="org.apache.derby.jdbc.ClientDriver"/>
            <property name="openjpa.ConnectionUserName"  value="lab1"/>
            <property name="openjpa.ConnectionPassword" value="user"/>
            <property name="lab1.log" value="DefaultLevel=TRACE"/>
            <property name="nonTransactionalDataSource" value="true"/> 
            <!-- <property name="openjpa.RuntimeUnenhancedClasses" value="supported"/>-->
            <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />
            <property name="eclipselink.logging.level" value="FINEST"/> 
        </properties>
    </persistence-unit>

</persistence>

抛出的错误如下所示:

org.apache.jasper.JasperException: An exception occurred processing JSP page /index.jsp at line 1

1: <jsp:forward page="Setupcheck.do" />


Stacktrace:
 org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:401)
 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause

javax.servlet.ServletException: Servlet execution threw an exception
 org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:706)
 org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:677)
 org.apache.jsp.index_jsp._jspService(index_jsp.java:54)
 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause

java.lang.NoClassDefFoundError: javax/persistence/PersistenceException
 model.Setupcheck.processRequest(Setupcheck.java:31)
 model.Setupcheck.doGet(Setupcheck.java:43)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
 org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:706)
 org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:677)
 org.apache.jsp.index_jsp._jspService(index_jsp.java:54)
 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause

java.lang.ClassNotFoundException: javax.persistence.PersistenceException
 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)
 model.Setupcheck.processRequest(Setupcheck.java:31)
 model.Setupcheck.doGet(Setupcheck.java:43)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
 org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:706)
 org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:677)
 org.apache.jsp.index_jsp._jspService(index_jsp.java:54)
 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

以前有人遇到过这种情况吗?

此致 亨里克


您似乎缺少 javax.persistence.PersistenceException 类(JPA 规范的一部分)。

Java Persistence API JAR(包含 PersistenceException 类)可以在这里找到:

http://repo1.maven.org/maven2/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar http://repo1.maven.org/maven2/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar

该 JAR 需要位于您的 WEB-INF/lib 文件夹中。

根据您设置 Eclipse 的方式,它可能会自动将这些 JAR 推送到 Tomcat(通过定义库)。

然而,它尝试加载 PersistenceException 的事实很可能意味着一旦解决了这个 ClassNotFoundException,就会发生另一个异常(真正的异常)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

部署到tomcat的war无法抛出java.lang.NoClassDefFoundError: javax/persistence/PersistenceException 的相关文章

随机推荐