GWT 2.2 + JPA 问题
Posted
技术标签:
【中文标题】GWT 2.2 + JPA 问题【英文标题】:GWT 2.2 + JPA problem 【发布时间】:2011-03-29 16:49:06 【问题描述】:我正在使用 GWT 2.2、JPA、Java EE 6 Web、glassfish v3。 我的问题是,如果我在 RPC 调用中使用我的实体,我会收到以下错误:“没有可用于类型 entity.User 的源代码;您是否忘记继承所需的模块?”
首先我认为问题是注释,但后来我从 GWT 2.0 版本中读到,如果“该类使用 JPA javax.persistence.Entity 注释进行注释”,则应该可以工作。
那么可能是什么问题?
嗯,我想我只是把所有的东西都写在这里。 我有带有以下包的 GWT 项目:
org.ecommunity
org.ecommunity.client
(和 org.ecommunity.client.view)org.ecommunity.server
-> 这里只是一个服务实现:
public class ECommunityServiceImpl extends RemoteServiceServlet implements ECommunityService
@EJB
ECommunitySB bean;
@Override
public User loginService(String username)
return bean.getUserByUsername(username);
我的Main.gwt.xml
看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 1.7.0//EN" "http://google-web-toolkit.googlecode.com/svn/tags/1.7.0/distro-source/core/src/gwt-module.dtd">
<module>
<inherits name="com.google.gwt.user.User"/>
<inherits name='com.google.gwt.user.theme.standard.Standard'/>
<entry-point class="org.ecommunity.client.MainEntryPoint"/>
<source path="client"/>
</module>
我有一个包含以下包的 EJB 模块:
entity
(这里是我的 User
实体类)和 sessionbean
(带有我的 sessionbean)
如果我添加<source path='server' />
,问题与这个新问题相同:“无法解析导入 javax.ejb。无法将 EJB 解析为类型。”
【问题讨论】:
您确定您的实体源可用于 GWT 编译器吗? 【参考方案1】:您必须删除您的 EJB 模块并将 sessionbean 和实体类放入 gwt 项目中。所以现在你只有 1 个项目。而且您必须将 EclipseLink (JPA 2.0) 库添加到类路径中(因为注释)。
【讨论】:
【参考方案2】:我认为您的 project.gwt.xml 中可能缺少源路径
<source path='yourpath' />
我在这里猜测一下,假设您的 project.gwt.xml 位于
org.ecommunity
可能有一个包
org.ecommunity.client
<source path='client' />
已经包含了一些 GWT 内容
但是你的实体类在:org.ecommunity.server.entity
所以你必须为<source path='server' />
输入另一个源。顺便说一句,将实体从服务器下移到 org.ecommunity.entity
并添加 <source path='entity' />
可能会更好,因为我猜在服务器下有很多与客户端代码无关的代码。
【讨论】:
我认为这不是问题所在。我有这个: 我已经扩展了我的答案以澄清一些观点希望它有所帮助。 正如 Eelke 所说,我通常将公共客户端和服务器代码保存在另一个包中,我告诉 GWT 在哪里可以找到它 我刷新了我的问题。我错过了什么吗?我应该对客户端中的实体做些什么吗? 或者我是否还需要在 2.2 中编写 DTO?以上是关于GWT 2.2 + JPA 问题的主要内容,如果未能解决你的问题,请参考以下文章