Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java tomcat中的PersistenceException(EntityManager没有持久性提供程序)_Java_Hibernate_Jpa - Fatal编程技术网

Java tomcat中的PersistenceException(EntityManager没有持久性提供程序)

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

我正在尝试部署我在网上找到的,它应该作为一个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
                              --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>