Rich Client Java(Swing)应用程序的Peristence Web Service
我正在使用Netbeans RCP富客户端将我的客户端 – 服务器富客户端数据库应用程序(Swing)重写为三层应用程序.
默认情况下,Hibernate和其他JPA提供程序只能以非常繁琐的方式使用来自富客户端(本机数据库连接不会切断防火墙,丢失延迟加载,管理Session / EntityManager生命周期等概念问题等等).因此,需要某种扩展来在富客户端中轻松使用它们. 通常,富客户端调用业务逻辑层(在服务器上)中的Web服务.通常,专用Web服务方法处理每种对象类型的CRUD操作. 有没有这样的持久性服务??? 以下是我的想法/要求的详细信息: 该服务应该与JPA注释的POJO一起使用,因此它应该在服务器上使用某种JPA持久性提供程序.目前,我正在使用Hibernate,所以如果它主动支持Hibernate,那么它是一个优点.当然POJO类必须包含在服务器端JPA配置中,我不希望处理任何一种未知的POJO. 我不想创建单独的值对象或数据传输对象,以便在服务的客户端和服务器部分之间发送数据.我想只使用JPA注释的POJO进行转移.我相信这是现在的标准做法. 客户端应该接收数据并将带有HTTP请求的数据发送到服务的服务器端,以减少防火墙通信问题. HTTP代理使用应该是可配置的. 持久性服务的客户端可以获取其执行的JPA QL查询的POJO列表结果(作为简单查询字符串发送,可选地**也在请求中发送命名参数**).这些查询以Web服务调用或简单HTTP请求的形式从客户端发送到servlet.如果可以在一个请求中发送几个JPA查询,那将是很好的.客户端将请求的结果作为POJO列表接收,这些POJO可能具有延迟加载的集合和对象引用(这些不是在查询时从服务器发送的). 当客户端应用程序访问POJO中的延迟加载属性时(在稍后的时间点,而不是在初始查询中),持久性服务的客户端应该能够自动/透明地执行延迟加载请求.因此,在将POJO传输到客户端后,透明延迟加载应该仍然有效. 新的,更新的/脏的或待删除的POJO可以由持久性服务的客户端发送到服务器,其中变更被持久化并且成功/失败状态被发回(例如,给予新持久的ID) POJO)中.可以在一个请求中发送几个待保存的POJO. 它应该有一个标记事务边界的机制,因此可以在一个数据库事务中执行多个独立的HTTP服务调用(保持类似Session / EntityManager.beginTransaction(),commit()和rollback()). 如果验证和访问控制检查可以插入服务器组件,那将会很好. 有没有这样的持久性服务项目? 解决方法
当我在2002年设计一个类似的应用程序时,我们搜索了一个框架以供使用,但最终必须运行我们自己的.
将持久对象的子图传输到swing客户端是通过将它们转换为DTO(DataTransferObjects)对象来完成的,这些对象维护了属性映射和信息,如果属性被客户端弄脏了.在返回服务器的路上,只有trx中更新了脏污的属性. 您可能希望将JDO 2.0用作持久层.它支持从持久对象图中分离对象或子树,通过线路发送这些分离的对象,并在以后的事务中重新附加它们. 但是,您无法最小化通过线路发送的数据. 目前为止最好的选择:运行自己的机制并将createDTO和updateFromDTO方法添加到持久对象中,但我很高兴被证明是错误的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |