tomcat5.5 JNDI配置

tomcat5.5的JNDI设置,主要注意的两点:

1) 驱动程序在server中所放的位置。

2) 配置

 

驱动程序应该放在${TOMCAT_HOME}\common\lib里面,我放到过${TOMCAT_HOME}\server\lib及${TOMCAT_HOME}\shared\lib中过,都不能成功运行.

 

配置文件中添加JNDI有好几种方式,不过以下这种方式比较通用一点.

${TOMCAT_HOME}\conf\context.xml中如下设置:

<Context>

    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
	
    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->

<Resource  name="jdbc/test"   
           type="javax.sql.DataSource"   
           password=""   
           driverClassName="com.mysql.jdbc.Driver"   
           maxIdle="2"   
           maxWait="50"   
           username="root"   
           url="jdbc:mysql://localhost:3306/mynews"   
           maxActive="100"/>    
</Context>

 

测试程序调用时如下:

<%@page import="java.util.*,javax.naming.*,java.sql.*,javax.sql.*"%>
<%@page contentType="text/html;charset=utf-8"%>
<%        
     Context ctx = new InitialContext();          
     String jndiLookUp = "java:comp/env/jdbc/test"; 
     DataSource ds =(DataSource) ctx.lookup(jndiLookUp);    
     Connection con = ds.getConnection(); 
     ResultSet rs =null;
     Statement stmt =null;
     try{
                
            stmt =con.createStatement();  
            rs = stmt.executeQuery("select * from XXX");
            while(rs.next())
           {
             System.out.println(rs.getString(1));
            }
         }catch(Exception e)
     {
        e.printStackTrace();
        
     }finally{
       if(rs!=null)
       rs.close();
       if(stmt!=null)
       stmt.close();
       if(con!=null)
       con.close();
     
     }    
              
%>

 

注意jndi的调用中用的是"java:comp/env/jdbc/test".

在程序的web.xml中有这样的定义:

<resource-ref>    
     <res-ref-name>jdbc/test</res-ref-name>    
     <res-type>javax.sql.DataSource</res-type>    
     <res-auth>Container</res-auth>    
     <res-sharing-scope>Shareable</res-sharing-scope>    
  </resource-ref>   

 

java:comp/env是组件的JNDI上下文的名字.

(实际上这个上下文也作为一种资源来处理了,资源查找的过程可以是这样:

jndictxt = ctxt.lookup("java:comp/env")然后用这个jndictxt来查找资源,

ref = jndictxt.lookup("jdbc/test")。)

jdbc/test是资源引用的JNDI名(The jdbc/test string is the JNDI name for the resource reference,这句话可能意味着资源引用实际上也跟资源一样处理成一种JNDI绑定对象了,但是实际上应该不是这样,因为在部署描述符中它是引用名元素。因为译者也不是高手,所以这里的具体实现细节有待读者自己研究了:)所以JDBC的DataSource对象的JNDI名就存储在java:comp/env/jdbc的上下文子对象中。(组件运行环境的上下文层次需要进一步了解)

 

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

 public static DataSource getDataSource(String dataSourceName){
     Context initCtx;
  try {
   initCtx = new InitialContext();
   Context envCtx = (Context) initCtx.lookup("java:comp/env");
   return (DataSource)envCtx.lookup(dataSourceName);
  } catch (NamingException e) {   
   e.printStackTrace();
  }
  return null;

}

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值