【问题标题】:transfer and cache versioned object file传输和缓存版本化目标文件
【发布时间】:2013-08-26 20:50:46
【问题描述】:

问题定义:

项目设置在客户端使用GWT,在服务器端使用Spring 有一个包含 100 个对象的对象树。该对象描述了一个复杂的配置文件,该文件链接到一个用户。该对象必须在服务器端持久化,并且可以由客户端请求。客户端和服务器都可以访问 Object 中的所有方法和字段。一旦被客户端请求,这个对象树就会被缓存。对象可以被客户端和服务器修改。如果文件被服务器修改,客户端下载新版本。 向配置对象添加额外功能应该很容易,即增加版本号并将对象添加到树中。配置文件是一个项目文件,它保存用户为使项目保持原样所做的所有更改。用户会定期(每 3 秒)更改配置文件。例如,将其与 Gimp 项目/PowerPoint 文件进行比较。

当前架构:

服务器以XML 格式存储配置文件。当请求配置时,它会转换为使用RequestFactory (GWT) 从服务器发送到客户端的Java 对象。客户端可以修改该对象并将更改发送到服务器。客户端完成后,服务器通过替换旧的XML 文件来保存新对象。客户端还使用HML5Storage (GWT) 缓存此Java 对象。 5MB 的限制不是问题。当在服务器上创建对象的新版本时,例如一种新的对象类型被添加到树中,客户端下载新的对象树并丢弃旧的。

问题:

  • 这是解决问题的好方法吗?

也许我应该在初始化时将XML 文件直接从服务器发送到客户端。客户端修改此文件并在完成后将其发送回服务器。客户端可以将XML 文件原样存储在HML5Storage 中。也许有人可以指出一些奇怪的选择。

  • 有没有更好的格式来存储这个数据服务器端而不是XML

我选择XML 是因为它有很好的库,可以将Java 对象映射到XML 文件,并且可以轻松添加附加功能。此外,此数据链接到一个用户,并且不会以其他方式使用该数据。因此,将其存储在关系数据库中并将所有这些对象组合成一棵树(这将需要很长时间来组装)是一个坏主意。

  • RequestFactory 也适合初次下载 对象树?

我读过RequestFactory 可能需要很长时间才能下载大量对象的案例。 (与 RPC 相比,时间是 x 10)。

如果您做到了这一点并且有什么不清楚的地方,我很乐意在需要的地方添加额外的细节。

【问题讨论】:

    标签: java xml spring gwt requestfactory


    【解决方案1】:

    这是解决问题的好方法吗?

    在登录时预加载对象是个好主意。当用户需要编辑配置的特定部分时,更好的方法是将对象树分成小部分并根据请求加载每个部分。这假设不是提供单个视图来编辑所有配置属性,而是您在某种程度上将其“组织”成许多单独的表单,这些表单将仅在适当时请求他们需要的部分配置。它需要一些工作,但如果该对象稍后发生更改,您的架构师将更易于维护。

    我认为您没有正确执行此操作,因为您将对象树(我理解它是一些大型 Java 对象)转换为 XML,而不是立即将该对象发送到客户端。 GWT RPC 将处理序列化/反序列化(实际上是使用 JSON 而不是 XML)。操作普通 Java 对象不是比 XML 更容易(即使有好的库)?

    有没有更好的格式来存储这个数据服务器端而不是 XML?

    我通常使用 JSON。它也有很好的图书馆。我只在人类需要直接读取文件时使用 XML。

    但我不明白你为什么需要它们中的任何一个。 GWT RPC mechanism 会自动将你的 java 对象序列化为 json。只需提供一个“共享”对象和(如果需要)一个转换器来将您的对象树转换为其共享形式并返回。

    RequestFactory 是否也适用于对象树的初始下载?

    由于 XML 比 JSON 占用更多空间,而且操作 XML 比操作 java 对象慢,我实际上建议使用 RPC。

    【讨论】:

    • 在问题描述中添加了两行。我更喜欢使用 RequestFactory,因为它只会将更改发送到服务器。客户端将对这个文件进行小的更改(每 3 秒) 1) 对象配置将始终被完全使用,而不仅仅是它的一部分。我在这里使用 XML,因为您不能将 Java 对象原样保存到磁盘,然后在 Java 对象的版本发生更改时将其导入。 2)我没有使用 JSON 的经验。是否可以将旧的 JSON 数据导入新的 Java 对象? 3)我不会用RequestFactory发送XML文件,而是用它对应的Java对象。Thx
    • 好的。 XML 似乎是一个不错的选择,因为您可能需要“手动”读取文件。在任何情况下,我都建议在服务器端进行 XML > POJO 转换,因为与 GWT 相比,您可以使用更多的库。 1) 好的 2) 你需要在服务器上保持 POJO 版本是最新的还是保持 POJO 和 XML 版本?我认为只有在从磁盘读取 XML 或将 XML 写回时才会发生转换。我不明白对不起 3)似乎是正确的方法。 RequestFactory 最适合在客户端操作实体并使其在服务器上保持最新。
    • 对于您问题的最后一部分,您是否特别认为文件下载速度很慢,或者您是否采取了一些措施来检索文件所需的时间?
    • 我不必手动阅读 XML,我只是碰巧找到了允许某些版本控制的 JAXB。 goo.gl/14Ta2o 1) :) 2) 服务器端的 POJO 的存在是为了能够将其发送到客户端,而不必一直读/写 XML。一旦客户端注销,POJO 将保存为 XML,POJO 在服务器上被销毁并缓存在客户端。 3) 该项目处于设计阶段,目前没有任何实施。我指的是其他用户,例如:stackoverflow.com/questions/14363495/… Thx.
    • 对于使用 JSON 检查 GSON sites.google.com/site/gson/… 的版本控制。你说的对我来说似乎是对的。 3)即使速度较慢,为了您自己,仍然值得使用 RequestFactory :)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 2011-04-20
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多