信息技术

当前位置: 主页 > 编程语言 > JAVA >

Tomcat5.0.28 + oracle9i的JNDI配置

时间:2010-07-09 16:31来源:未知 作者:admin 点击:
JNDI 配置弄得我非常郁闷!配了两三天,报了一堆错误,凡是可能出现的错误,我恐怕都碰了个遍,在碰个头破血流的情况下,算是初步摸清楚状况了,下面描述一下根据自己理解的配置步骤。 我使用的是 Tomcat5 .0.28+oracel9i ,

JNDI 配置弄得我非常郁闷!配了两三天,报了一堆错误,凡是可能出现的错误,我恐怕都碰了个遍,在碰个头破血流的情况下,算是初步摸清楚状况了,下面描述一下根据自己理解的配置步骤。

 

    我使用的是 Tomcat5.0.28+oracel9i tomcat5.5 以上的版本其实与这个类似,只是写法上有些不同,在配置 resource 的时候, tomcat5.5 的参数是写在 resource 标签内的。原理上理解了也就好配置了。

从我的理解来说, jndi 配置应该有两种情况,一种是由 tomcat 容器管理的全局性 resource 资源,另一种是每个应用自己管理的单个 resource 资源。

 

准备工作:

1 orcale jdbc 驱动放入到 %CATALINA_HOME%/common/lib 下, orcale jdbc 驱动是 ojdbc14.jar ,这个 jar 包可以在 orcale 的安装目录下找到,具体位置在 ..\ oracle\ora92\jdbc\lib下。

2 部署自己的应用,这一步不是必须的,也可以在配置完 jndi 资源后部署

 

先说第一种,全局性的 resource 资源 。这种配置是由 tomcat 容器管理的,如果 webapps 下面的应用想要使用这个资源,需要先与之相连接,获取到该资源,再引用它才能使用。具体步骤如下:

 

1 注册全局性的 resource 资源

全局性的 resource 资源是在 tomcat %CATALINA_HOME% /conf/server.xml 中进行注册的,注册过程通过在 server.xml 中的 <GlobalNamingResources>下加入如下代码:

Xml代码
  1. <Resource name="jndi/jdbc" type="javax.sql.DataSource"/>  
  2.     <ResourceParams name="jndi/jdbc">  
  3.       <parameter>  
  4.         <name>url</name>  
  5.         <value>jdbc:oracle:thin:@127.0.0.1:1521:SID</value>  
  6.       </parameter>  
  7.       <parameter>  
  8.         <name>password</name>  
  9.         <value>your password</value>  
  10.       </parameter>  
  11.       <parameter>  
  12.         <name>maxActive</name>  
  13.         <value>4</value>  
  14.       </parameter>  
  15.       <parameter>  
  16.         <name>maxWait</name>  
  17.         <value>5000</value>  
  18.       </parameter>  
  19.       <parameter>  
  20.         <name>driverClassName</name>  
  21.         <value>oracle.jdbc.driver.OracleDriver</value>  
  22.       </parameter>  
  23.       <parameter>  
  24.         <name>username</name>  
  25.         <value>your username</value>  
  26.       </parameter>  
  27.       <parameter>  
  28.         <name>maxIdle</name>  
  29.         <value>2</value>  
  30.       </parameter>  
  31.     </ResourceParams>  

 

注意:如果是通过浏览器访问 tomcat 的控制台配置的话,进入 Resources 下的 Data Sources 中新建一个 Data Source ,填入下面的内容:

Java代码
  1. JNDI Name: jndi/jdbc   
  2. Data Source URL: jdbc:oracle:thin:@127.0.0.1:1521:SID   
  3. JDBC Driver Class: oracle.jdbc.driver.OracleDriver   
  4. User Name: yourname   
  5. Password: yourpassword   
  6. Max. Active Connections: 4(根据需要填写)   
  7. Max. Idle Connections: 2(根据需要填写)   
  8. Max. Wait for Connection: 5000(根据需要填写)   
  9. Validation Query: 不填  

 

这两种的效果是一样的。

 

