a web app을 배포하려고합니다. jpn 셸 webapp 데모 역할을하는 net에 있습니다. 배포 및 바람둥이에서 실행하려고, 내가 만든 persistence.xml
(src 디렉토리에서) 아래Tomcat에서 PersistenceException (EntityManager에 대한 지속성 공급자 없음)
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" 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">
<persistence-unit name="pu" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>jpql.Employee</class>
<class>jpql.Job</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="hibernate.connection.url" value="jdbc:postgresql://localhost/jpqldemodb"/>
<property name="hibernate.connection.username" value="damon"/>
<property name="hibernate.connection.password" value="damon"/>
<property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
</properties>
</persistence-unit>
</persistence>
과의 EntityManager의 폴더의 유틸리티는 (다른 사이트에서 차용)되어
package jpql.utils;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.apache.log4j.Logger;
public class EntityManagerUtil {
static Logger logger = Logger.getLogger(EntityManagerUtil.class);
private static EntityManager em=null;
public static EntityManager getInstance() {
if (em == null) {
EntityManagerFactory emf;
emf = Persistence.createEntityManagerFactory("pu");
if(emf == null){
logger.info("emf is null");
}else{
logger.info("emf is created"+emf);
}
em = emf.createEntityManager();
logger.info("em is created="+em);
return em;
}
else
return em;
}
}
전쟁 파일 구조가 성공적으로 배포하고 query.jsp이 같은 환영 페이지를 제공됩니다. (는 JSP에서
META-INF
WEB-INF----------classes
lib-----------hibernate3.jar
web.xml |-hibernate-jpa-2.0-1.00.Final.jar
--hibernate-tools.jar etc..
query.jsp
입니다 EntityManager를 같이 호출 EM = jpql.utils.Ent ityManagerUtil.getInstance(); 내가 제출 버튼을 클릭 할 때 스크립틀릿 내부에서 발생) .However, 나는이 오류를
org.apache.jasper.JasperException 무엇입니까 : 예외가 줄에서 처리 JSP 페이지 /query.jsp 발생 25
22: if (query == null || query.length() == 0)
23: return;
24:
25: EntityManager em = jpql.utils.EntityManagerUtil.getInstance();
26: List lst = null;
27: try {
28: Query qry = em.createQuery(query);
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419)
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.persistence.PersistenceException: No Persistence provider for EntityManager named pu
javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)
jpql.utils.EntityManagerUtil.getInstance(Unknown Source)
org.apache.jsp.query_jsp._jspService(query_jsp.java:82)
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)
누군가가 나에게이 문제를 해결하는 데 도움을 줄 수 있다면? 내가
tomcat 6.0.29
을 사용하고 persistence.xml을 언급
지속성 공급자가 있기 때문에 바람둥이의 그것을 몇 가지 오류 hibernate3.jar
됐나에서이 org.hibernate.ejb.HibernatePersistence
,, 그것은 좋은 것
관련
데이먼
갱신 : Bozho이 적절한 경로 WEB-INF/classes/META-INF/persistence.xml
입니다
...
<target name="makedirs">
<mkdir dir="${dir.build}"/>
<mkdir dir="${dir.build}/META-INF"/>
</target>
<target name="compile" depends="makedirs" description="Compile all source code">
<javac srcdir="${dir.src}" destdir="${dir.build}" includeAntRuntime="false" verbose="yes">
<classpath refid="compileclasspath"/>
</javac>
<copy file="${dir.src}/persistence.xml" todir="${dir.build}/META-INF"/>
...
</target>
<target name="war" depends="compile">
<war destfile="${dir.build}/${webapp.context.name}.war" webxml="${dir.resources}/web.xml">
<classes dir="${dir.build}">
</classes>
...
</target>
'WEB-INF/classes/META-INF/persistence.xml' – axtavt
조언을 주셔서 감사합니다. 그러나 나는 war-task에서 web-inf/meta-inf에 xml 파일을 포함하는 요소를 찾을 수 없습니다. . webinf 및 metainf 요소를 별도로 시도했지만 web-inf 또는 meta-inf 디렉토리에 xml 파일을 저장했습니다. 내 무지를 용서하십시오. –
@axtavt 감사합니다. 기술적 실수의 가능성을 줄이기 위해 복사 붙여 넣기를해야합니다. – Bozho