`
weiqingfei
  • 浏览: 315509 次
  • 性别: Icon_minigender_1
  • 来自: 黑洞
社区版块
存档分类
最新评论

由OpenSessionInView想到了。

    博客分类:
  • Java
阅读更多
无意间翻到一个N年前的老帖子(http://www.iteye.com/topic/17501),讨论的是OpenSessionInView的效率问题。
我本人对Spring和Hibernate都没有什么经验,只是对于引起OpenSessionInView效率低的原因感兴趣。

首先OpenSessionInViewFilter就是一个过滤器,那么它的执行时间也就是其后的过滤器以及servlet的执行时间,这中间比较耗时的,就是业务操作,以及大页面的渲染。

对于业务操作,这是无法避免的,和是否使用OpenSessionView无关。
至于大页面的渲染,如果仅仅是渲染本身,那么也是和是否使用OpenSessionView无关的。

最大的问题是渲染生成的页面大小是否超过了Response的页面缓冲区,如果超过了,那么即使页面没有渲染完成也会向客户端传送页面内容,如果再加上客户端和服务器间的传送速度比较慢的话,这个过程需要很长时间,也就最终导致,数据库链接长时间无法释放。

Response的页面缓冲默认打小为8K,
可以通过一下方法,对其进行操作。
//设置缓冲大小
public void ServletResponse.setBufferSize(int size)
  throws IllegalStateException
//取得缓冲大小
public int ServletResponse.getBufferSize()
//检查是否已经开始发送到客户端
public boolean ServletResponse.isCommitted()
//清空缓冲区
public void ServletResponse.reset() throws IllegalStateException
//立刻把数据发送到客户端
public void ServletResponse.flushBuffer() throws IOException


结论就是,在链入速度比较低的用户比较多的系统上尽量少用OpenSessionInViewFilter,如果实在无法避免的话,那么在渲染的页面比较大的servlet里面加大页面缓冲区,使其能够在渲染晚页面后统一发送到客户端。
分享到:
评论
1 楼 imcaptor 2009-09-18  
页面大,链路无保障,OpenSessionView还是别用了,
需要什么数据,取什么数据最好,虽然麻烦些,但是不会引起效率问题。

有些事情不能两全的。

相关推荐

    Spring hibernate opensessioninview

    ### Spring + Hibernate OpenSessionInView 模式的理解和应用 在Java Web开发中,Spring与Hibernate作为两个重要的框架,经常被一起使用来实现业务逻辑与数据持久化的处理。而在使用这两个框架时,为了更好地管理...

    Struts Spring Hibernate 整合 OpenSessionInView 例子

    为了练手培训,给大家准备的 Open Session In View 的简单例子,纯代码,大家可以参考,其中主要说了六部分内容: 1.通过接口编程 2.通过spring注入dao到 action 3.通过 open session in view filter 支持 延迟加载...

    OpenSessionInView项目整合jar包

    在Java Web开发中,OpenSessionInView(OSIV)模式是一种常见的解决数据持久化问题的设计模式,主要用于Spring框架与Hibernate等ORM工具的集成。这个模式的主要目的是解决在HTTP请求处理过程中,由于Session范围内的...

    Open_Session_In_View详解.doc

    ### Open_Session_In_View详解 #### 一、背景与概念 在使用Hibernate进行对象持久化时,经常遇到的一个问题是关于懒加载(lazy loading)的处理。懒加载是一种优化技术,允许在真正需要某个关联对象的数据时才加载...

    Spring提供的CharacterEncoding和OpenSessionInView功能

    Spring框架是Java开发中不可或缺的一部分,它为开发者提供了丰富的功能,包括依赖注入、面向切面编程、事务管理等。在处理Web应用时,Spring提供了一些关键特性,如`CharacterEncodingFilter`和`...

    SSH项目整合示例【OpenSessionInView】所用到的jar包

    SSH是Java Web开发中的一个流行框架组合,由Struts、Hibernate和Spring三个组件构成。这个框架集成提供了模型-视图-控制器(MVC)架构,数据持久化,以及依赖注入和事务管理等功能,大大简化了企业级应用的开发工作...

    第30讲--Spring提供的CharacterEncoding和OpenSessionInView功能

    同时,需要注意的是,OpenSessionInView模式虽然方便,但也会带来潜在的问题,如事务边界不清晰和会话泄漏。因此,在实际应用中,应结合具体需求谨慎使用,并考虑使用更现代的解决方案,如Spring Data JPA的...

    spring中lazy=“true”的正常读取关联表(用opensessioninview)

    在Spring框架中,`lazy="true"` 是一个重要的特性,用于延迟加载(Lazy Loading)。它主要应用于数据持久层,如Hibernate等ORM框架中,目的是为了提高应用的性能。当一个对象被标记为懒加载时,只有在真正需要访问该...

    关于OpenSessionInViewFilter的学习

    在Web应用中,由于HTTP请求的无状态性,一次请求通常由多个Servlet过滤器、控制器和服务层方法构成,而数据库操作通常在服务层完成。然而,当我们在服务层关闭了Session后,到视图层进行数据填充时,可能会遇到已...

    MyContextLoaderPlugIn.jar

    和Spring中OpenSessionInView由于org.springframework.web.struts.ContextLoaderPlugIn中保存同一个对象的名不同导致openSessionInView失效 稍微修改后在struts-config.xml中使用MyContextLoaderPlugIn.jar包中...

    SSH整合示例项目 hibernate5.2.3+struts2.5.2+spring4.3.3.zip

    - **二级缓存**:提高数据访问效率,OpenSessionInView模式下配合Spring实现 session级缓存。 **OpenSessionInView模式** OpenSessionInView模式是一种解决数据持久层和Web层之间事务管理的策略。在用户请求到达时...

    HibernateSpring多数据库解决方案.doc

    本方案主要探讨如何在基于Hibernate和Spring框架的环境中实现多数据库的管理,特别是在`OpenSessionInView`模式下的配置。 首先,我们看到在`applicationContext.xml`配置文件中定义了两个数据源,一个用于读操作...

    struts+hibernate,spring面试题

    在Struts框架中,Model由JavaBean或EJB组件或POJO构成,Controller由ActionServlet和Action实现,View是一组JSP文件和自定义标签。 3. **Struts的关键对象**: - `Action`:作为控制器,处理用户请求并转发到相应...

    struts+spring+hibernate面试题

    - Model由JavaBean或EJB组件或POJO构成,负责业务逻辑和数据存储。 - Controller由Action类实现,接收用户请求并决定如何响应。 - View是一组JSP文件及其标签,用于展示数据。 2. Spring框架提供IoC(Inversion ...

    struts2+hirbate+spring面试题

    - **Model**:通常由JavaBean、EJB组件或POJO构成,负责业务逻辑和数据处理。 - **Controller**:由Action类实现,接收请求、处理业务逻辑,并将控制流导向视图。 - **View**:由JSP文件和Struts2的标签库组成,...

    Spring配置总结

    Spring是一个开源的Java平台框架,由Rod Johnson创建并由Pivotal Software维护。它提供了全面的基础设施支持,帮助开发者构建健壮的企业级应用。Spring的核心特性包括依赖注入(Dependency Injection,DI)、面向切...

    Java框架面试题

    IOC(依赖注入)允许对象之间的依赖关系在运行时由容器管理,而不是对象自行创建。Spring通过setter方法或构造函数实现依赖注入。 5. **Hibernate查询**:Hibernate提供三种方式查询数据,包括HQL(Hibernate Query...

    SSH整合 struts+hibernate+spring

    - 使用AOP后,Hibernate的Session对象的创建与销毁都由Spring容器负责。 #### 四、OpenSessionInView模式 **OpenSessionInView模式**是一种常用的Hibernate优化模式,其主要目的是解决Hibernate的一级缓存问题。...

    Spring框架1

    - **IOC(控制反转)**:对象的创建和依赖关系的管理由容器(如Spring)负责,而不是由对象自身负责。Spring通过依赖注入(DI)实现IOC,主要有三种方式: - 接口注入 - Setter注入 - 构造器注入 5. **...

Global site tag (gtag.js) - Google Analytics