在Tomcat上配置Proxool的DataSource(Jndi) --第2種方法

          Posted on 2009-02-17 14:15 太清劍客 閱讀(3880) 評論(0)  編輯  收藏 所屬分類: JAVA

          關(guān)于第一個方法請看
          http://www.aygfsteel.com/kreo/archive/2009/02/12/254348.html


          第一個方法是在容器,也就是Tomcat上做配置,但是,有時候會不適用,比如虛擬主機,它可能不允許你在機器上做配置,那樣,就只能從自身的程序著手.

          首先,寫一個Proxool的配置文件.....放在 WEB-INF 目錄下,下面是一個例子
          <?xml version="1.0" encoding="UTF-8"?>
              
          <!--
                  the proxool configuration can be embedded within your own application's. Anything outside the "proxool" tag is
                  ignored.
              
          -->
          <something-else-entirely>
              
          <proxool>
                  
          <alias>proxool_alias</alias>
                  
          <driver-url>jdbc:oracle:thin:@127.0.0.1:1521:sid</driver-url>
                  
          <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
                  
          <driver-properties>
                      
          <property name="user" value="user" />
                      
          <property name="password" value="pwd" />
                  
          </driver-properties>
                  
          <maximum-connection-count>10</maximum-connection-count>
                  
          <minimum-connection-count>5</minimum-connection-count>
                  
          <maximum-connection-lifetime>30</maximum-connection-lifetime>
                  
          <maximum-active-time>3</maximum-active-time>
                  
          <simultaneous-build-throttle>5</simultaneous-build-throttle>
                  
          <house-keeping-sleep-time>30000</house-keeping-sleep-time>
                  
          <house-keeping-test-sql>Select Sysdate Form dual</house-keeping-test-sql>
                  
          <prototype-count>0</prototype-count>
              
          </proxool>
          </something-else-entirely>

          然后,當然是先把這個文件先用上,看看可不可以用

          在web.xml里面配置上
              <servlet>
                  
          <servlet-name>ServletConfigurator</servlet-name>
                  
          <servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
                  
          <init-param>
                      
          <param-name>xmlFile</param-name>
                      
          <param-value>WEB-INF/proxool.xml</param-value>
                  
          </init-param>
                  
          <load-on-startup>1</load-on-startup>
              
          </servlet>
              
          <servlet>
                  
          <servlet-name>proxooladmin</servlet-name>
                  
          <servlet-class> org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
              
          </servlet>
              
          <servlet-mapping>
                  
          <servlet-name>proxooladmin</servlet-name>
                  
          <url-pattern>/proxooladmin.servlet</url-pattern>
              
          </servlet-mapping>

          這樣在應用啟動之后,就能通過以下代碼來訪問到數(shù)據(jù)庫

              Connection conn = DriverManager.getConnection("proxool.proxool_alias");
              Statement stmt 
          = conn.createStatement();
              ResultSet rs 
          = stmt.executeQuery("Select * From test");

          /*以下是重點*/
          但是我們需要的是注冊一個JNDI,
          有2種方法
          1.配置文檔里面直接注冊,這樣配置:
          <?xml version="1.0" encoding="UTF-8"?>
              
          <!--
                  the proxool configuration can be embedded within your own application's. Anything outside the "proxool" tag is
                  ignored.
              
          -->
          <something-else-entirely>
              
          <proxool>
                  
          <alias>proxool_alias</alias>
                  
          <driver-url>jdbc:oracle:thin:@127.0.0.1:1521:pub</driver-url>
                  
          <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
                  
          <driver-properties>
                      
          <property name="user" value="user" />
                      
          <property name="password" value="pwd" />
                  
          </driver-properties>
                  
          <jndi-name>jdbc-0</jndi-name>
                  
          <jndi-java.naming.factory.initial>org.apache.naming.java.javaURLContextFactory</jndi-java.naming.factory.initial>
                  
          <jndi-java.naming.factory.url.pkgs>org.apache.naming</jndi-java.naming.factory.url.pkgs>
                  
          <maximum-connection-count>10</maximum-connection-count>
                  
          <minimum-connection-count>5</minimum-connection-count>
                  
          <maximum-connection-lifetime>30</maximum-connection-lifetime>
                  
          <maximum-active-time>3</maximum-active-time>
                  
          <simultaneous-build-throttle>5</simultaneous-build-throttle>
                  
          <house-keeping-sleep-time>30000</house-keeping-sleep-time>
                  
          <house-keeping-test-sql>Select Sysdate Form dual</house-keeping-test-sql>
                  
          <prototype-count>0</prototype-count>
              
          </proxool>
          </something-else-entirely>


          2.在自己的Java類里面注冊JNDI
          那就需要用到Proxool提供的另一個類:ProxoolJNDIHelper:
                  Properties info = new Properties();
                  info.setProperty(
          "jndi-name""jdbc-0");
                  info.setProperty(
          "java.naming.factory.initial", org.apache.naming.java.javaURLContextFactory.class.getName());
                  info.setProperty(
          "java.naming.factory.url.pkgs""org.apache.naming");
                  
          // info.setProperty("java.naming.provider.url", "localhost:8888");
               try {
                      ProxoolJNDIHelper.registerDatasource(
          "proxool_alias", info);
               }
           catch (ProxoolException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                   }

          上面所說的2中方法都能注冊一個名為jdbc-0的JNDI,
          可以通過以下代碼來訪問數(shù)據(jù)庫..
                  Context ctx = new InitialContext();
                  DataSource dataSource 
          = (DataSource) ctx.lookup("jdbc-0");
                      
                  Connection conn 
          = dataSource.getConnection();

          下面說明代碼,
          1.jndi-name好像不能用jdbc/xx這種名字,文檔里面用的就是/datasources/UserDB,但是Tomcat啟動就報錯,可能和特殊字符有關(guān),具體沒測試
          2.JNDI的幾個參數(shù)(java.naming.factory.initial,java.naming.factory.url.pkgs,還有java.naming.provider.url),這些參數(shù)和容器有關(guān),Tomcat就是這些參數(shù)
          JBOSS的話就是:
          java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
          java.naming.provider.url=localhost:1099
          java.naming.factory.url.pkgs=org.jboss.naming

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           

          posts - 10, comments - 4, trackbacks - 0, articles - 0

          Copyright © 太清劍客

          主站蜘蛛池模板: 肇庆市| 静乐县| 娄烦县| 高唐县| 连城县| 河源市| 托克托县| 普格县| 海林市| 隆尧县| 来安县| 平原县| 沅陵县| 都安| 融水| 平果县| 额济纳旗| 乌苏市| 北海市| 济宁市| 尚义县| 惠来县| 柏乡县| 浠水县| 湘西| 新泰市| 罗江县| 汤原县| 新津县| 区。| 北流市| 台中县| 五常市| 樟树市| 夏邑县| 南平市| 武城县| 溧水县| 阜城县| 德昌县| 唐河县|