现在的位置: 首页 > 综合 > 正文

Tomcat6配置Oracle数据库JNDI

2013年08月04日 ⁄ 综合 ⁄ 共 3262字 ⁄ 字号 评论关闭

 

今天郁闷了一下午,Tomcat6配置Oracle数据库的JNDI就是不好用,后来请教了我师父,终于弄好了,弄好了以后回过头来再一想,偶实在是太粗心了,本来doc上写的很清楚的东西我居然没看到,唉……赶快写出来,以免其他人遇到这个问题时也像我一样郁闷。

1. 配置Oracle JDBC Driver。将classes111.jar(Oracle8i)或classes12.jar(Oracle9i)或ojdbc14.jar(Oracle10g)拷贝到$CATALINA_HOME/lib(或Windows系统中%CATALINA_HOME%/lib)目录下。

注意:老版本的Drivers可能是*.zip或者是*.jar的文件,Tomcat只会使用$CATALINA_HOME/lib目录下的*.jar文件,因此需要把classes111.zip或classes12.zip文件rename为classes111.jar以及classes12.jar文件,因为jar文件就是zip文件,所以没有必要去unzip这些zip文件再打成jar文件。

另外:Oracle9i及以后的版本应该使用oracle.jdbc.OracleDriver而不建议使用oracle.jdbc.driver.OracleDriver,因为Oracle已经声明oracle.jdbc.driver.OracleDriver已经不再建议使用,并且Oracle也将不会提供后续主要版本对于oracle.jdbc.driver.OracleDriver的服务。

2. 修改Tomcat的server.xml文件,主要内容如下

<Context docBase="niniapp" path="/niniapp" reloadable="true" source="org.eclipse.jst.jee.server:qprlzy">
       <Resource name="JNDI_NINIAPP" auth="Container" type="javax.sql.DataSource"
               maxActive="100" maxIdle="30" maxWait="10000"
               username="nini" password="nini" driverClassName="oracle.jdbc.driver.OracleDriver"
               url="jdbc:oracle:thin:@192.168.2.9:1521:orcl"/>
</Context>

在这里添加的数据源的名字为JNDI_NINIAPP,username是数据库用户名;password是数据库中该用户名对应的密码;driverClassName是数据库驱动;maxIdle是最大空闲数,即数据库连接的最大空闲时间,超过空闲时间,数据库连接将被标记为不可用,然后被释放掉,如果设为0,则表示无限制;maxActive是连接池中最大数据库连接数,如果设为0,则表示无限制;maxWait是最大建立连接等待时间,如果超过次时间就会报异常,如果设为-1,则表示无限制。

我师父给我推荐的blog上也提到在可以这样写:

<Context docBase="niniapp" path="/qprlzy" reloadable="true" source="org.eclipse.jst.jee.server:qprlzy"> 
       <Resource name="JNDI_NINIAPP" auth="Container" type="javax.sql.DataSource"/>
     <ResourceParams name="JNDI_NINIAPP">
     <parameter>
     <name>factory</name>
       <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
      </parameter>
      <parameter>
       <name>driverClassName</name>
       <value>oracle.jdbc.driver.OracleDriver</value>
      </parameter>
      <parameter>
       <name>url</name>
       <value>jdbc:oracle:thin:@192.168.2.9:1521:orcl</value>
      </parameter>
      <parameter>
       <name>username</name>
       <value>nini</value>
      </parameter>
      <parameter>
       <name>password</name>
       <value>nini</value>
      </parameter>
      <parameter>
       <name>maxActive</name>
       <value>20</value>
      </parameter>
      <parameter>
       <name>maxIdle</name>
       <value>10</value>
      </parameter>
      <parameter>
       <name>maxWait</name>
       <value>10000</value>
      </parameter>                                         
     </ResourceParams>
     <ResourceLink global="JNDI_NINIAPP" name="JNDI_NINIAPP" type="javax.sql.DataSource"/>
</Context>

我试过了,两种写法都可以成功。当然,我看还有通过Tomcat的web应用管理界面(Tomcat Web Server Administration
Tool)来配置JNDI的方法,不过我没有试验过哈。

3. 有人说还要配web.xml,我不用配就OK,有哥们说如果不进行一下配置的话,Tomcat4配置连接池就会失败,这是Tomcat4的bug吗?偶不关心啦!不过如果要配置的话,则需要在E;/niniapp/WEB/WEB-INF/web.xml中加入如下内容:

<web-app>
  <resource-ref>
     <description>Oracle Datasource example</description>
     <res-ref-name>jdbc/myoracle</res-ref-name>
     <res-type>javax.sql.DataSource</res-type>
     <res-auth>Container</res-auth>
  </resource-ref>
</web-app>

其中,res-ref-name是数据源名字,与上面server.xml中所配置的属性name的值。

4. 代码样例:

Context initContext = new InitialContext();
Context envContext  = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/myoracle");
Connection conn = ds.getConnection();

按照上面步骤,我测试终于通过了!

抱歉!评论已关闭.