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.ecommunityorg.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)

如果我添加&lt;source path='server' /&gt;,问题与这个新问题相同:“无法解析导入 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

&lt;source path='client' /&gt; 已经包含了一些 GWT 内容 但是你的实体类在:org.ecommunity.server.entity 所以你必须为&lt;source path='server' /&gt; 输入另一个源。顺便说一句,将实体从服务器下移到 org.ecommunity.entity 并添加 &lt;source path='entity' /&gt; 可能会更好,因为我猜在服务器下有很多与客户端代码无关的代码。

【讨论】:

我认为这不是问题所在。我有这个: 我已经扩展了我的答案以澄清一些观点希望它有所帮助。 正如 Eelke 所说,我通常将公共客户端和服务器代码保存在另一个包中,我告诉 GWT 在哪里可以找到它 我刷新了我的问题。我错过了什么吗?我应该对客户端中的实体做些什么吗? 或者我是否还需要在 2.2 中编写 DTO?

以上是关于GWT 2.2 + JPA 问题的主要内容,如果未能解决你的问题,请参考以下文章

GWT JPA - 无法反序列化响应

将 JPA 与我的 GWT 应用程序一起使用的最简单方法

在 GWT 2.2 CellTable 中设置列​​的宽度而不裁剪 TextInputCell?

GWT RCP - 序列化异常

通过 GWT RPC 问题具有关系的实体

GWT + IntelliJ Idea - 添加服务器端库