Java tomcat中的PersistenceException(EntityManager没有持久性提供程序)
我正在尝试部署我在网上找到的,它应该作为一个jpql shell webapp演示。 为了在tomcat中部署和运行它,我创建了一个Java tomcat中的PersistenceException(EntityManager没有持久性提供程序),java,hibernate,jpa,Java,Hibernate,Jpa,我正在尝试部署我在网上找到的,它应该作为一个jpql shell webapp演示。 为了在tomcat中部署和运行它,我创建了一个persistence.xml(在src目录中),如下所示 war文件结构是 META-INF WEB-INF----------classes lib-----------hibernate3.jar web.xml |-hibernate-jpa-2.0-1.00.Final.jar
persistence.xml
(在src目录中),如下所示
war文件结构是
META-INF
WEB-INF----------classes
lib-----------hibernate3.jar
web.xml |-hibernate-jpa-2.0-1.00.Final.jar
--hibernate-tools.jar etc..
query.jsp
它成功部署,query.jsp显示为欢迎页面(在jsp中,EntityManager em=jpql.utils.EntityManager rutil.getInstance();之类的调用发生在scriptlet中)。但是,当我单击submit按钮时,我收到了这个错误
org.apache.jasper.jaspereException:在第25行处理JSP页面/query.JSP时发生异常
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)
persistence.xml中提到的持久性提供程序是org.hibernate.ejb.HibernatePersistence
,它位于hibernate3.jar
中。是不是因为tomcat的缘故而出错?我使用的是tomcat 6.0.29
如果有人能帮我解决这个问题,那就太好了
问候
达蒙
更新:
正如Bozho建议的那样,构建文件已更新,以正确构建war文件
...
<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
-确保它在那里。正确的路径是WEB-INF/classes/META-INF/persistence.xml
-确保它在那里。它是WEB-INF/classes/META-INF/persistence.xml
谢谢你的建议..但我在war任务中找不到一个可以使用的元素在web inf/meta-inf中包含xml文件。我分别尝试了webinf和metainf元素,但它们将xml文件放入web inf或meta inf目录。请原谅我的无知。@axtavt谢谢。。我应该复制粘贴它,减少技术错误的可能性。你能帮我完成ant-war任务吗?我如何在WEB-INF/类中制作META-INF文档?元素不支持嵌套的elemet您是什么意思?那是IDE吗?蚂蚁?在月食中,您可以将它放在src/META-INF/persistence.xml中,并且应该正确处理它的WEB-INF/classes/META-INF/persistence.xml
谢谢您的建议..但是我在war任务中找不到将xml文件包含在WEB-INF/META-INF中的元素。我分别尝试了webinf和metainf元素,但它们将xml文件放在WEB-INF或META-INF中目录。请原谅我的无知。@axtavt谢谢。。我应该复制粘贴它,减少技术错误的可能性。你能帮我完成ant-war任务吗?我如何在WEB-INF/类中制作META-INF文档?元素不支持嵌套的elemet您是什么意思?那是IDE吗?蚂蚁?在eclipse中,您可以将它放在src/META-INF/persistence.xml中,并且应该正确处理它
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)
...
<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>