【发布时间】:2010-12-20 10:26:03
【问题描述】:
我正在将我的客户端-服务器富客户端数据库应用程序 (Swing) 重写为具有 Netbeans RCP 富客户端的三层应用程序。
默认情况下 Hibernate 和其他 JPA 提供程序只能从富客户端以非常麻烦 的方式使用(本机数据库连接未通过防火墙,丢失延迟加载,管理 Session/EntityManager 生命周期的概念问题......等等其他问题)。因此,需要某种扩展才能在富客户端中舒适地使用它们。
通常,富客户端在业务逻辑层(在服务器上)调用 webservices。通常,专用 Web 服务方法处理每个对象类型的CRUD 操作。 现在,我不想为我的应用程序的每个持久类的 CRUD 操作编写自定义 Web 服务,所以我认为可能会有一个 通用持久性网络服务,用于此类操作,至少可以处理应用程序的所有 CRUD 操作。
有这样的持久化服务吗???
以下是我的想法/要求的详细信息:
该服务应该与 JPA-annotated POJOs 一起使用,因此它应该在服务器上使用某种 JPA 持久性提供程序。目前,我正在使用 Hibernate,所以如果它积极支持 Hibernate,那就是一个加号。当然 POJO 类必须包含在服务器端 JPA 配置中,我不希望处理任何类型的未知 POJO。
我不想创建单独的值对象或数据传输对象来在服务的客户端和服务器部分之间发送数据。我想仅使用 JPA 注释的 POJO,即使是 transfer。我相信这是当今的标准做法。
客户端应接收数据并将数据通过 HTTP 请求发送到服务的服务器端,以减少防火墙通信问题。 HTTP 代理的使用应该是可配置的。
持久化服务的客户端可以获取其执行的 JPA QL 查询的 POJO 列表结果(作为简单的查询字符串发送,可选**命名参数**也在请求中发送)。这些查询以 webservice 调用或简单 HTTP 请求的形式从客户端发送到 servlet。 如果可以在一个请求中发送多个 JPA 查询,那就太好了.客户端以 POJO 列表的形式接收请求的结果,这些 POJO 可能具有延迟加载集合和对象引用(这些不是在查询时从服务器发送的)。
当客户端应用程序访问一个POJO 中的延迟加载属性(在稍后的时间点,而不是在初始查询时)。因此,在将 POJO 转移到 客户端 之后,透明延迟加载应该继续工作。
新的、更新的/脏的或要删除的 POJO 可以由持久性服务的客户端发送到更改持久化并成功的服务器/failure 状态被发回(例如,提供给新持久化 POJO 的 ID)。一个请求可以发送多个待保存的 POJO。
它应该有一种标记事务边界的机制,因此可以在一个数据库事务中执行多个独立的 HTTP 服务调用(保留类似 Session/EntityManager.beginTransaction()、commit() 和 rollback())。
如果验证和访问控制检查可以插入服务器组件,那就太好了。
有没有这样的持久化服务项目??? 可能作为 JPA 持久性提供程序附带的扩展?
【问题讨论】:
标签: java web-services http jpa persistence