- 浏览: 32716 次
- 性别:
- 来自: 深圳
文章分类
最新评论
转自:http://blog.csdn.net/aspdao/article/details/5472955
步骤1:将所有的*.hbm.xml文件中的lazy="false"改成lazy="true"
步骤2:替换MyEclipse自动添加的jar包cglib-2.1.3.jar为cglib-2.2_beta1.jar,否则会出现如下异常
java.lang.NullPointerException org.hibernate.tuple.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:372)
...
步骤3:在项目的web.xml中添加(注意这个Filter要在struts的Filter的前面)
- < listener >
- < listener-class >
- org.springframework.web.context.ContextLoaderListener
- </ listener-class >
- </ listener >
- < context-param >
- < param-name > contextConfigLocation </ param-name >
- < param-value > /WEB-INF/applicationContext.xml </ param-value >
- </ context-param >
- lt;filter>
- < filter-name > hibernateFilter </ filter-name >
- < filter-class >
- org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
- </ filter-class >
- <!-- < init-param >
- < param-name > singleSession </ param-name >
- < param-value > true </ param-value >
- </ init-param > -- >
- </ filter >
- < filter-mapping >
- < filter-name > hibernateFilter </ filter-name >
- < url-pattern > /* </ url-pattern >
- </ filter-mapping >
步骤4:将struts配置文件中的一段去掉(之前没有发现这里,导致配置完成后一部分懒加载还是抛异常)
javax.servlet.ServletException:
org.hibernate.LazyInitializationException:
could not initialize proxy - the owning Session was closed
- <!--
- < plug-in
- className = "org.springframework.web.struts.ContextLoaderPlugIn" >
- < set-property property = "contextConfigLocation"
- value = "/WEB-INF/applicationContext.xml" />
- </ plug-in >
- -->
至此,所有的页面访问全部都正常了,sql语句由原来的上百条减少到几条,(仅仅是那些必须的sql语句了),响应时间也由原来的几秒十几秒减少到 了1秒以内,多数为0.5秒,有的减少到0.1秒以内。可见效果有多么明显!!但是现在所有的查询操作没问题了,但是update和save还是不行,还 是哪里的配置不对,抛出的异常为:
javax.servlet.ServletException: org.springframework.dao.InvalidDataAccessApiUsageException:
Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL):
Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.
这个异常产生的主要原因是DAO采用了Spring容器的事务管理策略,如果操作方法的名称和事务策略中指定的被管理的名称不能够匹配 上,spring 就会采取默认的事务管理策略(PROPAGATION_REQUIRED,read only).如果是插入和修改操作,就不被允许的,所以包这个异常
解决的办法是利用Spring的AOP,过滤那些update、delete、save、create等非只读操作,并将其设置正确的事务管理策略,而不是默认的设置。
在Spring配置文件applicationContext.xml中加入下面代码:
- < bean id = "transactionManager" class = "org.springframework.orm.hibernate3.HibernateTransactionManager" >
- < property name = "sessionFactory" >
- < ref bean = "sessionFactory" />
- </ property >
- </ bean >
- <!-- 配置事务通知 -->
- < tx:advice id = "txAdvice" transaction-manager = "transactionManager" >
- < tx:attributes >
- < tx:method name = "save*" propagation = "REQUIRED" read-only = "false" />
- < tx:method name = "create*" propagation = "REQUIRED" read-only = "false" />
- < tx:method name = "delete" propagation = "REQUIRED" read-only = "false" />
- < tx:method name = "find*" propagation = "REQUIRED" read-only = "true" />
- < tx:method name = "list*" propagation = "REQUIRED" read-only = "true" />
- < tx:method name = "get*" propagation = "REQUIRED" read-only = "true" />
- < tx:method name = "*" read-only = "true" />
- </ tx:attributes >
- </ tx:advice >
- <!--添加事务-->
- < aop:config >
- <!--切入点-->
- < aop:pointcut id = "txPointCut" expression = "execution(* cn.gov.ggj.service.impl.*.*(..))" />
- <!--通知器-->
- < aop:advisor advice-ref = "txAdvice" pointcut-ref = "txPointCut" />
- </ aop:config >
Eclipse不能识别<tx:advice/>标签
在开发Spring的过程中,有时会出现Eclipse不能识别<tx:advice/>标签。
提示出现以下错误:
The prefix "tx" for element "tx:advice" is not bound
原因是<beans>中要加入“xmlns:aop”的命名申明,并在“xsi:schemaLocation”中指定aop配置的schema的地址
配置文件如下:
- <? xml version = "1.0" encoding = "UTF-8" ?>
- < beans xmlns = "http://www.springframework.org/schema/beans"
- xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
- xmlns:aop = "http://www.springframework.org/schema/aop"
- xmlns:tx = "http://www.springframework.org/schema/tx"
- xsi:schemaLocation ="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
至此不会再报错了,下面解释一下aop中的设置
Spring使用 <tx:advice>和 <aop:config> 用来配置事务,具体如何配置你可以参考Spring文档。
我解释一下(* cn.gov.ggj.service.impl.*.*(..))中几个通配符的含义:
第一个 * —— 通配 任意返回值类型
第二个 * —— 通配 包cn.gov.ggj.service.impl下的任意class
第三个 * —— 通配 包cn.gov.ggj.service.impl下的任意class的任意方法
第四个 .. —— 通配 方法可以有0个或多个参数
综上:包cn.gov.ggj.service.impl下的任意class的具有任意返回值类型、任意数目参数和任意名称的方法
之所以用一个Filter来解决Hibernate懒加载的问题,见下面文章的解释:
Hibernate的强大之处之一是懒加载功能,可以有效的降低数据库访问次数和内存使用量。但用的不好就会出现org.hibernate.LazyInitializationException。
这个异常出现的原因很简单,主要时在加载懒数据时Session已经关闭造成的,如下图:
那么OK,我们来考虑怎么解决吧。
我们只要在渲染JSP之前不要关闭Session,而在JSP渲染之后再关闭就OK啊。我们知道,在JSP/Servlet中,可以配置过滤器来实现这种功能。
发表评论
-
采用SSL/HTTPS协议来传输webservice 数据
2016-03-03 15:41 0在webservice传输数据中,为了数据的安全性,可采用S ... -
MyEclipse 快捷键大全
2013-01-23 09:38 0MyEclipse 快捷键1(CTRL)---- ... -
struts2配置文件中struts.xml的一些配置
2012-10-30 14:21 1004struts2配置文件中struts.xml的一些配置 ... -
一套很经典的Java视频
2012-07-25 17:27 711<!--StartFragment --> 一套 ... -
母亲节日期计算
2012-05-03 23:10 1051随便玩玩的,祝天下母亲节日快乐! -
处理懒加载问题后出现的问题:Write operations are not allowed in read-only mode (FlushMode.NEVE
2012-03-06 21:50 1242进行懒加载处理后增加数据出现的问题:Write operati ... -
java 实现图片上传并且更加需求缩小显示
2012-01-05 04:08 3用word文档总结出来了,看附件。过程参考了书和网上的一些方法 ... -
int与String 类型之间转换
2011-08-06 13:56 757●字符串类型String转换成整数int 1). int i ... -
二进制,八进制,十六进制,十进制间进行相互转换
2011-08-06 13:53 981[JAVA]二进制,八进制,十六进制,十进制间进行相互转换 ... -
Java中的线程(转)
2011-08-05 12:02 648Java语法总结 - 线程 来自:http://hi.bai ... -
冒泡排序法
2011-08-05 11:13 613public class TestSort { pu ... -
UML中各种关系说明以及举例
2011-08-04 10:24 862来自于:http://blog.csdn. ... -
Java 基本数据类型取值范围讲解
2011-08-03 23:27 1130java中的类型概念名的说 ... -
struts2标签之<s:checkboxlist>用法简单总结
2011-07-12 01:46 8521做一个项目,要用到<s:checkboxlist> ...
相关推荐
2.Action里通过struts2-spring-plugin.jar插件自动根据名字注入。 3.Ajax无刷新异步调用Struts2,返回Json数据,以用户注册为例。 4.在服务端分页查询功能,优点:实时性:跳页才查询。数据量小:只加载当前页的记录...
用户注册和登录是每个系统的必须存在的一部分,基于Dwr+Struts2+Spring+Hibernate写了一个用户登录注册系统。 其中用Dwr去进行用户注册的用户是否存在的验证。 全部业务控制交由Spring去进行处理。事务处理也...
环境:jdk5.0 eclipse3.2 struts1.1 spring1.2 hibernate3.1 mysql5.0 1. 新建一个starssh的web工程 2. 添加struts框架包。 3. 添加spring框架包。注意spring的配置文件要放到WEB-INF下。 4. 添加hibernate框架...
采用在web.xml中加载spring配置文件的方法降低struts和spring的耦合度,使用自定义的MyDelegatingRequestProcessor类来代替spring的DelegatingRequestProcessor类来解决spring中action的bean的重复配置问题。...
主要目的自己动手搭建一个ssh框架。 可以分为3步: 1.加载struts-2.3.16.3,把画面跑出来,...3.删除Hibernate的配置文件Hibernate.cfg.xml,工厂类HibernateSesseionFactory类,交由spring去做。 注意: 数据库:mysql
个人博客系统【Spring3+Hibernate3+Struts2】【SSH】 SSH个人博客系统 学习SSH时,做的一个个人博客系统。 需求分析: 对于本博客系统,是面向个人使用,主要用于记录日常学习知识与文章分享。 网站博主可以发表文章...
用于struts2+hibernate+spring的最简开发包,用eclipse配置就可以使用,不用担心Myeclipse自动加载可能出现的包错误!
1.<<Struts中文手册>> 2.<<Spring 2.0 中文用户指南 >> 3.<<hibernate中文参考文档>>
本博客源码采用hibernate4.3.6+spring4.0.6+struts2.3.16整合开发,集成memcached。加入本地缓存。html5前端页面,清一色ajax加载,后端采用easyUi。后台功能有待完善。By:WebSos
Myeclipse开发struts+hibernate+spring新手入门---环境配置----项目开发示例 Myeclipse开发struts+hibernate+spring小记 开发前准备工作: 1、下载eclipse3.1版本 下载地址: 2、下载Myeclipse插件 下载地址: 3...
一个Struts1.2+Spring2.5+Hibernate3.2+Jmesa2.4.3+JmesaTag实现的强大分页控件例子 里 面有action实现分页和标签实现分页2个例子 action实现的分页 包括了表头排序,导出为PDF,TXT, excel等格式 jar包和数据库...
1、SHH整合 详细清晰的标准配置,主流的应用配置,struts2.2+spring2.5+hibernate3.0 2、结合MYSQL轻量级数据库,有写好的库表sql 3、整合日志管理配置,及Spring代理日志管理的配置及应用 4、应用WEB前段主流技术,...
SSH2 annotation 实现struts2.1.6 spring2.5.6 hibernate3.3 全注解开发 hibernate延迟加载_懒加载 具体应用
applicationContext-hibernate.xml进行配置 proxool_cofig.xml为连接池配置 此项目可做基础项目开发原型方便,启动此项目在weblogic10中会有antlr-2.7.6rc1.jar此包的异常请配置其先加载并将次包考入 bea\wlserver_...
spring3.2+strut2+hibernate4 注解方式。<struts> spring.xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...
项目框架是借鉴了使用Maven搭建Struts2+Spring3+Hibernate4的整合开发环境 这篇博文中的项目结构; 然后根据工作情况自己测试的一些代码内容如下: ①Struts2+Spring3+Hibernate4的整合开发环境 ②jetcd源码的本地...
此资源中包涵了spring整合struts和hibernate的所有资源,在做项目时只要在工程中引入该jar包就行,不用在eclipse或Myeclipse中加载strut与hibernate的资源了,挺有用的!
为了练手培训,给大家准备的 Open...3.通过 open session in view filter 支持 延迟加载 4.在页面上通过 jstl 很优雅的获取数据 5.通过 spring aop(aspectJ) 声明事务 6.通过formular 映射参数表,指定两个死的变量
在进行Spring4.1+hibernate4+struts2搭建web环境时,经常出现session数据为空,需要在web.xml添加配置,完成SSH环境搭建,使请求未完全加载之前,一直保持session会话开起。