GWT与JPA - 没有持久性提供程序

mel*_*iak 5 java gwt jpa

GWT与JPA

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

-JPAProject -GWTProject

JPAProject包含JPA配置内容(persistence.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
Run Code Online (Sandbox Code Playgroud)

我想现在可以省略开头的警告.

你有什么想法?我想我错过了一些基本观点.所有提示都受到高度赞赏.


更新:我的持久性提供程序已明确定义,JPA项目本身运行良好.

我猜这也是类路径相关的问题.在运行GWT项目时,WEB-INF/lib只有gwt-servlet.jar.

你认为制作自定义Ant文件来构建整个东西是唯一的解决方案(即将jar从JPA项目中复制并复制到其中WEB-INF/lib)?或者是否有任何Eclipse解决方案,因此我可以正确设置GWT项目属性,以便GWT项目知道包含persistence.xml文件?

更新:好的,我搞定了.我试图在war/WEB-INF中将persitence.xml放在任何可能的位置,但仍然会出现'无持久性提供程序'错误.事实证明它不是关于persistence.xml.我没有将eclipselink jar复制到WEB-INF/lib,因此找不到persistence.xml中定义的提供者类.复制所有的罐子做了这件事.

非常感谢Pascal.

Pas*_*ent 0

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

<persistence
  <persistence-unit name="emergitPU" transaction-type="...">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    ...
  </persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)

如果你这样做,那么我怀疑类路径有问题。您是否在 webapp ie 中正确打包了 JPA 项目WEB-INF/lib