GWT 与 JPA
我的 eclipse 工作区中有两个项目,让我们命名它们:
-JPA项目
-GWT项目
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
我想现在可以省略开头的警告。
你有什么想法?我想我错过了一些基本点。所有提示都受到高度赞赏。
Update:我的持久性提供程序定义良好,JPA 项目本身运行良好。
我想这也是与类路径相关的问题。运行GWT项目时,在WEB-INF/lib
只有gwt-servlet.jar
.
您是否认为制作自定义 Ant 文件来构建整个系统是唯一的解决方案(即从 JPA 项目中制作 jar 并将其复制到WEB-INF/lib
)?或者是否有任何 Eclipse 解决方案,以便我可以正确设置 GWT 项目属性,以便 GWT 项目知道包含persistence.xml
file?
Update:好的,我成功了。我尝试将 persistence.xml 放在 war/WEB-INF 中任何可能的位置,但不断收到“无持久性提供程序”错误。事实证明,这与 persistence.xml 无关。我没有将 eclipselink jar 复制到 WEB-INF/lib,因此它找不到 persistence.xml 中定义的提供程序类。复制所有罐子就可以了。
非常感谢帕斯卡。