2011-08-14 27 views
0

a web appをデプロイしようとしています。これはjpqlシェルwebappデモとして動作するはずです。 展開とTomcatでそれを実行しようとすると、私が作成した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 utilのは、(別のサイトから借用)さ

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; 
    } 
} 

warファイル構造は、それが正常に展開、および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が取得しています:例外がライン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) 
で処理JSPページ/query.jspを発生しました誰かが私がこれを解決することができますか?私は

tomcat 6.0.29を使用していますpersistence.xmlで述べた

持続性プロバイダが原因のTomcatそれいくつかのエラーhibernate3.jar .Isであり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> 

答えて

6

を助言として、正しくwarファイルを構築するために、更新のビルドファイル - 必ずそれがあることを確認してください。

+1

WEB-INF/classes/META-INF/persistence.xml' – axtavt

+0

アドバイスいただきありがとうございます。しかし、war-taskの中の要素をweb-inf/meta-infに含めることができませんでした私はwebinfとmetainfの要素を別々に試しましたが、xmlファイルをweb-infまたはmeta-infディレクトリに入れました。私の無知を許してください。 –

+0

@axtavtありがとう..私はそれをコピー貼り付けて、技術ミスの可能性を減らすべきです – Bozho

関連する問題