使用JPA的GWT – 没有持久性提供程序

GWT与JPA

我的eclipse工作区中有两个项目,我们将它们命名为:

-JPAProject -GWTProject

JPAProject包含JPA配置内容(persistence.xml,实体类等)。 GWTProject是一个示例GWT项目(取自官方GWT教程)。

这两个项目都很好。 也就是说,我可以在JPAProject中创建EMF(EntityManagerFactory)并从数据库中获取实体。 GWTProject工作正常,我可以运行它,在浏览器中填写字段文本并获得响应。

我的目标是从GWTProject调用JPAProject来获取实体。 但问题是,在调用DAO时,我得到以下exception:

[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.(JpaProfileDaoService.java:19) at pl.maliniak.server.GreetingServiceImpl.(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中的任何地方,但是仍然可以获得“无持久性提供程序”错误。 事实certificate它不是关于persistence.xml。 我没有将eclipselink jar复制到WEB-INF / lib,因此找不到persistence.xml中定义的提供者类。 复制所有的jar子做了这件事。

非常感谢Pascal。

我用相同的错误信息苦苦挣扎,解决了复制所有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实现。

希望,这对你也有帮助。

您是否在persistence.xml中声明了持久性提供程序? 像这样的东西(我在这里使用Hibernate,适应你正在使用的任何持久性提供程序):

  org.hibernate.ejb.HibernatePersistence ...   

如果你这样做,那么我怀疑是一个类路径问题。 您是否正确地在WEB-INF/lib应用程序中打包JPA项目,即在WEB-INF/lib