翻译的这篇文章包含了好几个知识点,虽然短了点儿,但是非常有用。
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 代码
-
- <bean id="hibernateInterceptor" class="org.springframework.orm.hibernate3.HibernateInterceptor">
- <property name="sessionFactory">
- <ref bean="sessionFactory"/>
- </property>
- </bean>
-
- <bean id="txProxyTemplate" abstract="true"
- class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
- <property name="transactionManager" ref="transactionManager"/>
- <property name="transactionAttributes">
- <props>
- <prop key="save*">PROPAGATION_REQUIRED</prop>
- <prop key="remove*">PROPAGATION_REQUIRED</prop>
- <prop key="update*">PROPAGATION_REQUIRED</prop>
- <prop key="create*">PROPAGATION_REQUIRED</prop>
- <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
- </props>
- </property>
- <property name="preInterceptors">
- <list>
- <ref bean="hibernateInterceptor"/>
- </list>
- </property>
- </bean>
-
- <bean id="userManager" parent="txProxyTemplate">
- <property name="target">
- <bean class="com.acme.service.impl.UserManagerImpl" autowire="byName"/>
- </property>
- </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:(代码同上)
分享到:
相关推荐
这些框架各自在应用开发中扮演着重要的角色:Spring提供了依赖注入和面向切面编程,Struts2用于处理HTTP请求和控制应用程序流程,而Hibernate则作为持久层框架负责数据库操作。 1. **Spring 4.2**: - **依赖注入...
**Spring框架**:Spring是核心的Java企业级应用框架,它提供了依赖注入(DI)和面向切面编程(AOP)的功能,使得应用程序的组件可以松耦合,便于测试和维护。Spring还提供了数据访问接口(DAO)支持,包括JDBC抽象层...
2. **Spring**:Spring框架是Java企业级应用的核心容器,提供依赖注入(DI)和面向切面编程(AOP)等核心功能。在SSH中,Spring主要负责管理bean,包括Action和Service,以及数据库连接等。`controller层`通常指的是...
SSH框架整合是Java开发中常见的技术栈,包括Spring、Struts2和Hibernate这三个核心组件。它们各自负责不同的职责,共同构建了一个强大的企业级应用开发框架。 Spring是一个全面的后端应用框架,它提供了依赖注入...
它们可以在Action执行前后执行特定的操作,如日志记录、权限验证、性能监控等。 3. **动态方法调用(Dynamic Method Invocation,DMI)**:允许开发者根据URL中的参数来动态调用Action的方法,增强了路由的灵活性。 ...
9. **SpringMVC**:Spring框架的Web模块,用于构建MVC应用。 10. **MyBatis**:轻量级持久层框架,结合XML或注解实现SQL映射。 11. **SpringSecurity或Shiro**:安全框架,提供身份验证、授权等功能。 12. **...
Java EE 框架..................................................................................................................................................................................1 ...