做過J2EE平臺應用程序的讀者應該都知道,在Tomcat,weblogic這些應用服務器平臺上都支持配置連接池的功能。Tomcat默認是DBCP 也可以換成C3P0等其他開源的連接池。在這些應用服務器上之所以能運行連接池是因爲他們有JnpServer這樣的容器。筆者在之前的文章中向大家介紹了在Domino平臺上如何集成JnpServer,其實筆者想實現的是如何在Domino平臺上運行連接池。有人一定會說,Xpage中已經有這個功能了,你還瞎折騰啥?沒有折騰就沒有進步,而且除了容納連接池,JnpServer還能幹很多其他事情,只需要讀者動動腦。閒言少敘,進入正題。那麼如何做才能在JnpServer上運行連接池那?
首先要運行JnpServer,請參閱本文末尾的相關文章。筆者此次集成的是C3P0連接池,當然也可以是其他開源的連接池產品。其次,準備運行C3P0所需要的Jar包。這點頗爲惱人,一般開源產品都有的毛病就是依賴其他開源的產品,而且還不告訴你。筆者爲了啓動C3P0,前前後後找了5個Jar包,都是在運行的時候報錯誤,才知道需要找哪些類,繼而尋找缺失的Jar包。爲了順利運行連接池,筆者也只好忍耐。所有的Jar包都準備齊全了,放到JVM的ext目錄下。看過筆者前幾篇介紹JnpServer的讀者應該知道怎麼做,這裏筆者就不介紹了。還是用那段代碼,啓動JnpSever後,要編寫初始化連接池的代碼:
Class.forName(jnpconfig.getDriverclass());
DataSource unpooled = DataSources.unpooledDataSource(jnpconfig.getJdbcurl(), jnpconfig.getUser(),jnpconfig.getPassword());
DataSource pooled = DataSources.pooledDataSource(unpooled);
ctx = new InitialContext();
ctx.rebind(jnpconfig.getJndiname(), pooled);
在服務器端正常啓動C3P0,應顯示如下信息:
2015/07/08 13:21:48 RunJava JVM: starting DominoJnpserver...
2015/07/08 13:21:48 RunJava JVM: 正在啓動JnpServer...
2015/07/08 13:21:48 RunJava JVM: JNPDataSource:oracle.jdbc.driver.OracleDriver
2015/07/08 13:21:49 RunJava JVM: JnpServer啓動完畢。
2015/07/08 13:21:49 RunJava JVM: driverclass:oracle.jdbc.driver.OracleDriver
2015/07/08 13:21:50 RunJava JVM: 13:21:50,375 INFO [MLog] MLog clients using slf4j logging.
2015/07/08 13:21:50 RunJava JVM: 13:21:50,589 INFO [C3P0Registry] Initializing c3p0-0.9.5 [built 02-January-2015 13:25:04 -0500; debug? true; trace: 10]
如果一切順利,那麼此時連接池的服務器端已經正常運行,只需要用戶在客戶端編寫取出連接池的代碼就可以正常工作了。這裏所謂的客戶端是指在代理、Servlet、Xpage、WebService中調用連接池。其實寫法也很簡單,完全可以參照J2EE平臺上獲取連接池的代碼。比如:
InitialContext ctx = new InitialContext(props);
DataSource ds = (DataSource) ctx.lookup(sjndiname);
con = ds.getConnection();
stmt = con.createStatement();
rs = stmt.executeQuery("select * from TESTDATA t");
while (rs.next()) {
System.out.println(rs.getString(1));
}
配置完成後,在Web端調用 代理運行,能正常輸出Oracle表中內容,即可表明:連接池能正常工作。在Oracle中表數據如圖:
到此,C3P0連接池運行正常。