看到好多项目中用到了openSessionInView,这种做法无非是开发方便,能够在JSP页面中操作数据库层方面的业务。

下边说下openSessionInView的使用方法及性能问题。

使用:

1、添加一个Filter,该Filter用来控制事务及数据库的连接管理。代码例如以下:

  1. SessionFactory sessionFactory = lookupSessionFactory(request);
  2. Session session = null;
  3. boolean participate = false;
  4.  
  5. if (isSingleSession()) {
  6. // single session mode
  7. if (TransactionSynchronizationManager.hasResource(sessionFactory)) {
  8. // Do not modify the Session: just set the participate flag.
  9. participate = true;
  10. } else {
  11. logger.debug("Opening single Hibernate Session in OpenSessionInViewFilter");
  12. session = getSession(sessionFactory);
  13. TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(session));
  14. }
  15. } else {
  16. // deferred close mode
  17. if (SessionFactoryUtils.isDeferredCloseActive(sessionFactory)) {
  18. // Do not modify deferred close: just set the participate flag.
  19. participate = true;
  20. } else {
  21. SessionFactoryUtils.initDeferredClose(sessionFactory);
  22. }
  23. }
  24.  
  25. try {
  26. filterChain.doFilter(request, response);
  27. } finally {
  28. if (!participate) {
  29. if (isSingleSession()) {
  30. // single session mode
  31. TransactionSynchronizationManager.unbindResource(sessionFactory);
  32. logger.debug("Closing single Hibernate Session in OpenSessionInViewFilter");
  33. closeSession(session, sessionFactory);
  34. }else {
  35. // deferred close mode
  36. SessionFactoryUtils.processDeferredClose(sessionFactory);
  37. }
  38. }
  39. }

当前代码中仅仅是个样例,详细须要參考自己项目中的实际情况(spring配置,hibernate配置等)