2 将该资源连接到自己的应用上。在 %CATALINA_HOME% / conf / Catalina / localhost下有你的应用的配置文件, YourAppName.xml ,如果没有,手动创建一个就可以。一般在控制台配置的话, tomcat 会自动创建该文件。内容如下:

Xml代码
  1. <?xml version='1.0' encoding='utf-8'?>  
  2. <Context docBase="YourAppName" path="/YourAppName" workDir="work\Catalina\localhost\YourAppName">  
  3.   
  4.  <ResourceLink name="jndi/jdbc"  global="jndi/jdbc"  type="javax.sql.DataSource"/>  
  5.   
  6. </Context>  

 

如果通过 tomcat 控制台配置的话,进入 Service Host 里面的应用 Context(/YourAppName) (这里要保证你的应用已经提前部署到 tomcat 中了)在 Resource Links 中新建一个 link ,填入下面的内容:

 

Java代码
  1. Name: jdbc/jndi   
  2. Global: jdbc/jndi   
  3. Type: javax.sql.DataSource  

 

 

3 用你的应用测试一下,我这里可以写了个 jsp 程序测试的,如下:

Js代码
  1. <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>   
  2. <%@page import="javax.naming.Context"%>   
  3. <%@page import="javax.sql.DataSource" %>   
  4. <%@page import="javax.naming.InitialContext"%>   
  5. <%@page import="java.sql.Connection"%>   
  6. <%@page import="java.sql.Statement"%>   
  7. <%@page import="java.sql.ResultSet"%>   
  8.   
  9. <%   
  10. String path = request.getContextPath();   
  11. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";   
  12. %>   
  13.   
  14. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">   
  15. <html>   
  16.   <head>   
  17.     <base href="<%=basePath%>">   
  18.        
  19.     <title>Test JNDI</title>   
  20.     <meta http-equiv="pragma" content="no-cache">   
  21.     <meta http-equiv="cache-control" content="no-cache">   
  22.     <meta http-equiv="expires" content="0">       
  23.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">   
  24.     <meta http-equiv="description" content="This is my page">   
  25.     <!--   
  26.     <link rel="stylesheet" type="text/css" href="styles.css">   
  27.     -->   
  28.   </head>   
  29.      
  30.   <body>    
  31.     giTest JNDI <br>   
  32.     <%   
  33.                
  34.         Context cxt = new InitialContext();   
  35.         DataSource ds = null;   
  36.         ds = (DataSource)cxt.lookup("java:comp/env/jndi/jdbc");   
  37.     System.out.println(ds);    
  38.         if(ds != null)   
  39.         {   
  40.     out.println(ds);    
  41.         try{   
  42.             Connection con = ds.getConnection();   
  43.             Statement stmt = con.createStatement();   
  44.             ResultSet rst = stmt.executeQuery("select * from test");   
  45.             while(rst.next())   
  46.             out.println(rst.next());   
  47.                
  48.         }catch(Exception e){   
  49.             e.printStackTrace();   
  50.         }   
  51.         }   
  52.                
  53.      %>   
  54.   </body>   
  55. </html>  

   

注意查找 jndi 的写法:java:comp/env/jndi/ jdbc 后面是你起的 jndi 名。

 

第二种,为单个应用配置 jndi 资源。 这种方式是由你的应用去管理 jndi 资源的。

 

1 tomcat 中你应用的配置文件中注册 jndi 资源,位置在 %CATALINA_HOME% / conf / Catalina / localhost /YourAppName.xml ,没有的话创建一个,内容如下:

