`
Baple
  • 浏览: 12190 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
文章分类
社区版块
存档分类
最新评论

Java使用JNDI技术获取DataSource对象

阅读更多
package common;

import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
 
/**
     * 通过JNDI获取数据源
     *
     * @author 周尚武 时间:2008年12月8日22:37:09
     */
public class DBConnection {
     /**
         * 通过JNDI获取数据源在获取连接对象
         *
         * @return Connection con
         */
     public static Connection getCon(){    
         Connection con = null;
         try {
             Context ic = new InitialContext();
             DataSource source = (DataSource)ic.lookup("java:comp/env/jdbc/books");        
            con = source.getConnection();     
        } catch (NamingException e) {
             System.out.println("数据源没找到!");
            e.printStackTrace();
         } catch (SQLException e) {
             System.out.println("获取数连接对象失败!");
             e.printStackTrace();
         }
         return con;
     }
}
 
JNDI的配置:
 
1.context.xml文件的配置:
 
<Resource name="jdbc/books"
        auth="Container" type="javax.sql.DataSource"  maxActive="100"
        maxIdle="30" maxWait="10000"   username="sa"   password="123"
        driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
        url="jdbc:sqlserver://localhost:1433;databasename=books"/>
 
2.web.xml文件的配置:
 
<resource-ref>
     <res-ref-name> jdbc/books </res-ref-name>
    <res-type> javax.sql.DataSource </res-type>
    <res-auth> Container </res-auth>
</resource-ref>
 
3.添加数据库驱动文件:
 
通过数据源访问数据库,由于数据源由Tomcat 维护,所有必须把JDBC驱动程序复制到Tomcat的common/lib目录下。

补充:
jndi(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称

访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。

         tomcat配置jndi有全局配置和局部配置。大致的有以下三种配置方式:



第一种:全局配置。

1)在tomcat的conf文件夹下的context.xml配置文件中加入:

    <Resource name="jndi/mybatis"  
                auth="Container"  
                type="javax.sql.DataSource"  
                driverClassName="com.mysql.jdbc.Driver"  
                url="jdbc:mysql://localhost:3306/appdb"  
                username="root"  
                password="123456"  
                maxActive="20"  
                maxIdle="10"  
                maxWait="10000"/>     


2)在项目的web.xml中加入资源引用:

    <resource-ref> 
      <description>JNDI DataSource</description> 
      <res-ref-name>jndi/mybatis</res-ref-name> 
      <res-ref-type>javax.sql.DataSource</res-ref-type> 
      <res-auth>Container</res-auth> 
    </resource-ref> 

其中res-ref-name值要和context.xml的name值一致。



3)jndi测试方法:

    public void testJNDI() throws NamingException, SQLException{ 
        Context ctx = new InitialContext(); 
        DataSource ds = (DataSource) ctx.lookup("java:comp/env/jndi/mybatis"); 
        Connection conn = ds.getConnection(); 
        System.out.println(conn.isClosed()); 
     
    } 


4)在jsp中调用加载jndi方式,不可以直接用main方法测试,必须通过启动容器从jsp中调用:

    TestPageAccessURL test = new TestPageAccessURL(); 
    test.testJNDI(); 




第二种:局部配置(不推荐)。

1)在tomcat的server.xml的<host>标签内,添加:

    <Context path="/demo_jndi" docBase="/demo_jndi"> 
       <Resource 
         name="jndi/mybatis" 
         type="javax.sql.DataSource" 
         driverClassName="com.mysql.jdbc.Driver" 
         maxIdle="2" 
         maxWait="5000" 
         username="root" 
         password="123456" 
         url="jdbc:mysql://localhost:3306/appdb" 
         maxActive="4"/> 
    </Context> 

其他配置同第一种方式。



第三种:局部配置。

1)在项目的META-INFO下面新建context.xml。加入:

    <?xml version="1.0" encoding="UTF-8"?> 
    <Context> 
        <Resource name="jndi/mybatis"  
                    auth="Container"  
                    type="javax.sql.DataSource"  
                    driverClassName="com.mysql.jdbc.Driver"  
                    url="jdbc:mysql://localhost:3306/appdb"  
                    username="root"  
                    password="123456"  
                    maxActive="20"  
                    maxIdle="10"  
                    maxWait="10000"/>     
    </Context> 

其他配置同第一种方式。

总结:如果要配置局部的话,推荐使用第三种方式,这样不依赖tomcat了。但是还是推荐使用第一种方式好,虽然依赖tomat,但是是全局的,而且可以配置
多个。对于以后切换使用方便。
在项目的web.xml中添加的资源引用可有可无。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics