1 配置数据源
如果我们要部署的是个WEB应用程序,我们将该应用程序放在TOMCAT_HOME/webapps目录下,有两种方式可以引用我们所配置的JNDI数据源。
A:可以在TOMCAT_HOME/conf/Catalina/localhost下新建XXX.xml文件,XXX为所发布的WEB应用的名字,如我所发布的WEB应用是JndiTest,.xml文件命名为JndiTest.xml在该文件内加:
如我所发布的WEB应用是test,.xml文件命名为test.xml在该文件内加:
<?xml version='1.0' encoding='utf-8'?>
<Context path="/test" docBase="E:/Java/tomcat/webapps/test" debug="0"
reloadable="true" crossContext="true">
<Environment name="maxExemptions" type="java.lang.Integer"
value="15"/>
<Parameter name="context.param.name" value="context.param.value"
override="false"/>
<Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/mydb">
<parameter>
<name>factory</name>
<!-- <value>com.ibm.db2.jcc.DB2SimpleDataSource</value>-->
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>COM.ibm.db2.jdbc.net.DB2Driver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:db2://localhost:6789/alisi</value>
</parameter>
<parameter>
<name>username</name>
<value>hain</value>
</parameter>
<parameter>
<name>password</name>
<value>bi2003</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>10</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>-1</value>
</parameter>
</ResourceParams>
</Context>
其中E:/Java/tomcat/webapps/test为你所发布应用程序的目录,这样就可以进行测试了。
这样做就是每个WEB应用程序都须创建一个象test.xml这样的文件。
B 为了避免每个WEB应用程序都创建XXX.xml文件,我们可以修改TOMCAT_HOME/conf下的server.xml文件,修改如下:
在之间加入:
<Context path="/test" docBase="E:/Java/tomcat/webapps/test" debug="0"
reloadable="true" crossContext="true">
<Environment name="maxExemptions" type="java.lang.Integer"
value="15"/>
<Parameter name="context.param.name" value="context.param.value"
override="false"/>
<Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/mydb">
<parameter>
<name>factory</name>
<!-- <value>com.ibm.db2.jcc.DB2SimpleDataSource</value>-->
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>driverClassName</name>
<!--<value>COM.ibm.db2.jdbc.app.DB2Driver</value>-->
<value>COM.ibm.db2.jdbc.net.DB2Driver</value>
</parameter>
<parameter>
<name>url</name>
<!--<value>jdbc:db2:TEXT</value>-->
<value>jdbc:db2://localhost:6789/alisi</value>
</parameter>
<parameter>
<name>username</name>
<value>ha</value>
</parameter>
<parameter>
<name>password</name>
<value>2005</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>10</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>-1</value>
</parameter>
</ResourceParams>
</Context>
2 注意要在每个WEB应用程序的web.xml文件中都加入(不是必须的)
<resource-ref>
<description>db2 Datasource example</description> <res-ref-name>jdbc/mydb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
3 测试代码
编写index.jsp文件:
<%@ page contentType="text/html;charset=GBK"%>
<%@ page import= "java.sql.* "%>
<%@ page import= "javax.naming.* "%>
<%@ page import= "javax.sql.* "%>
Hi,
<%
try{
Context initCtx = new InitialContext();
Context ctx = (Context) initCtx.lookup("java:comp/env"); //获取连接池对象
Object obj = (Object) ctx.lookup("jdbc/mydb"); //类型转换
javax.sql.DataSource ds = (javax.sql.DataSource)obj;
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
String strSql = "Select * from tb_AREA_TABLE";
ResultSet rs = stmt.executeQuery(strSql);
while(rs.next()){ out.println(rs.getString(1));
out.println(rs.getString(2));
}
}
catch(Exception ex)
{ System.out.println("ERRRR:"+ex);
}%>
在IE里面输入http://127.0.0.1:8080/test/如果能显示出数据则配置成功
4 配置说明:
<Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource"/>
Resource项(即连接池的DataSource对象),有3个属性name、auth、type,name项是JNDI的名称定义,程序通过JNDI才能找到此对象,这里取名jdbc/mydb;auth项即连接池管理权属性,这里取值Container,申明为容器管理;type项即对象的类型,这里取值javax.sql.DataSource,申明为数据库连接池
在接下来的<ResourceParams>域内容里包含四个参数user、password、driverClassName、driverName,依次为数据库的用户名、密码、JDBC驱动和数据库地址。
用户名、密码是为访问数据库准备的,取连接数据库的用户名和密码。
driverClassName即数据库的JDBC驱动名称,JDBC驱动包名叫db2java.zip,一般位于DB2安装目录下的IBM/SQLLIB/java目录下,初始扩展名为ZIP,并放到common/lib下。这里又2种取值COM.ibm.db2.jdbc.net.DB2Driver和COM.ibm.db2.jdbc.app.DB2Driver
接下来是即url,即数据库的地址
jdbc:db2://localhost:6789/masa_239和jdbc:db2:TEXT
在这里填写里的是db2的访问地址
接下来有三个参数,均为连接数相关,如下:
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>10</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>-1</value>
</parameter>
maxActive是最大激活连接数,这里取值20个,表示同时最多有20个与数据库的连接。
maxIdle是最大空闲连接数,这里取值10个,表示即使没有连接请求时,依然可以保持10空闲的连接,而不被清除,随时处于待命状态。关于对象的状态,有兴趣的朋友可以看看EJB方面的资料。
maxWait是最大等待秒钟数,这里取值-1,表示无限等待,直到超时为止,也可以取值9000,即表示9秒后超时。
关于maxActive与maxIdle的一点建议,对于企业级应用,其两者的值一般比较接近,或者相同,关键是要分析应用的大小。