使用基于持久性的框架开发 DB2 应用程序
2009-11-23 00:00:00 来源:WEB开发网织入 DAO 层
数据源和会话工厂设置好后,下一步是在织入 DAO(本例中为 DepartmentDAO)以便使用 SessionFactory。接下来,插入 Spring 的 TransactionProxyFactoryBean,它将拦截对应用程序的 DepartmentDAOImpl 对象的方法调用,并声明式地在上面应用事务上下文。
在这个示例中,DepartmentDAOImpl 类的 addDepartment 方法作为事务的一部分执行,带有事务属性 PROPAGATION_REQUIRED。这个属性相当于 EJB 容器的 TX_REQUIRED。如果希望让方法总是在事务中运行,可以使用 PROPAGATION_REQUIRED。如果事务已运行,bean 方法会加入这个事务,或者 Spring 轻量级事务管理器会另行启动一个事务。如果想在调用组件服务时总是启动新事务,可以使用 PROPAGATION_REQUIRES_NEW 属性。
清单 3. 编织应用程序的 DAO 和 TransactionManager<!-- Pass the session factory to our DepartmentDAO -->
<bean id="departmentDAOHelper"
class="springexample.db2persist.hibernate.DepartmentDAOHelper">
<property name="departmentDAO"><ref local="departmentDAOTarget"/></property>
</bean>
<bean id="departmentDAO"
class="springexample.db2persist.hibernate.DepartmentDAOImpl">
<property name="sessionFactory"><ref local="exampleSessionFactory"/></property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate.HibernateTransactionManager">
<property name="sessionFactory"><ref bean="exampleSessionFactory"/></property>
</bean>
<bean id="departmentDAOTarget"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"><ref local="transactionManager"/></property>
<property name="target"><ref local="departmentDAO"/></property>
<property name="transactionAttributes">
<props>
<prop key="addDepartment">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
更多精彩
赞助商链接