簡述Hibernate事務管理器
Hibernate有很多值得學習的地方,這里我們主要介紹Hibernate事務管理器,包括介紹OrderListManager服務等方面。
Hibernate事務管理器
由于我們已決定使用Hibernate作為ORM工具,下一步要做的就是配置一個特定于Hibernate事務管理器實現。
- <beans>
- <!-- other code goes here... -->
- <bean id="transactionManager1"
- class="org.springframework.orm.hibernate.
- HibernateTransactionManager">
- <property name="sessionFactory">
- <ref local="sessionFactory1"/>
- </property>
- </bean>
- </beans>
設計多個組件中的事務的管理
現在,我們來討論什么是“裝配組件事務”。您也許注意到了為域中的服務級組件OrderListManager所指定的各種TX屬性。
為了更好的說明,我們來列出我們的域中的一些非功能性需求(Non-Functional Requirement,NFR):
◆業務對象需要保存在一個數據庫中(appfuse1)。
◆審計時要登錄到另一個數據庫中(appfuse2),出于安全的考慮,數據庫要有防火墻保護。
◆業務組件應該可以重用。
◆必須盡一切努力審計業務服務層的所有活動。
考慮了以上要求之后,我們決定,OrderListManager服務會將所有的審計日志調用委托給已經可用的AuditManager組件。
這里值得注意的一點是,由于我們的NFR,我們要將與OrderListManager相關的對象映射到appfuse1數據庫,而將與審計相關的對象映射到appfuse2。這樣,無論要審計什么,OrderListManager組件都會調用AuditManager組件。我們會看到,OrderListManager組件中的所有方法都應該是事務性的,因為我們通過服務來創建訂單和線項目(line item)。那么AuditManager組件中的服務呢?因為它做的是審計跟蹤,我們關心的是盡可能維持長時間的審計跟蹤,并針對系統中所有可能的業務活動。這就產生了如下的需求:“即使主要的業務活動失敗了,也要進行審計跟蹤記錄”。AuditManager組件同樣要有自己的事務,因為它也與自己的數據庫進行交互。Hibernate事務管理器如下所示:
- <beans>
- <!-- other code goes here... -->
- <bean id="auditManager"class="org.springframework.transaction.
interceptor.TransactionProxyFactoryBean">- <property name="transactionManager">
- <ref local="transactionManager2"/>
- </property>
- <property name="target">
- <ref local="auditManagerTarget"/>
- </property>
- <property name="transactionAttributes">
- <props>
- <prop key="log">
- PROPAGATION_REQUIRES_NEW
- </prop>
- </props>
- </property>
- </bean>
- </beans>
【編輯推薦】