使用具有GWT + EJB + JPA的实体

时间:2011-04-21 05:46:16

标签: java gwt jpa ejb

使用部署在GlassFish中并使用Eclipse Helios J2EE的GWT(2.0)+ EJB(3.x)+ JPA来真正具体。

我的EJB项目中有两个实体:Client和Provider实体。使用RPC我从GWT调用EJB项目,重新启动一些实体并将它们发送回GWT项目。电话是这样的:

GWT从EJB调用findClient,使用EntityManager查找客户端实体并将其返回给GWT。然而,当我尝试编译我的GWT项目时,我得到以下

Compiling module com.MYPROJECT
   Validating newly compiled units
      [ERROR] Errors in 'file:/.....****....../GreetingService.java'
         [ERROR] Line 20: No source code is available for type com.MYPROJECT.entities.Client; did you forget to inherit a required module?
         [ERROR] Line 26: No source code is available for type com.MYPROJECT.entities.Provider; did you forget to inherit a required module?
      [ERROR] Errors in 'file:/C:/workspaces/...***.../GreetingServiceAsync.java'
         [ERROR] Line 14: No source code is available for type com.MYPROJECT.entities.Client; did you forget to inherit a required module?
         [ERROR] Line 16: No source code is available for type com.MYPROJECT.entities.Provider; did you forget to inherit a required module?

2 个答案:

答案 0 :(得分:2)

错误信息说明了一切,即使您可能没有意识到这一点(我遇到了同样的问题)。 GWT将Java代码编译成JavaScript代码,并且需要源代码。您可能包含了另一个库中提到的实体,因此这些实体的源代码不可用,因此GWT无法完成它的工作。

您(不幸的是)需要做的是创建一个单独的对象(在您的项目中)并将数据从您的实体移动(即移动)到这个新对象。

您必须确保以正确的方式移动数据,例如以下内容:

static copyDataToGwtObject(MyObj obj) {
    MyGwtObject gwtObj = new MyGwtObject();
    gwtObj.setValueA(obj.getValueA());
    gwtObj.setValueB(obj.getValueB());
}

(遗憾的是)不能工作的是在MyGwtObject的构造函数中移动数据:-(即不要执行以下操作:

class MyGwtObject {
    private String valueA;
    private String valueB;
    public MyGwtObject(MyObj obj) {
        this.valueA = obj.getValueA();
        this.valueB = obj.getValueB();
    }
}

这不起作用,因为GWT(再次)需要构造函数的源代码。

答案 1 :(得分:0)

您的GreetingServiceRemoteService吗?我用来“转换”服务器返回的对象到我在客户端项目中创建的等效对象:

GreetingSerciceImpl(扩展RemoteServiceServlet)中,我会写:

public TestClient someMethod() {
  Client c = ejbClass.getClient() // returns object of Client class defined in the EJB project
  return translate(c);
}

private TestClient translate(Client c) {
  TestClient tc = new TestClient();
  tc.setName(c.getName());
  return tc;
}

在GWT项目的客户端代码中的某处定义了TestClient

HTH