-2

在这一点上主要是头脑风暴,经过一些研究,并不能真正找到关于这个话题的太多信息。

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

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

该程序将在 GAE 上为 1 对多用户和 1 对多用户本地运行。

编辑:添加了 CRUD 要求。

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

编辑2:简而言之,我想知道这是否可能?如果您完成了可以在桌面或 App Engine 上执行的项目。我想知道您使用了哪些工具、框架、库;即使您必须使用完全自主研发的解决方案。

谢谢!

4

2 回答 2

1

直接在 GAE 中托管未经修改的 Swing 应用程序是不可能的。

您可以做的是让您的 swing 应用程序与部署到 GAE 的 servlet对话,并处理您的 swing 应用程序和 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();
}

如果您走这条路,请记住始终在事件调度线程之外发出您的服务器请求(使用 SwingWorkers 很容易做到)。

于 2013-02-12T23:45:01.083 回答
0

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

于 2013-02-12T22:54:43.437 回答