无法获得GAE + GWT + Objectify to Work

时间:2014-07-24 07:14:08

标签: google-app-engine gwt objectify

正如标题所说,我正在尝试使用Objectify创建一个GAE + GWT项目,但我甚至无法实现它。我确定我错过了一些简单的东西,但似乎没有用。

这是我到目前为止所做的:

  • 创建一个新项目,并将guava-17.0.jarguava-gwt-17.0.jarobjectify-5.0.3.jarobjectify-gwt-1.1jar添加到我的WEB-INF\lib文件夹中。这些都是这些罐子的最新版本。
  • 运行该应用程序。发送简单的RPC命令,服务器响应,客户端成功接收响应(调用onSuccess())。
  • <inherits name="com.googlecode.objectify.Objectify" />行添加到每个Objectify-GWT's website的gwt.xml文件中,该文件应该在GWT中启用Objectify。
  • 运行该应用程序。应用程序启动,发送相同的RPC命令,服务器接收并响应,但客户端说命令失败(onFailure()被调用)。

我正在使用首次创建新的Web应用程序时预先填充的样板代码。作为参考,这是RPC命令:

private void sendNameToServer() {
    // First, we validate the input.
    errorLabel.setText("");
    String textToServer = nameField.getText();
    if (!FieldVerifier.isValidName(textToServer)) {
        errorLabel.setText("Please enter at least four characters");
        return;
    }

    // Then, we send the input to the server.
    sendButton.setEnabled(false);
    textToServerLabel.setText(textToServer);
    serverResponseLabel.setText("");
    greetingService.greetServer(textToServer,
            new AsyncCallback<String>() {
                public void onFailure(Throwable caught) {
                    // Show the RPC error message to the user
                    dialogBox
                            .setText("Remote Procedure Call - Failure");
                    serverResponseLabel
                            .addStyleName("serverResponseLabelError");
                    serverResponseLabel.setHTML(SERVER_ERROR);
                    dialogBox.center();
                    closeButton.setFocus(true);
                }

                public void onSuccess(String result) {
                    dialogBox.setText("Remote Procedure Call");
                    serverResponseLabel
                            .removeStyleName("serverResponseLabelError");
                    serverResponseLabel.setHTML(result);
                    dialogBox.center();
                    closeButton.setFocus(true);
                }
            });
}

这是我尝试进行RPC调用后收到的错误:

[DEBUG] [my_app] - Validating units:
[INFO] [my_app] - Module my_app has been loaded
[ERROR] [my_app] - Errors in 'com/google/gwt/dev/jjs/SourceOrigin.java'
    [ERROR] [my_app] - Line 77: The method synchronizedMap(new LinkedHashMap<SourceOrigin,SourceOrigin>(){}) is undefined for the type Collections
[ERROR] [my_app] - Errors in 'com/google/gwt/dev/util/StringInterner.java'
    [ERROR] [my_app] - Line 29: No source code is available for type com.google.gwt.thirdparty.guava.common.collect.Interner<E>; did you forget to inherit a required module?
    [ERROR] [my_app] - Line 29: No source code is available for type com.google.gwt.thirdparty.guava.common.collect.Interners; did you forget to inherit a required module?

对我而言,Objectify看起来正在干扰GWT。我知道他们应该一起工作所以不确定我做错了什么。任何建议将不胜感激。

2 个答案:

答案 0 :(得分:0)

在尝试执行此类操作之前,您应该在服务器端使用objectify。 Objectify是一种服务器端持久性技术。在服务器代码中调用它

在服务方法中添加try catch并在服务器控制台上打印异常的堆栈跟踪,如果在GWT上收到onFailure(),则表示服务器端出现故障。你必须找到那种失败。

现在第二部分是建议:

 <inherits name="com.googlecode.objectify.Objectify" /> 

对我来说是一条疲惫的生产线。 GWT不必了解您的持久层。

除非它是一个革命性的概念,否则我建议您继续使用这种类型的技术,将您的手从数据库访问的控制中移开......

答案 1 :(得分:0)

使用objectify-gwt 1.2。 1.1合并坏公关可能会有一些问题。

您可以在此处看到使用objectify-gwt从客户端来回传递GeoPt的示例应用程序:https://github.com/stickfigure/objectify-gwt-test