交易的扩展会话

时间:2010-10-15 21:29:45

标签: java hibernate orm

什么是'扩展会话反模式'?

1 个答案:

答案 0 :(得分:5)

扩展(或长期)会话(或 会话每会话 )是一个可能超出交易持续时间的会话,而不是交易 - 范围会话(或会话每请求)。这不一定是反模式,这是一种实现长对话的方式(即与数据库的对话而不是跨多个事务),这只是另一种设计单位的方式工作。

像任何事情一样,我只是说长时间的谈话可能被滥用或被错误地实施。

以下是文档介绍Long对话的方法:

  

12.1.2. Long conversations

     

会话每请求模式是   不是设计单位的唯一方法   工作。许多业务流程都需要   一系列的互动   与之交错的用户   数据库访问。在网络和   企业应用程序,它不是   数据库事务可以接受   跨越用户交互。考虑   以下示例:

     
      
  • 对话框的第一个屏幕打开。用户看到的数据是   加载在特定的Session和   数据库事务。用户是免费的   修改对象。
  •   
  • 用户在5分钟后点击“保存”并期望他们的   修改要坚持不懈。   用户也期望他们是   编辑这个的唯一人   信息,没有冲突   修改已经发生。
  •   
     

从用户的角度来看,我们   把这个工作单元称为长期运行   对话或申请   交易。有很多方法可以   在您的应用程序中实现这一点。

     

第一个天真的实施可能   保持会话和数据库   在用户思考期间交易开放   时间,数据库中保存了锁   防止并发修改和   保证隔离和原子性。   这是一种反模式,因为锁定   争论不允许   应用程序与数字进行扩展   并发用户。

     

您必须使用多个数据库   交易实施   会话。在这种情况下,   保持业务隔离   过程变得局部   申请的责任   层。通常是单一的谈话   跨越多个数据库事务。   如果只有其中一个,它将是原子的   数据库事务(最后一个)   存储更新的数据。所有其他人   只需读取数据(例如,在   向导式对话跨越几个   请求/响应周期)。这是   比实际更容易实施   声音,特别是如果你利用一些   Hibernate的功能:

     
      
  • 自动版本控制:Hibernate可以执行自动乐观   你的并发控制。它可以   自动检测是否并发   用户期间发生了修改   想想时间。最后检查一下   谈话。
  •   
  • 分离的对象:如果您决定使用每个请求的会话模式,   所有加载的实例都将在   用户思考时的分离状态。   Hibernate允许你重新附加   对象并坚持修改。   该模式被称为   会话每个请求与 - 分离的对象。   自动版本控制用于   隔离并发修改。
  •   
  • 扩展(或长)会话:可以断开Hibernate会话   来自底层的JDBC连接   在数据库事务之后   当a。时已经提交并重新连接   发生新客户端请求。这个   模式被称为   每次会话会话和制作   甚至不需要重新附加。   自动版本控制用于   隔离并发修改和   会议将不被允许   自动刷新,但是   明确地。
  •   
     

<强>这两个   会话每次请求与独立式的对象   和会话每会话有   优点和缺点。这些   缺点将在后面讨论   本章的背景下   乐观并发控制。

我在下面添加了一些参考文献,但我建议阅读整篇Chapter 12. Transactions and Concurrency

参考