今天下午花了三个小时的时间研究了一下基于Tomcat5.0的Oracle10g的数据库连接池,本来以为很简单,因为以前做过基于Tomcat6.0配置的SQLServer2005数据库连接池,以为两者相差不多,可以三下五除二的搞定,谁知居然花了那么长的时间才搞定,特此记录一下,以免遗忘。
(1)首先,要配置DataSource,在Tomcat5.0\conf\目录下的 server.xml 文件中配置DataSource的相关信息,因为手写代码比较麻烦,从网上找到了一个快速配置DataSource的方法,就是使用Tomcat5.0的图形界面来配置相关的参数;启动Tomcat5.0,在地址栏中输入:http://localhost:端口号/admin,进入Tomcat5.0的图形管理界面,(Tomcat Web Server Administration Tool )输入Tomcat的登录帐户,进入管理界面;
选择左侧的Resources节点下的 Data Sources 选项(标识1处),进入DataSource配置界面,系统会自动从server.xml 中读取已有的DataSource配置,并以列表的形式展示给用户(标识2处),你可以点击名称查看或修改详细信息,如果没有已有配置也没有关系,Tomcat5.0提供了快速配置DataSource的方法,在右上角的Data Source Actions 处,选择下拉列表框中的 Create new DataSource ,即可进入创建DataSource界面,如图2所示。
填入如JNDI名称、数据库连接字符串、驱动器字符串、数据库帐户、密码、最大连接数、最长等待时间等相关参数后点击右上角的Sava按钮,并点击右上角的 Commit Changes 按钮就完成了DataSource的配置。
再次查看 server.xml ,发现已经增加了如下DataSource配置信息:
<Resource name="jdbc/oracle" type="javax.sql.DataSource" auth="Container" /> <ResourceParams name="UserDatabase"> <parameter> <name>factory</name> <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value> </parameter> <parameter> <name>pathname</name> <value>conf/tomcat-users.xml</value> </parameter> </ResourceParams> <ResourceParams name="jdbc/oracle"> <parameter> <name>maxWait</name> <value>5000</value> </parameter> <parameter> <name>maxActive</name> <value>4</value> </parameter> <parameter> <name>password</name> <value>password</value> </parameter> <parameter> <name>url</name> <value>jdbc:oracle:thin:@localhost:1521:firstdb</value> </parameter> <parameter> <name>driverClassName</name> <value>oracle.jdbc.driver.OracleDriver</value> </parameter> <parameter> <name>maxIdle</name> <value>2</value> </parameter> <parameter> <name>username</name> <value>mocha</value> </parameter> </ResourceParams>
(2)接下来进入最重要的一步,也是很多人(包括我)忽略掉的地方,引起配置的失败,无法获得数据库连接。所以各位睁大眼睛看看是怎么做的。嘻嘻……
进入Tomcat5.0安装目录, 如Tomcat 5.0\conf\Catalina\localhost ,在此目录中建立一个XML文件,文件名和项目名称同名,如 MochaOnline.xml , 在文件中新增Context节点并加入和 server.xml 文件中刚刚配置的DataSource代码即可,如下所示:
<?xml version='1.0' encoding='utf-8'?> <Context docBase="C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\MochaOnline" path="/MochaOnline" workDir="work\Catalina\localhost\MochaOnline"> <Resource name="jdbc/oracle" type="javax.sql.DataSource" auth="Container" /> <ResourceParams name="UserDatabase"> <parameter> <name>factory</name> <value> org.apache.catalina.users.MemoryUserDatabaseFactory </value> </parameter> <parameter> <name>pathname</name> <value>conf/tomcat-users.xml</value> </parameter> </ResourceParams> <ResourceParams name="jdbc/oracle"> <parameter> <name>maxWait</name> <value>5000</value> </parameter> <parameter> <name>maxActive</name> <value>4</value> </parameter> <parameter> <name>password</name> <value>password</value> </parameter> <parameter> <name>url</name> <value>jdbc:oracle:thin:@localhost:1521:firstdb</value> </parameter> <parameter> <name>driverClassName</name> <value>oracle.jdbc.driver.OracleDriver</value> </parameter> <parameter> <name>maxIdle</name> <value>2</value> </parameter> <parameter> <name>username</name> <value>mocha</value> </parameter> </ResourceParams> </Context>
(3)完成上面两步后,就可以配置Web项目中的 web.xml 文件了,在其中配置资源引用,以便在项目启动时,将资源加载进来。
<resource-ref> <res-ref-name>jdbc/oracle</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
(4)最后代码编写,获得连接池中的连接。
try { Context ctx = new InitialContext(); DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/oracle"); ds.getConnection(); } catch (Exception e) { e.printStackTrace(); }
到此为止,基于Tomcat5.0的Oracle10g连接池已经配置完成了,另外在测试连接时,一定要在Web项目中调用连接,不要以Java程序的形式来运行,因为连接池是由Tomcat来提供的,不从容器中找,是不会有结果的。
(完)xusweeter @ 2010年07月29日 晚22:08