分享

Tomcat中数据连接池的配置和相应的javabean

 昵称10987 2006-09-08
Tomcat中数据连接池的配置和相应的javabean

数据源Data Source)为了减少数据库的连接信息和一些逻辑名称写在JSP的源代码中,JDBC2.0提供的一个接口叫做DataSource

       连接池Connection Pool)对于应用程序来说为了防止应用程序多次连接和断开数据库所耗费的时间和资源,可采用数据连接池的方式减少资源的消耗。即一次向数据库请求很多的connection。存储在一个Pool中,让需要的人从吃重取得Connection,等到用完了后在放回到数据池中。这样提供了一个缓冲区,让JSP和数据库之间得到最大的执行效率。

       JNDIJava Naming and Directory Interface)提供一个接口是用户可在不知道资源所在位置的情形之下获得服务。

5.2.3 Tomcat5.X数据连接池配置:

     Tomcat 5.Xconf目录下面找一个server.xml文件在里面配置数据连接池。在文件里面加入如下编码:

<Host name="localhost" appBase="webapps"

unpackWARs="true" autoDeploy="true"

xmlValidation="false" xmlNamespaceAware="false">

<Context path="/TollSystemModel" docBase="TollSystemModel" debug="0"

reloadable="true" crossContext="true">

               <Resource name="jdbc/TollSystemModel" auth="Container"

type="javax.sql.DataSource"

   driverClassName="org.gjt.mm.mysql.Driver"    

maxIdle="30"

       maxWait="1000"

       username="root"

          password="hacker"

                        url="jdbc:mysql://localhost:3306/toll_system"

maxActive="4"

autoReconnect="true"/>

        </Context>

</Host>

说明:TollSystemModel是你的war包名称或者是你在webapps/创建的目录名称
jdbc/TollSystemModel中的TollSystemModel是连接数据源名称
toll_system是数据库名称

5.2.4 开发数据源的JavaBean。

下面是用来开发数据源的JavaBean。即ConnectionBean.java。利用JNDI获取数据源,等待用户使用。

package ConnectDatabaseBean;

import java.sql.Connection;

import java.sql.SQLException;

import javax.naming.InitialContext;

import javax.naming.NamingException;

import javax.sql.DataSource;

public class ConnectionBean {

       private DataSource ds=null;

       public ConnectionBean()

       {

//通过JNDI获得数据源

              

              try {

                     InitialContext ctx=null;

                     ctx = new InitialContext();

                     ds=(DataSource)ctx.lookup("java:comp/env/jdbc/TollSystemModel");

              } catch (NamingException e) {

                     e.printStackTrace();

              }

              

              

       }

      

       public Connection getConnection()

       {

              //获取连接

              try{

                     return ds.getConnection();

              }

              catch(SQLException sqle)

              {

                     System.err.println("cant‘t get Connection from data source");

                     sqle.printStackTrace();

                     return null;

              }

       }

}

5.2.4 封装的SQL方法的JavaBean

下面是封装的数据库操作的一些方法。即ConnectionHold.java,自行定义了一些transaction和执行的SQL程序代码,便于管理。

package ConnectDatabaseBean;

import java.sql.*;

import javax.servlet.http.HttpSessionBindingEvent;

import javax.servlet.http.HttpSessionBindingListener;

public class ConnectionHolder implements HttpSessionBindingListener{

       private Connection connection=null;

       private Statement stmt=null;

              public ConnectionHolder(){

                     }

              public void commit() throws SQLException{

              connection.commit();

       }

              public ResultSet executeQuery(String sql) throws ClassNotFoundException, SQLException, Exception

       {

              return stmt.executeQuery(sql);

       }

              public int executeUpdate(String sql) throws ClassNotFoundException, SQLException, Exception

       {

              return stmt.executeUpdate(sql);

       }

              public void rollBack() throws ClassNotFoundException, SQLException, Exception

       {

              connection.rollback();

       }

              public void setAutoCommit(boolean ifAuto) throws SQLException

       {

              //可以设置是否自动提交

              connection.setAutoCommit(ifAuto);

       }

       public void setConnection(Connection holdone)

       {

              connection=holdone;

              try

              {

                     stmt=connection.createStatement();

              }

              catch(SQLException sqle)

              {

                     stmt=null;

              }

       }

       public void valueBound(HttpSessionBindingEvent arg0) {

              if(connection==null)

                     System.err.println("Didn‘t get Connection from Data Source!");

              // 加入session的时候自动产生

              

       }

       public void valueUnbound(HttpSessionBindingEvent arg0) {

              // TODO Auto-generated method stub

              try {

                     connection.close();

              } catch (SQLException e) {

                     // session注销时候调用,把连接放入池中

                     e.printStackTrace();

              }

              finally{

                     connection=null;

              }

       }

}

5.2.5 Jsp中如何运用数据源

       由于数据连接池的生命周期是整个应用程序,所以他们的范围(scope)应该是application

下面是Jsp中如何引入连接池。

<jsp:useBean id="connectPool" class="ConnectDatabaseBean.ConnectionBean"  scope="application"/>

<jsp:useBean id="connection" class="ConnectDatabaseBean.ConnectionHolder" scope="session">

<jsp:setProperty name="connection" property="connection" value=‘<%=connectPool.getConnection() %>‘/>

</jsp:useBean>

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多