Tomcat6配置Oracle資料庫JNDI

來源:互聯網
上載者:User

 

今天鬱悶了一下午,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();

按照上面步驟,我測試終於通過了!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.