首页 > 开发 > Tomcat > 正文

用JNDI绑定tomcat数据源

2020-02-05 13:37:43
字体:
来源:转载
供稿:网友


收集最实用的网页特效代码!

     jsp开发中调用tomcat数据库连接池,可能很多朋友都会,下面这段代码相信用过的人都很熟悉:

list1:testpool.jsp

<%
 initialcontext ctx=new initialcontext();
 datasource ds = (datasource)ctx.lookup("java:comp/env/jdbc/mysql");
 connection conn = ds.getconnection();
 statement stmt = conn.createstatement();
 
 string strsql = " select * from t_user";
 resultset rs = stmt.executequery(strsql);
 ......
 stmt.close();
 rs.close();
 conn.close();
%>

但是许多人不知tomcat启动时,用jndi对数据源做了绑定,所以就不知道如何在j2se中用main函数调用这个数据源,其实,只要把testpool.jsp做一点改动:

 initialcontext ctx=new initialcontext();
 object o = ctx.lookup("java:comp/env/hibernate");
 out.print("class="+o.getclass().getname());
 datasource ds=(datasource)o;
 .......

即利用反射api打印出这个已注册到jndi中数据源对象的class全名,就会知道原来数据源是一个“org.apache.commons.dbcp.basicdatasource”对象,这个class就在%tomcat%/common/lib下commons-dbcp-1.2.1.jar包里,与其关联的还有commons-collections-3.1.jar、commons-pool-1.2.jar。

把以上三个包加入当前的工作环境,用下面这段代码就可调用连接池了。我用的是mysql数据库,请在调试时加入mysql的jdbc驱动和%tomcat%/common/lib下的naming-java.jar

   public static void main(string[] args) throws hibernateexception {
     try{
      basicdatasource bdds = new basicdatasource();
      //设置数据库驱动
      bdds.setdriverclassname("org.gjt.mm.mysql.driver");
      //设置jdbc的url
      bdds.seturl("jdbc:mysql://localhost/sample");
      bdds.setusername("root");
      bdds.setpassword("1234");
      //设置连接池初始大小
      bdds.setinitialsize(2);
      
      //jndi配置
      hashtable env = new hashtable();
      env.put("java.naming.factory.initial","org.apache.naming.java.javaurlcontextfactory");
      initialcontext ctx=new initialcontext(env);
      
      //数据源绑定到jndi
      ctx.bind("tomcatds",bdds);
      //在jndi查找数据源
      datasource ds = (datasource)ctx.lookup("tomcatds");
      
      connection con = ds.getconnection();
      statement stmt = con.createstatement();
      string strsql = "select * from user";
      resultset rs = stmt.executequery(strsql);
      while(rs.next()){
       system.out.println("id="+rs.getstring(1));
      }
      rs.close();
      stmt.close();
      con.close();
     }catch(exception ex){
      system.out.print(ex.tostring());
     }
  }

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表