翻译的这篇文章包含了好几个知识点,虽然短了点儿,但是非常有用。
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 MVC、Spring 和 Hibernate 是Java Web开发中的三大主流框架,它们各司其职,共同构建了一个强大而灵活的后端架构。Spring MVC 负责处理HTTP请求并将其路由到相应的控制器,Spring 提供了依赖注入(DI)和面向...
在整合 Quartz、Hibernate 和 Spring 的场景下,开发者可以创建自定义的 Spring Bean 作为 Quartz 作业,这些作业可以在指定的时刻由触发器调用。触发器(如 CornTrigger)允许以 CRON 表达式定义任务的执行时间,...
将Spring3 MVC和Hibernate整合的业务逻辑封装为服务,通过Axis2发布,可以使得服务接口对调用者透明,易于集成到其他系统中。 **Quartz** 是一个开源的作业调度框架,用于在Java应用程序中安排和执行任务。它支持...
Spring支持Ehcache作为二级缓存,通过声明式配置,可以将数据存储在内存中,减少数据库查询,提高响应速度。 5. Spring与Quartz整合:Quartz是用于任务调度的开源库。Spring与Quartz结合,可以方便地创建、管理和...
【标题】:“Spring+SpringMVC+Hibernate/金融类项目源码,针对对账业务”是一个基于Spring框架的完整金融项目,它集成了Spring、SpringMVC和Hibernate三大核心技术,用于处理金融领域的对账功能。这个项目展示了...
quartz1.6.5 整合 Hibernate、Spring,本例支持同时运行多个不同的任务,每个任务动态调用的方法和时间都不一样; 附件中有支持各种数据库的脚本;本例支持Oracle10g数据库脚本;开发测试使用的IDE工具MyEclipse6.5;...
Spring MVC、Spring 和 Hibernate 是Java开发中非常重要的三个框架,它们构成了经典的Java企业级应用开发栈,也被称为SSH(Spring、Struts、Hibernate)架构,尽管这里的Struts被Spring MVC替代了。这些框架分别处理...
Quartz是一个开源的作业调度框架,而Spring框架则为Java应用程序提供了强大的依赖注入(DI)和面向切面编程(AOP)功能,将两者结合,可以在Spring管理的bean中无缝集成定时任务。 Quartz的核心概念包括Job、...
在Spring Boot的`pom.xml`文件中,引入Spring Boot的`spring-boot-starter-quartz`和`spring-boot-starter-data-jpa`依赖,同时也要添加MySQL的JDBC驱动依赖,以便与数据库交互。 ```xml <groupId>org.spring...
本文将深入探讨如何利用Java Web开发中的两大热门框架——Hibernate和Spring,构建一个高效、易维护的物业管理系统。Hibernate作为一款强大的对象关系映射(ORM)框架,可以简化数据库操作;而Spring框架则提供了...
Struts2、Spring和Hibernate是Java企业级开发中三大核心框架,它们的组合常被称为SSH框架,用于构建高效、可维护的Web应用程序。本工作流系统实例是基于SSH框架搭建的,旨在帮助开发者深入理解这三大框架的集成与...
在本项目中,我们利用了Java技术栈中的四个核心组件:Spring MVC、Spring、Hibernate以及Bootstrap,构建了一个全面的图书管理系统。这个系统旨在提供高效、用户友好的图书管理功能,涵盖了从图书入库、检索到借阅、...
在这个项目中,Hibernate可能被用来存储和检索quartz的作业和触发器信息,包括时间规则,这样就可以在数据库中动态更新任务配置,而无需修改代码。 4. **Quartz库**:Quartz是Java中广泛使用的任务调度库,它可以...
在Quartz中,动态添加、删除和修改任务是常见的需求,这使得应用程序能够根据运行时的情况来调整其执行计划。下面我们将深入探讨如何在Quartz中实现这些操作。 1. **动态添加任务** 动态添加任务是指在程序运行时...
Spring、Hibernate和Struts2是Java Web开发中的三大框架,它们各自负责应用程序的不同层面,而将这三者整合使用,可以构建出强大的企业级Web应用。Spring作为一个全面的轻量级容器,负责管理对象(包括服务层和DAO层...
这些框架各自在应用开发中扮演着重要的角色:Spring提供了依赖注入和面向切面编程,Struts2用于处理HTTP请求和控制应用程序流程,而Hibernate则作为持久层框架负责数据库操作。 1. **Spring 4.2**: - **依赖注入...
SSH框架是Java开发中常用的三大框架的组合,包括Struts2、Spring和...在实际开发中,SSH框架的整合还可能涉及到安全框架(如Spring Security)、任务调度(如Quartz)等其他组件的集成,以满足更复杂的企业级需求。
- **功能简介**:包含在应用中使用 Spring 的 AOP 特性时所需的类,如声明式事务管理。 - **应用场景**:适用于需要使用 AOP 功能的项目。 - **依赖关系**:依赖于 `spring-core.jar`、`spring-beans.jar`、`cglib-...
Struts、Hibernate和Spring是Java开发中非常流行的三大框架,它们各自负责Web应用的不同层面,协同工作可以构建出高效、可维护的系统。Struts主要处理MVC(Model-View-Controller)架构中的控制层,Hibernate则专注...