2、在web.xml中添加该Filter的配置信息

  1. <filter>
  2. <filter-name>OpenSessionInView</filter-name>
  3. <filter-class>com....OpenSessionInView</filter-class>
  4. </filter>
  5. <filter-mapping>
  6. <filter-name>OpenSessionInView</filter-name>
  7. <url-pattern>/*</url-pattern>
  8. </filter-mapping>

3、在详细的Jsp页面中取SESSION操作数据

使用方法到这里就结束了,下边我们来简单讨论下性能方面的问题

事实上大家依据上边的配置就能够想到:对于配置了Filter的处理。每次都会拦截到一个请求,在后台处理之前就会开启一个事物并打开一个数据库连接(线程安全的),后台处理完毕后会关闭当前的连接。

拦截到全部的请求都这么做。大家认为opensessioninview的方式性能会好到哪去呢?(假设是匹配某些请求,效果会好那么一点)

画了张opensessioninview的简单原理图,有点简陋,不喜勿喷:

openSessionInView的使用原理及性能分析的更多相关文章

  1. MYSQL索引结构原理、性能分析与优化

    [转]MYSQL索引结构原理.性能分析与优化 第一部分:基础知识 索引 官方介绍索引是帮助MySQL高效获取数据的数据结构.笔者理解索引相当于一本书的目录,通过目录就知道要的资料在哪里, 不用一页一页 ...

  2. 【转】由浅入深探究mysql索引结构原理、性能分析与优化

    摘要: 第一部分:基础知识 第二部分:MYISAM和INNODB索引结构 1.简单介绍B-tree B+ tree树 2.MyisAM索引结构 3.Annode索引结构 4.MyisAM索引与Inno ...

  3. DDS工作原理及其性能分析

    DDS工作原理及其性能分析 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 系列博客说明:此系列博客属于作者在大三大四阶段所储备的关于电子电路设计等硬件方面的 ...

  4. PHP函数的实现原理及性能分析

    前言 在任何语言中,函数都是最基本的组成单元.对于php的函数,它具有哪些特点?函数调用是怎么实现的?php函数的性能如何,有什么使用建议?本文将从原理出发进行分析结合实际的性能测试尝试对这些问题进行 ...

  5. PHP 基础系列(三) 【转】PHP 函数实现原理及性能分析

    作者:HDK (百度) 前言 在任何语言中,函数都是最基本的组成单元.对于PHP的函数,它具有哪些特点?函数调用是怎么实现的?php函数的性能如何,有什么使用建议?本文将从原理出发进行分析结合实际的性 ...

  6. (转)PHP 函数的实现原理及性能分析

    前言 任何语言中,函数都是最基本的组成单元.对于php的函数,它具有哪些特点?函数调用是怎么实现的?php函数的性能如何,有什么使用建议?本文 将从原理出发进行分析结合实际的性能测试尝试对这些问题进行 ...

  7. DevTools 实现原理与性能分析实战

    一.引言 从 2008 年 Google 释放出第一版的 Chrome 后,整个 Web 开发领域仿佛被注入了一股新鲜血液,渐渐打破了 IE 一家独大的时代.Chrome 和 Firefox 是 W3 ...

  8. 由浅入深探究mysql索引结构原理、性能分析与优化 转

    第一部分:基础知识 第二部分:MYISAM和INNODB索引结构 1. 简单介绍B-tree B+ tree树 2. MyisAM索引结构 3. Annode索引结构 4. MyisAM索引与Inno ...

  9. 由浅入深探究mysql索引结构原理、性能分析与优化

    摘要: 第一部分:基础知识 第二部分:MYISAM和INNODB索引结构 1.简单介绍B-tree B+ tree树 2.MyisAM索引结构 3.Annode索引结构 4.MyisAM索引与Inno ...

随机推荐

  1. pytorch 3 activation 激活函数

    2.3 Activation Function import torch import torch.nn.functional as F from torch.autograd import Vari ...

  2. [terry笔记]GoldenGate_迁移同步_主库零停机

    ogg根据scn同步数据,源库零停机时间 本次实验与上次的区别:更加注重细节,几乎包含所有步骤,把我越到的坑都作出了说明.并且同步是由10g向11g进行同步,更加符合升级迁移需求. 如下是主要步骤: ...

  3. ZJU 2671 Cryptography

    Cryptography Time Limit: 5000ms Memory Limit: 32768KB This problem will be judged on ZJU. Original I ...

  4. Run Nutch In Eclipse on Linux and Windows nutch version 0.9

    Running Nutch in Eclipse Here are instructions for setting up a development environment for Nutch un ...

  5. spring boot pom

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  6. Chrome的JSON View插件

    Chrome的JSON View插件 学习了:http://www.cnplugins.com/zhuanti/five-chrome-json-plugins.html 下载了:http://www ...

  7. 16、sockect

    一.局域网因特网 服务器是指提供信息的计算机或程序,客户机是指请求信息的计算机或程序,而网络用于连接服务器与客户机,实现两者之间的通信.但有时在某个网络中很难将服务器和客户机区分开.我们通常说的“局域 ...

  8. 深刻理解Docker镜像大小

    都说容器大法好,可是假设没有Docker镜像,Docker该是多无趣啊. 是否还记得第一个接触Docker的时候,你从Docker Hub下拉的那个镜像呢?在那个处女镜像的基础上.你执行了容器生涯的处 ...

  9. Linux文件系统(七)---系统调用之open操作(一)

    (内核2.4.37) 一. 当我们打开一个文件的时候.须要获得文件的文件描写叙述符(前面已经说过事实上就是文件数组下标).通常是通过函数open来完毕.这个系统调用在<unistd.h>头 ...

  10. 解读HDFS(转载)

    是蛮久木有写过关于hadoop的博客了额,虽然最近也看了一些关于linux的基础知识,但似乎把这个东西忘记了,其实时不时回顾一下以前的知识还是蛮有意思的,且行且忆! 我们Hadoop 主要由HDFS和 ...