我们在做项目的时候,总是会考虑对每一个操作打开一个新的session,然后对session进行单独的操作,然后关闭session。
如果,我在整个项目运行的时候,都是通过一个session来进行,也就是说,所有的操作都是在一个session中进行,而这个session是不关闭的,只有等到tomcat
关闭的时候session才关闭,这样会出问题吗?
用一个session来管理缓存,这样效率高吗?
如果,我在整个项目运行的时候,都是通过一个session来进行,也就是说,所有的操作都是在一个session中进行,而这个session是不关闭的,只有等到tomcat
关闭的时候session才关闭,这样会出问题吗?
用一个session来管理缓存,这样效率高吗?
解决方案 »
- * cannot be resolved to a type
- 为什么我修改后还是会报错的呢??懂eclipseJ2EE的赐教!!
- 进入不了所有action 《Struts2》
- 大家帮忙看看哪个名字好,散分了
- 有webservice的例子吗?demo源代码,或者是xfire也行哦...
- JAVA中,怎么根据XML元素的属性值得到XML元素?
- 关于hibernate的数据库连接pool size的问题
- 平衡负载下,tomcat的session问题如何解决?
- 为何用 Eclipse 不能创建 Tomcat 项目.
- 我的记录ID号是自增的,但是如何得到我刚刚insert的一条记录的ID号?
- 要想工作,只会用SSH编写登录,注册,发贴,回贴等业务逻辑,行不?
- Struts2文件下载异常
这样会使系统不安全.而且效率非常的低.
如果你闲麻烦就用spring的事务管理.
几行配置就搞定..
现在的问题是,由于整个项目都是在同一个session中运行,怎么才可以让项目在tomcat关闭之前把session关闭。
简单的说,web程序是运行在一个多线程环境中,session是线程安全的,session不应跨线程访问。
至于说tomcat关闭的事后做些什么是没问题的,javax.servlet.ServletContextListener就可以干
如果所有的请求在访问数据库时,都用一个session,会产生非常严重的资源争用问题。sessionFactory是线程安全的,相应的它的成本也比较高,在每一个线程中,从线程安全的sessionFactory得到session,才是正确的做法。
session作为jdbcConnection的一个高级封装,应该在事务边界范围外,尽晚得到尽早释放。一般的项目,如果用支持声明式事务的javaEE容器,事务边界都在biz层。容器会帮助你保证session的范围。
楼主你现在是在异想天开,你还不知道正常的应用是什么样子。再多看看书吧。
对于缓存问题,SessionFactory,也就是Hibernate的第一级缓存,它的创建是一个很耗时的过程,在系统启动或第一次访问时创建,具体的创建过程我们不用关心,对于Session,Hibernate的第二级缓存,当提交事务时会自动清理缓存,或手动clear。
如果用一个线程共享数据的时候.用session.flush(强制缓存与数据库同步更新时候会出现混乱的,容易出错;可以把想共享的数据放在二级缓存中,能够一次运行的就用session处理;
优化还可以设置清理缓存的级别:
session.setFlushMode(FlushMode.COMMIT):
FlushMode.COMMIT只在递交的时候,清理缓存,在只是查询无修改的状况下用此模式,会节省资源;
FlushMode.AUTO,默认,保持数据的顺序;
我说的嘛,看了上面的回答说session是线程安全的,我还在怀疑呢。。session不是线程安全的,而且是轻量级的对象,放心的new吧。
现在我就是不知道在多线程的环境下会不会出问题,但是,共用一个session也是有好处的啊,例如,我们就没有脱管对象了,这样,我们的每次对对象的操作就可以直接从session缓存里面拿,而且拿到的对象都是持久化的,而每次修改都会直接存入数据库,我们只需要控制session.flush()跟事务就可以很好地实现数据的存储。
我知道session是一个轻量级的资源,但是是不是线程安全的我就不知道了。不知道我这么想对不对?
现在我就是不知道在多线程的环境下会不会出问题,但是,共用一个session也是有好处的啊,例如,我们就没有脱管对象了,这样,我们的每次对对象的操作就可以直接从session缓存里面拿,而且拿到的对象都是持久化的,而每次修改都会直接存入数据库,我们只需要控制session.flush()跟事务就可以很好地实现数据的存储。
我知道session是一个轻量级的资源,但是是不是线程安全的我就不知道了。不知道我这么想对不对?
SessionFactory级的缓存才是二级缓存!!!
要是业务请求不多倒是不会出现什么问题
你要是做的系统稍微大一些,请求多而复杂
你到运行测试时就会出现意想不到的错误所以建议你对session进行控制和管理
我的习惯是在业务层专门建立一个session的管理类,里面负责对session进行管理
其他的业务请求处理类直接调用就可以了