`

在spring框架中添加HibernateInterceptor使得quartz可以调用

阅读更多

翻译的这篇文章包含了好几个知识点,虽然短了点儿,但是非常有用。

1.spring

2.hibernate

3.quartz--定时调度工具,spring已经做了封装,也可以单独使用。

4.OpenSessionInViewFilter--web框架下的一个filter,能够让web request使用单一的hibernate session。

有的j2ee项目在web.xml文件中添加了OpenSessionInViewFilter,其目的是给web request提供单一的hibernate session,但是它也只能给web request提供hibernate session。也就是说,如果有某一个hibernate请求不是经由web request发起的,而是由quartz这样的定时任务发起的,那么quartz怎么样才能得到hibernate session呢?

解决办法就是使用HibernateInterceptor。当quartz发起hibernate session请求时,HibernateInterceptor会提供一个hibernate session给它。

配置文件如下:

 

xml 代码

 

  1. <!-- Declaration of HibernateInterceptor -->  
  2.     <bean id="hibernateInterceptor" class="org.springframework.orm.hibernate3.HibernateInterceptor">  
  3.          <property name="sessionFactory">  
  4.            <ref bean="sessionFactory"/>  
  5.          </property>  
  6.     </bean>       
  7.     <!-- Manager template  -->  
  8.     <bean id="txProxyTemplate" abstract="true"  
  9.         class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">  
  10.         <property name="transactionManager" ref="transactionManager"/>  
  11.         <property name="transactionAttributes">  
  12.             <props>  
  13.                 <prop key="save*">PROPAGATION_REQUIRED</prop>  
  14.                 <prop key="remove*">PROPAGATION_REQUIRED</prop>  
  15.                 <prop key="update*">PROPAGATION_REQUIRED</prop>                   
  16.                 <prop key="create*">PROPAGATION_REQUIRED</prop>      
  17.                 <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>  
  18.             </props>  
  19.         </property>  
  20.         <property name="preInterceptors">  
  21.             <list>  
  22.              <ref bean="hibernateInterceptor"/>  
  23.             </list>  
  24.         </property>                           
  25.     </bean>  
  26.     <!-- Sample Manager that encapsulates business logic -->  
  27.     <bean id="userManager" parent="txProxyTemplate">  
  28.         <property name="target">  
  29.             <bean class="com.acme.service.impl.UserManagerImpl" autowire="byName"/>  
  30.         </property>  
  31.     </bean>  


其中,<!-- Declaration of HibernateInterceptor -->部分定义了HibernateInterceptor

 <!-- Manager template  -->部分定义了模板,并且加入了HibernateInterceptor

<!-- Sample Manager that encapsulates business logic -->部分定义业务逻辑中的bean,记住,一定让他使用模板。

译者言:

1.这样做使得非web request可以使用j2ee资源。

2.我的做法和上面有些差别,但是也成功了。 我的做法是:

我没有定义<!-- Declaration of HibernateInterceptor -->这一部分,只定义了模板,在添加bean的时候使用模板。

 

原文如下:
Using HibernateInterceptor to bind Hibernate Sessions for Quartz jobs in Spring
I use the OpenSessionInViewFilter to provide a single Hibernate Session for each request to my Spring webapplications. It works transparently and well, but only for web requests. So how do you provide a Hibernate Session to your background jobs (like Quartz scheduled jobs)?

I wire a HibernateInterceptor into my proxy template for all the managers in my application. With this configuration, when Quartz fires up a job and makes a call to the manager/service layer the HibernateInterceptor binds a Hibernate Session to the background thread. Beautiful.

It looks something like this:(代码同上)

分享到:
评论

相关推荐

    Spring4.2_Struts2_Hibernate4.3框架整合

    这些框架各自在应用开发中扮演着重要的角色:Spring提供了依赖注入和面向切面编程,Struts2用于处理HTTP请求和控制应用程序流程,而Hibernate则作为持久层框架负责数据库操作。 1. **Spring 4.2**: - **依赖注入...

    SSH框架资料

    **Spring框架**:Spring是核心的Java企业级应用框架,它提供了依赖注入(DI)和面向切面编程(AOP)的功能,使得应用程序的组件可以松耦合,便于测试和维护。Spring还提供了数据访问接口(DAO)支持,包括JDBC抽象层...

    ssh框架demo

    2. **Spring**:Spring框架是Java企业级应用的核心容器,提供依赖注入(DI)和面向切面编程(AOP)等核心功能。在SSH中,Spring主要负责管理bean,包括Action和Service,以及数据库连接等。`controller层`通常指的是...

    ssh框架整合jar包

    SSH框架整合是Java开发中常见的技术栈,包括Spring、Struts2和Hibernate这三个核心组件。它们各自负责不同的职责,共同构建了一个强大的企业级应用开发框架。 Spring是一个全面的后端应用框架,它提供了依赖注入...

    最简单Struts2

    它们可以在Action执行前后执行特定的操作,如日志记录、权限验证、性能监控等。 3. **动态方法调用(Dynamic Method Invocation,DMI)**:允许开发者根据URL中的参数来动态调用Action的方法,增强了路由的灵活性。 ...

    北大青鸟java课程的学习大纲.docx

    9. **SpringMVC**:Spring框架的Web模块,用于构建MVC应用。 10. **MyBatis**:轻量级持久层框架,结合XML或注解实现SQL映射。 11. **SpringSecurity或Shiro**:安全框架,提供身份验证、授权等功能。 12. **...

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    Java EE 框架..................................................................................................................................................................................1 ...

Global site tag (gtag.js) - Google Analytics