5

我正在研究架构 Hibernate/JPA/Spring/Zk,这些天我把问题加倍,因为我必须学习很多框架。

我有一个问题让我困惑了好几天。

我听说“模式” OpenSessionInView 可以保持休眠事务以进行延迟加载。许多人还说图案不是很干净。

另一方面,据说 PersistentContext 扩展不是线程安全的,因此不适合保持 entityManager 的活动。

那么,这些问题的真正解决方案是什么?我认为这些问题是由 ajax 的引入引起的,它允许更多的可能性,特别是在必要时使用延迟加载来加载一些重的集合。

目前,我在扩展模式下尝试了@PersistenceContext。它正在工作......我必须为我的 JUnit 测试设置它,它在我的 Web 应用程序中也可以使用延迟加载而无需更多配置。

框架(Spring,JPA 2.0)的发展是否意味着现在使用 PersistentContext 更容易、更“干净”?

如果不是这种情况,我们是否应该使用 Spring 中的 OpenSessionInViewFilter 并在事务模式下替换 PersistentContext?

谢谢你。

4

1 回答 1

1

我听到你了。自 2008 年以来,我已经在多个应用程序中实现了这两种模式。现在,我完全放弃了任何有状态模式。当您向客户端引入状态时,您会提出可伸缩性和状态管理问题:您是否在客户端中合并,是否在用户会话中保存,当您通过向导并且对象在保存之前必须是瞬态的时会发生什么?您将如何同步客户端和服务器端状态?当 db 发生变化时会发生什么——客户端是否中断?

看看现有技术的趋势,包括 Spring MVC:模式是构建两个项目:1)restful webservices 2)用户界面。状态通过不可变的域模型共享。当然,您最终可能会维护一组 dto,但它们是可预测的、便宜的并且可以无限扩展。

我的推荐?如果您想重用服务器端验证,请避免通过网络发送代理对象并在客户端处理 dto 或与客户端共享域模型。惰性集合可以通过 Ajax 的细粒度 api 调用加载。这样,您就可以完全控制客户端。

这就是社交网络在过去五年中的扩展方式。

于 2012-10-29T16:50:05.397 回答