2010-12-27 42 views
2

이 포럼을 처음 접했고 JPA/EJB를 처음 사용했습니다.배치 된 WAR to Tomcat은 java.lang.NoClassDefFoundError를 throw 할 수 없습니다. javax/persistence/PersistenceException

작은 응용 프로그램이 포함 된 .war 파일을 Tomcat 서버에 배포하려고합니다. 응용 프로그램은 JTA를 사용하여 Derby db와 통신합니다.

이클립스에서 실행중인 이클립스에서 이클립스를 실행하고 배포 할 때 모든 것이 완벽하게 작동하지만 .war 파일을 내보내고 응용 프로그램을 탐색하려고하면 java.lang.ClassNotFoundException이 발생합니다. .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) 

사람이 전에이 발생 했습니까?

안부 헨릭

답변

7

이 있습니다 (JPA 스펙의 일부) javax.persistence.PersistenceException 클래스를 누락 될 것으로 보인다.

자바 퍼시스턴스 API의 JAR합니다 (PersistenceException 클래스를 포함) 여기에서 찾을 수 있습니다 :

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을 해결하면 다른 예외 (실제 예외)가 발생한다는 것을 의미합니다.

+1

당신의 전쟁 파일에 JPA 라이브러리를 포장뿐만 아니라, 당신이 포장되어 있는지 확인 당신의 전쟁 파일에 필요한 Derby 병. 귀하의 경우에는 derbyclient.jar이 필요합니다. –

+0

감사합니다 @ddewaele, 그것은 나를 위해 일했습니다. –

0

그런 다음 pom.xml이 나를 위해 일한 내에서 다음과 같은 프로젝트 종속성을 관리하기위한 메이븐을 사용하는 경우 :

<!-- https://mvnrepository.com/artifact/javax.persistence/persistence-api --> 
<dependency> 
    <groupId>javax.persistence</groupId> 
    <artifactId>persistence-api</artifactId> 
    <version>1.0.2</version> 
</dependency>