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