2010-06-23 49 views
1

我用很多领域模型编写了一些swing应用程序(不是富客户端,独立运行)。这些是Java Bean,通过演示模型绑定到用户界面。Java swing应用程序保存自定义文件格式

现在我需要的所有域的数据保存在某种自定义的项目文件格式。

该软件会经过很多版本,在至极的域模型总是改变一点点。我需要保持向后兼容性。我真的不知道最好的办法是什么。

我想过java序列化。但是,这似乎是很多低级别的工作,对于所有模型都要仔细实施自定义序列化。特别是如果我考虑向后兼容性部分。

一个更好的方法的位似乎是使用Hibernate和注解坚持域模型。但是我可以使用这个数据库吗?我可以进入连接到数据库的问题,因为它不能完全集成(没有通过本地端口上的通信=>防火墙等)。另外,通过使用orm和数据库作为中间件来保存一些文件,看起来好像是一个的小无论如何膨胀。

要总结一下:我'相对较新的Java和编程现在大规模的Swing应用程序。我几乎没有序列化的经验(但我有Effective Java:D),JPA和hibernate,可用的java数据库等等。

谁能给我一个提示吗? :)

+0

JSON序列化呢?有些库可以将bean转换为JSON并返回。 http://java.ociweb.com/mark/programming/JSON/JSONUtil.java.html – 2010-06-23 12:53:47

+0

我已经在一个中等规模的项目中做了这个序列化,它的工作很好,并有一个小的学习曲线。 – 2010-06-23 12:59:24

回答

0

我'。 甜蜜的地方在于,只需稍加一点配置,我就不需要修改我的模型 - 保存/加载只是在开箱即可使用。

版本控制可能会使用XSLT将旧的保存文件转换为新版本。事实上,这将是非常直接的,因为我可以保存一个旧文件,保存一个新文件,只是写差异的XSLT。

1

使用休眠是一个很好的可能性。

一些embedded database exist,所以当应用程序启动休眠开始前,你可以启动它。

当然好处是,如果您想将代码从独立代码转换为基于服务器的代码,那么您的java bean - hibernate - db模型在该上下文中也可以很好地工作。序列化为你自己的格式就像制作你自己的平面文件数据库一样,为什么当它已经为你完成时再写一次我还要建议Apache Derby用于嵌入式使用(来自:Java Drinker)

对于迁移部分,最简单的方法是在数据库中创建一个版本表,告诉你什么是当前版本,然后在应用程序的开始,数据库启动之后,但在创建会话工厂(或实体管理器)检查当前数据库版本,检查最新版本的sql迁移文件,如果两者不匹配,则执行当前数据库版本上方的所有sql查询。

迁移文件可能看起来像:

-- version:1 
sql query 1 (update, alter, ...) 

-- version:2 
sql query 2 

... 

您将有当你写迁移文件要非常小心。例如,始终考虑表中存在数据(不要在表中添加不可空列,而是添加列,更新列,然后添加非空值约束)。

[编辑]

  • 首次进口部分:

如果数据库不存在或为空(例如版本表是不存在的),您可以通过创建数据库开始,然后开始从旧格式迁移到数据库格式。代码将如下所示:读取旧数据文件,实例化您的hibernate/jpa实体并持久保存它们。 (你也可以写出更高效的代码产生直接的SQL查询,但将需要更多的时间,并会有很多难以维持时,你的JPA模型的变化)

  • 出口:

的嵌入式数据库将在磁盘上拥有自己的文件。在不同的工作站之间共享数据就足够了。
如果您想与其他应用程序共享数据,您需要开发导入的相反功能:从数据库加载所有需要的实体并将其写入不同的文件格式。它可能会从您的应用程序ui触发。

+0

我还想说一些关于嵌入式数据库的知识,但是你打败了我:-) 当然,如果你想将代码从独立的代码转换成基于服务器的代码,你的java bean - hibernate - db模型在这种情况下也可以很好地发挥作用。 序列化到自己的格式就如同让自己的平面文件数据库,为什么又写它时,它为你 本已完成,我也打算建议Apache Derby的嵌入式应用 – 2010-06-23 13:08:08

+0

是,数据库迁移会一部分。另一部分是将较旧的项目文件导入较新的数据库。 此外,最好的方式来从该数据库导入/导出项目文件? – abp 2010-06-23 13:54:20

+0

我已经编辑了我的答案和您的意见 – Thierry 2010-06-23 19:36:14

0

如果使用DataNucleus作为JPA实现(只要需要保存的数据适合使用JPA持久化),则可以使用JPA将所有信息保存为JSON/XML/Excel/ODF格式。取决于数据,但是那些列出类似XML的格式可能更适合。

--Andy(DataNucleus)现在使用的XStream