当前位置:  技术问答>java相关

有关JavaBean中的资源释放问题,(熟悉jsp+JavaBean原理的高手请进)

    来源: 互联网  发布时间:2015-03-14

    本文导语:  请先看看下面源代码(很简单的,摘自小龙亭)。 那位大虾对Jsp+JavaBean的原理很清楚的,最好解析一下它们的工作原理,是如何创建实例的,各实例之间的关系,JavaBean在这里是以线程还是进程运行的? (谁很好解...

请先看看下面源代码(很简单的,摘自小龙亭)。
那位大虾对Jsp+JavaBean的原理很清楚的,最好解析一下它们的工作原理,是如何创建实例的,各实例之间的关系,JavaBean在这里是以线程还是进程运行的?
(谁很好解决这个问题,我一定送分,分几次给都可以,反正我的分留着也没用,呵呵)

使用mydb.java制成的javabean
以下是mydb.java的源程序。
--mydb.java----------------------------

package mydb;
import java.sql.*;
public class mydb {
String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
String sConnStr = "jdbc:odbc:sunshine";
Connection conn = null;
ResultSet rs = null;
public mydb() {
try {
Class.forName(sDBDriver); 
}
catch(java.lang.ClassNotFoundException e) {
System.err.println("mydb(): " + e.getMessage());
}
}

public ResultSet executeQuery(String sql) {
rs = null;    //
try {
conn = DriverManager.getConnection(sConnStr); 
Statement stmt = conn.createStatement();
rs = stmt.executeQuery(sql);

catch(SQLException ex) { 
System.err.println("aq.executeQuery: " + ex.getMessage());
}
return rs;
}
}
//-------------------------------------------------------


然后在Jsp页面中调用该JavaBean,源码如下





jsp页面中的rs已被关闭,但JavaBean中的rs并没有被显式关闭

我现在的问题就是,到底JavaBean中的rs是怎么处理的,从源代码看当JavaBean被调用后,并没有被关闭释放(只是关闭里jsp页面中的rs),这样长时间运转系统会不会出现问题,JavaBean中rs会不会不断积累而造成系统资源不足等。

注:我以前做个一个系统,用的数据库是Oracle,但不是用这种JavaBean方法实现的,曾遇到过这样的一个错误信息,系统运行一段时间后,说“....超出游标最大数!..”,当时为了赶进度,并没有很好解决这个问题,没有研究是什么原因造成的。

我想知道有没有必要在JavaBean中加一个释放rs的方法freeRS(),如:
  public void freeRS() {
    try {
      if (rs != null) {
rs.close();
      }
      else {
return;
      }
    }
    catch(SQLException e) { 
return;
    }
  }

然后在jsp页面中显式调用该方法freeRS()释放javaBean中的rs呢?

|
关闭结果集与关闭连接不同。关闭结果集事释放在数据库申请的游标等资源。

|
所以加菲猫说的对,两个rs其实是一样的,再者根据javadoc的介绍,rs可以在
stmt关闭的时候自动关闭,所以除了发生异常要显式关闭外,不用考虑那么详细

|
Java提供了一个名为finalize()的方法,可为我们的类定义它。在理想情况下,它的工作原理应该是这样的:一旦垃圾收集器准备好释放对象占用的存储空间,它首先调用finalize(),而且只有在下一次垃圾收集过程中,才会真正回收对象的内存。所以如果使用finalize(),就可以在垃圾收集期间进行一些重要的清除或清扫工作。
根据我的观察,在javabean的生命周期结束后,finalize是一定会被自动调用的,那么我们可以将一些系统不能自动释放的资源放在finalize()方法中调用例如数据库连接、socket连接等
如:
public void finalize() throws Throwable{
    rs.close();
    conn.close();
    super.finalize();

}


|
在JAVABEAN中就应该将数据封装进业务对象中。
你写的这个BEAN可以作为底层的通用数据库访问对象。
举个例子吧。
mydbuser(entity)jsp(display user info)
    vector userlist(users)jsp(display user list)
不是严谨的,但是思路基本上是这样的。
因此CONNECTION和RECORDSET的资源问题就在底层就得到控制了。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 有关sscanf问题 熟悉的请进
  • 紧急!一个有关CVS的非常重要的问题!所有人熟悉CVS的都进来看看吧!
  • ​有关Docker的八个令人难以置信的事实
  • 有关内码转换(跟HttpServletRequest有关)
  • 求有关png图像处理的libpng库的有关中文资料
  • 大家推荐一下有关LINUX7有关的网络编程的书。最好是比较全面的!比较经典的。
  • 求教有关smartupload的问题,有关就给分!!
  • 有关KDevelop-3.0.4-0.1.i386.rpm的有关软件包
  • 有关在sco unix5.0.4下有关网卡设置的问题(非常急,高分相送)
  • 有关snmp的一个很菜,但是困扰了我很久的问题,有关工作原理的,望大家赐教
  • 有关KDevelop编程的资料
  • 有关集群与数据同步
  • 请教有关英文简历方面的词句!
  • 有关报表打印(在JAVA,WEB下应用)急用!
  • 请各位大哥告知JAVA中消息机制的有关资料,拜托!
  • 有关cocoon的问题??
  • 有关jbuilder
  • 我想看看有关Linux和Unix的源码,有什么好的建议
  • 有关J2ME的帮助文档!
  • 100分求助 能不能提供一些有关图像分割的算法和实现代码!谢谢
  • 在哪里可以弄到有关tomcat配置方面的资料?
  • Helper! 有关Jbuilder使用问题???
  • 有关swing的问题,请高手回答


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3