开发可以运行Google App Engine的Java Swing应用程序?

时间:2013-02-12 21:02:56

标签: java swing google-app-engine architecture

此时主要是头脑风暴,经过一些研究后,对这个话题的了解并不多。

我正在设计一个Swing应用程序,它具有用于存储的数据库后端,并使用本地文件系统来存储BLOB。这个应用程序不会是CPU,存储或GUI性能密集型,它只是一个专门用于电子项目管理的数据库应用程序。

我理想的目标是拥有一个可以在JVM和GAE中执行而无需任何更改的代码库。我知道App Engine数据存储区是非关系型的,所以我知道我不能将SQLite用于桌面应用程序。我必须使用类似MongoDBHypertable的内容。

此程序将在GAE上为1到多个用户和1到多个用户本地运行。

编辑:添加了CRUD要求。

  • 创建或添加新项目,部件或BLOB。
  • 阅读,检索,搜索或查看现有项目,零件,原理图或任何类型的BLOB。
  • 更新/克隆或编辑现有项目,部件等
  • 删除/停用现有项目,部件等

编辑2:简而言之,我想知道这甚至可能吗?如果您已经完成了可以在桌面或App Engine上执行的项目。我想知道您使用的工具,框架和库;即使您必须使用完全自行开发的解决方案。

谢谢!

2 个答案:

答案 0 :(得分:1)

无法直接在GAE中托管未经修改的挥杆应用程序。

你可以做的是让你的挥杆应用程序与servlet that is deployed to GAE对话,并处理你的挥杆应用程序和GAE数据库之间的通信。

在swing应用程序中,而不是使用任何数据库,您将在servlet中查询数据。 GAE托管的servlet处理请求,查询GAE数据库,对结果进行编码并将其流回客户端。 swing应用程序接收响应并做出相应的反应。在摇摆中,像:

HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://localhost:8080/YourApp/YourAction");

try {
    List<NameValuePair> params = new ArrayList<NameValuePair>(1);
    params.add(new BasicNameValuePair("name", name));
    post.setEntity(new UrlEncodedFormEntity(params));

    HttpResponse response = client.execute(post);

    HttpEntity entity = response.getEntity();
    // Server response as stream
    InputStream inputStream = entity.getContent();
} catch (ClientProtocolException cpe) {
    cpe.printStackTrace();
}

如果你选择这条路线,请记住始终在event dispatch thread之外发出服务器请求(很容易使用SwingWorkers)。

答案 1 :(得分:0)

我认为您无法在GAE中使用swing组件,因为它不在白名单中(https://developers.google.com/appengine/docs/java/jrewhitelist