Xml代码
  1. <?xml version='1.0' encoding='utf-8'?>  
  2. <Context docBase="YourAppName" path="/YourAppName" workDir="work\Catalina\localhost\YourAppName">       
  3.     <Resource name="jndi/jdbc" type="javax.sql.DataSource"/>  
  4.     <ResourceParams name="jndi/jdbc">  
  5.       <parameter>  
  6.         <name>url</name>  
  7.         <value>jdbc:oracle:thin:@127.0.0.1:1521:SID</value>  
  8.       </parameter>  
  9.       <parameter>  
  10.         <name>password</name>  
  11.         <value>yourpassword</value>  
  12.       </parameter>  
  13.       <parameter>  
  14.         <name>maxActive</name>  
  15.         <value>4</value>  
  16.       </parameter>  
  17.       <parameter>  
  18.         <name>maxWait</name>  
  19.         <value>5000</value>  
  20.       </parameter>  
  21.       <parameter>  
  22.         <name>driverClassName</name>  
  23.         <value>oracle.jdbc.driver.OracleDriver</value>  
  24.       </parameter>  
  25.       <parameter>  
  26.         <name>username</name>  
  27.         <value>yourname</value>  
  28.       </parameter>  
  29.       <parameter>  
  30.         <name>maxIdle</name>  
  31.         <value>2</value>  
  32.       </parameter>  
  33.     </ResourceParams>  
  34. </Context>  

 

注意:配置单个应用的 jndi 资源时,这里可以不用写 link 。如果使用控制台配置,直接进入 Service Host 里面的应用 Context(/YourAppName) (这里要保证你的应用已经提前部署到 tomcat 中了)在 Data Source 创建一个新的 Data Source ,输入如下内容:

 

Java代码
  1. JNDI Name: jndi/jdbc   
  2. Data Source URL: jdbc:oracle:thin:@127.0.0.1:1521:SID   
  3. JDBC Driver Class: oracle.jdbc.driver.OracleDriver   
  4. User Name: yourname   
  5. Password: yourpassword   
  6. Max. Active Connections: 4(根据需要填写)   
  7. Max. Idle Connections: 2(根据需要填写)   
  8. Max. Wait for Connection: 5000(根据需要填写)   
  9. Validation Query: 不填  

2 测试连接,参考第一种配置方式的第三步(代码略)

 

局部的JNDI配置还有一种方式,即直接在server.xml中配置,但位置略有不同,即将下面的代码放在<HOST>标签中,这时,此时可以不需要你应用的配置文件( %CATALINA_HOME% / conf / Catalina / localhost /YourAppName.xml ),效果是一样的。

Java代码
  1. <Host>   
  2. ......   
  3. <Context docBase="YourAppName" path="/YourAppName" workDir="work\Catalina\localhost\YourAppName">       
  4.     <Resource name="jndi/jdbc" type="javax.sql.DataSource"/>   
  5.     <ResourceParams name="jndi/jdbc">   
  6.       <parameter>   
  7.         <name>url</name>   
  8.         <value>jdbc:oracle:thin:@127.0.0.1:1521:SID</value>   
  9.       </parameter>   
  10.       <parameter>   
  11.         <name>password</name>   
  12.         <value>yourpassword</value>   
  13.       </parameter>   
  14.       <parameter>   
  15.         <name>maxActive</name>   
  16.         <value>4</value>   
  17.       </parameter>   
  18.       <parameter>   
  19.         <name>maxWait</name>   
  20.         <value>5000</value>   
  21.       </parameter>   
  22.       <parameter>   
  23.         <name>driverClassName</name>   
  24.         <value>oracle.jdbc.driver.OracleDriver</value>   
  25.       </parameter>   
  26.       <parameter>   
  27.         <name>username</name>   
  28.         <value>yourname</value>   
  29.       </parameter>   
  30.       <parameter>   
  31.         <name>maxIdle</name>   
  32.         <value>2</value>   
  33.       </parameter>   
  34.     </ResourceParams>   
  35.  </Context>   
  36. </Host>  

 

在尝试过这些之后,就会发现,实际上server.xml<HOST>标签下<context>就是为你的应用配置的内容。

 

最后有个问题:

很多地方在配置完上面的这些后,会在自己的应用中的web.xml加入引用JNDI资源的代码,即

 

Xml代码
  1. <resource-ref>  
  2. <description>postgreSQL Datasource example</description>  
  3. <res-ref-name>jdbc/jndi</res-ref-name>  
  4. <res-type>javax.sql.DataSource</res-type>  
  5. <res-auth>Container</res-auth>  
  6. lt;/resource-ref>  

 但是我尝试了不加也可以访问到JNDI资源,不知道这段代码具体有什么作用。

(责任编辑:admin)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片