2010-05-15 60 views
5

GWT與JPAGWT與JPA - 沒有持續性提供

有我在Eclipse工作區的兩個項目,讓他們的名字:

-JPAProject -GWTProject

JPAProject包含JPA配置的東西(持久性.xml,實體類等)。 GWTProject是一個示例GWT項目(取自官方的GWT教程)。

兩個項目都單獨運作良好。也就是說,我可以在JPAProject中創建EMF(EntityManagerFactory)並從數據庫中獲取實體。 GWTProject也能正常運行,我可以運行它,在瀏覽器中填充字段文本並獲得響應。

我的目標是從GWTProject調用JPAProject來獲取實體。但問題是,調用DAO的時候,我得到以下異常:

[WARN] Server class 'com.emergit.service.dao.profile.ProfileDaoService' could not be found in the web app, but was found on the system classpath 
[WARN] Adding classpath entry 'file:/home/maliniak/workspace/emergit/build/classes/' to the web app classpath for this session 

[WARN] /gwttest/greet 
javax.persistence.PersistenceException: No Persistence provider for EntityManager named emergitPU 
    at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source) 
    at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source) 
    at com.emergit.service.dao.profile.JpaProfileDaoService.<init>(JpaProfileDaoService.java:19) 
    at pl.maliniak.server.GreetingServiceImpl.<init>(GreetingServiceImpl.java:21) 
    ... 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) 
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) 
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488) 
[ERROR] 500 - POST /gwttest/greet (127.0.0.1) 3812 bytes 

我想,在一開始的警告可現在被省略。

你有什麼想法嗎?我想我錯過了一些基本觀點。所有提示都非常感謝。


更新:我的持久性提供良好定義的,JPA項目本身運作良好。

我想這也是類路徑相關的問題。在運行GWT項目時,WEB-INF/lib中只有gwt-servlet.jar

您是否認爲使用自定義Ant文件構建整個事物是唯一的解決方案(即,將JPA項目製作成jar並將其複製到WEB-INF/lib)?或者是否有任何Eclipse解決方案,所以我可以正確設置GWT項目屬性,以便GWT項目知道包含persistence.xml文件?

更新:好的,我得到了它的工作。我試圖把persitence.xml放在war/WEB-INF的任何地方,但是一直存在'沒有持久性提供者'的錯誤。事實證明,這不是關於persistence.xml。我沒有將eclipselink jar複製到WEB-INF/lib中,因此無法找到在persistence.xml中定義的提供程序類。複製所有罐子做了這件事。

非常感謝帕斯卡爾。

+0

你確認你沒有意外啓用Google App Engine嗎? GAE不允許你連接數據庫,並且是一個非常常見的初學者錯誤。 – 2010-05-16 20:35:58

回答

0

您是否在persistence.xml中聲明瞭持久性提供程序?像這樣的東西(我使用Hibernate的在這裏,它適應任何持久性提供你正在使用):

<persistence 
    <persistence-unit name="emergitPU" transaction-type="..."> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    ... 
    </persistence-unit> 
</persistence> 

如果你這樣做的話,我懷疑是類路徑的問題。您是否正確地將JPA項目打包在webapp中,即WEB-INF/lib

+0

謝謝。 我的持久性提供者定義良好,我提到JPA項目本身很好。 我想這也是類路徑相關的問題。運行GWT項目時,在WEB-INF/lib中只有gwt-servlet.jar。 您是否認爲使用自定義ant文件構建整個事物是唯一的解決方案(即,將JPA項目製作成jar並將其複製到WEB-INF/lib)?或者是否有任何Eclipse解決方案,所以我可以正確設置GWT項目屬性,以便GWT項目知道包含persistence.xml文件? – meliniak 2010-05-16 17:36:09

+0

好的,現在是評論,而不是答案。順便說一句,壞的一面是在這裏不能提供新行,所以帖子無法格式化以方便閱讀。 我已經將META-INF/persistence.xml放入jar中,並將其放入WEB-INF/lib中,但仍然無效。 我已經跑出了想法,你有沒有剩下的分享? – meliniak 2010-05-16 17:42:18

+0

@meliniak謝謝。以防萬一你沒有注意到,你可以編輯你的問題來更新它(我已經將後續問題提到了最初的問題)。現在回到你的問題。將jar包裝到'WEB-INF/lib'中時,你會得到完全相同的警告嗎?如果沒有,你可以用新的跟蹤更新問題嗎? – 2010-05-16 18:17:14

2

用相同的錯誤消息掙扎了很多,我解決了複製所有jar的問題(eclipselink.jar,eclipselink-jpa-modelgen_2.1.0.v20100614-r7608.jar,javax.persistence_1.0.0.jar,javax。 persistence_2.0.1.v201006031150.jar)從EclipseLink zip複製到我的GWT項目的.../war/WEB-INF/lib文件夾中,以在託管模式下爲Jetty提供一切可用。 正如您從文件列表中可以看到的,我使用的是EclipseLink 2.1。如有必要,請將此列表適應您的JPA實施。

希望,這也可以幫助你。

+0

非常感謝您的解決方案,漫長的一天搜索工作終於結束了! – Josh 2011-10-06 06:30:38

相關問題