正如标题所说,我正在尝试使用Objectify创建一个GAE + GWT项目,但我甚至无法实现它。我确定我错过了一些简单的东西,但似乎没有用。
这是我到目前为止所做的:
guava-17.0.jar
,guava-gwt-17.0.jar
,objectify-5.0.3.jar
和objectify-gwt-1.1jar
添加到我的WEB-INF\lib
文件夹中。这些都是这些罐子的最新版本。onSuccess()
)。<inherits name="com.googlecode.objectify.Objectify" />
行添加到每个Objectify-GWT's website的gwt.xml文件中,该文件应该在GWT中启用Objectify。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。我知道他们应该一起工作所以不确定我做错了什么。任何建议将不胜感激。
答案 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