加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Rich Client Java(Swing)应用程序的Peristence Web Service

发布时间:2020-12-15 02:22:49 所属栏目:Java 来源:网络整理
导读:我正在使用Netbeans RCP富客户端将我的客户端 – 服务器富客户端数据库应用程序(Swing)重写为三层应用程序. 默认情况下,Hibernate和其他JPA提供程序只能以非常繁琐的方式使用来自富客户端(本机数据库连接不会切断防火墙,丢失延迟加载,管理Session / EntityMa
我正在使用Netbeans RCP富客户端将我的客户端 – 服务器富客户端数据库应用程序(Swing)重写为三层应用程序.

默认情况下,Hibernate和其他JPA提供程序只能以非常繁琐的方式使用来自富客户端(本机数据库连接不会切断防火墙,丢失延迟加载,管理Session / EntityManager生命周期等概念问题等等).因此,需要某种扩展来在富客户端中轻松使用它们.

通常,富客户端调用业务逻辑层(在服务器上)中的Web服务.通常,专用Web服务方法处理每种对象类型的CRUD操作.
现在,我不想为我的应用程序的每个持久类的CRUD操作编写自定义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()).

如果验证和访问控制检查可以插入服务器组件,那将会很好.

有没有这样的持久性服务项目?
可能作为JPA持久性提供程序附带的扩展?

解决方法

当我在2002年设计一个类似的应用程序时,我们搜索了一个框架以供使用,但最终必须运行我们自己的.
将持久对象的子图传输到swing客户端是通过将它们转换为DTO(DataTransferObjects)对象来完成的,这些对象维护了属性映射和信息,如果属性被客户端弄脏了.在返回服务器的路上,只有trx中更新了脏污的属性.

您可能希望将JDO 2.0用作持久层.它支持从持久对象图中分离对象或子树,通过线路发送这些分离的对象,并在以后的事务中重新附加它们.

但是,您无法最小化通过线路发送的数据.

目前为止最好的选择:运行自己的机制并将createDTO和updateFromDTO方法添加到持久对象中,但我很高兴被证明是错误的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读