2012-08-15 80 views
5

我正在研究体系结构Hibernate/JPA/Spring/Zk,并且我现在增加了许多问题,因为我必须学习很多框架。OpenSessionInView vs PersistentContext(扩展)

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

我听说有关“模式”的OpenSessionInView来保持Hibernate事务处于活动状态以进行延迟加载。 许多人也说这种模式不是很干净。

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

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

现在,我在扩展模式下尝试了@PersistenceContext。它正在工作...... 我必须为我的JUnit测试设置它,并且它在我的Web应用程序中也可以工作,不需要更多配置就可以进行延迟加载。

是否框架(Spring,JPA 2.0)的演变意味着它现在更容易,更“干净”与PersistentContext一起工作?

如果情况并非如此,我们是否应该使用Spring的OpenSessionInViewFilter并以事务模式替换PersistentContext?

谢谢。

回答

1

我听到你的声音。自2008年以来,我在几个应用程序中实现了这两种模式。现在,我放弃了任何有状态的模式。当您向客户端引入状态时,您会提出可伸缩性和状态管理问题:您是否在客户端中合并,是否保存在用户会话中,当您通过向导并且对象在保存之前必须是瞬态时会发生什么?你将如何同步客户端和服务器端的状态?数据库更改时会发生什么 - 客户端是否中断?看看现有技术的趋势,包括Spring MVC:模式是建立两个项目:1)宁静的Web服务2)用户界面。状态通过不可变的域模型共享。当然,你最终可能会维护一套dtos,但它们是可预测的,便宜的,并且可以无限扩展。

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

这就是社交网络在过去五年中的规模。