在tomcat5.5版本以前,可以说jndi配置相对是比较复杂的,而且据网友说用tomcat5.0的控制台配置数据库连接池经常有问题,而且文档写得又不详细。
tomcat5.5出来后,jndi的配置方法是大大地节省,而且很简洁,个人觉得比以前的版本好很多。这里大概给出一个配置例子。tomcat数据库连接池jndi配置有两种,一种是全局的,一种是context的,下面主要是讲全局的,并且以一个实例jdbc/byisdb为例子
一、tomcat5.0配置方法
1、首先在server.xml里面配置,找到下面的配置
<!--
Global JNDI resources
-->
<GlobalNamingResources>
</GlobalNamingResources>
2、在里面增加一个Resource
<
Resource
name
=
"
jdbc/byisdb
"
auth
=
"
Container
"
type
=
"
javax.sql.DataSource
"
/>
3、在下面增加属性
<
ResourceParams
name
=
"
jdbc/byisdb
"
>
<
parameter
>
<
name
>
factory
</
name
>
<
value
>
org.apache.commons.dbcp.BasicDataSourceFactory
</
value
>
</
parameter
>

<!--
Maximum number of dB connections in pool. Make sure
you
configure your mysqld max_connections large enough to
handle
all of your db connections. Set to
0
for
no limit.
-->
<
parameter
>
<
name
>
maxActive
</
name
>
<
value
>
100
</
value
>
</
parameter
>

<!--
Maximum number of idle dB connections to retain in
pool.
Set to
-
1
for
no limit. See
also the DBCP documentation on
this
and the minEvictableIdleTimeMillis configuration
parameter.
-->
<
parameter
>
<
name
>
maxIdle
</
name
>
<
value
>
30
</
value
>
</
parameter
>

<!--
Maximum time to wait
for
a dB connection
to become available
in ms, in
this
example
10
seconds. An Exception is thrown
if
this
timeout is exceeded. Set to
-
1
to wait indefinitely.
-->
<
parameter
>
<
name
>
maxWait
</
name
>
<
value
>
10000
</
value
>
</
parameter
>

<!--
MySQL dB username and password
for
dB
connections
-->
<
parameter
>
<
name
>
username
</
name
>
<
value
>
una_oa
</
value
>
</
parameter
>
<
parameter
>
<
name
>
password
</
name
>
<
value
>
una_oa
</
value
>
</
parameter
>

<!--
Class name
for
the old mm.mysql
JDBC driver
-
uncomment
this
entry and
comment next
if
you want to use
this
driver
-
we
recommend using Connector
/
J though
<
parameter
>
<
name
>
driverClassName
</
name
>
<
value
>
org.gjt.mm.mysql.Driver
</
value
>
</
parameter
>
-->
<!--
Class name
for
the official
MySQL Connector
/
J driver
-->
<
parameter
>
<
name
>
driverClassName
</
name
>
<
value
>
oracle.jdbc.driver.OracleDriver
</
value
>
</
parameter
>
<!--
The JDBC connection url
for
connecting to
your MySQL dB.
The autoReconnect
=
true
argument to the url makes sure that the
mm.mysql JDBC Driver will automatically reconnect
if
mysqld closed the
connection. mysqld by
default
closes idle
connections after
8
hours.
-->
<
parameter
>
<
name
>
url
</
name
>
<
value
>
jdbc:oracle:thin:@
192.168
.
1.210
:
1521
:byisdb
</
value
>
</
parameter
>
</
ResourceParams
>
4、在你的应用的web.xml里面增加
<
resource
-
ref
>
<
description
>
postgreSQL
Datasource example
</
description
>
<
res
-
ref
-
name
>
jdbc
/
byisdb
</
res
-
ref
-
name
>
<
res
-
type
>
javax.sql.DataSource
</
res
-
type
>
<
res
-
auth
>
Container
</
res
-
auth
>
</
resource
-
ref
>
OK,到此配置完毕,可以用下面的几段代码进行测试
Context initContext
=
new
InitialContext();
Context envContext
=
(Context)initContext.lookup(
"
java:/comp/env
"
);
DataSource ds
=
(DataSource)envContext.lookup(
"
jdbc/byisdb
"
);
Connection conn
=
ds.getConnection();
out.println(
"
conn is:
"
+
conn);
二、tomcat5.5配置
1、打开conf/context.xml里面
添加下面的配置
<
Resource
name
="jdbc/byisdb"
auth
="Container"
type
="javax.sql.DataSource"
driverClassName
="oracle.jdbc.driver.OracleDriver"
url
="jdbc:oracle:thin:@192.168.1.210:1521:byisdb"
username
="una_oa"
password
="una_oa"
maxActive
="20"
maxIdle
="10"
maxWait
="10000"
/>
2在你的应用的web.xml里面增加
<
resource
-
ref
>
<
description
>
postgreSQL
Datasource example
</
description
>
<
res
-
ref
-
name
>
jdbc
/
byisdb
</
res
-
ref
-
name
>
<
res
-
type
>
javax.sql.DataSource
</
res
-
type
>
<
res
-
auth
>
Container
</
res
-
auth
>
</
resource
-
ref
>
同样,可以用上面的代码进行测试。
2
一.在tomcat_home\common下放入jdbc的三个驱动程序(一定要的哦),可以在微软的网站上去下载,安装的SQLSERVER2k默认的用户名是sa,密码是空,但密码为空并不代表没有密码,所以你的url中一定要定义username和password,最好是重设定一下密码
二.出现不能引用错误的话一般就是路径没有写对,tomcat默认的路径是tomcat_home\webapps\不过使用5.5.x的话,按下面方法就行,不需要配置路径,而且也不用在youwebapp\WEB-INF\web.xml文件配置引用
三.tomcat5.5.x版的server.xml配置与tomcat5.0的配置不同,下面列举三种在tomcat5.5.x的配置方法,如果配置不正确会出现javax.naming.NameNotFoundException:
Name is not bound in this Context
错误
方式一、全局数据库连接池
1、通过管理界面配置连接池,或者直接在tomcat\conf\server.xml的GlobalNamingResources中增加
<Resource
name="jdbc/mydb" type="javax.sql.DataSource" password="mypwd"
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver" maxIdle="2"
maxWait="5000" validationQuery="select 1" username="sa"
url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb"
maxActive="4"/>
2、在tomcat\webapps\myapp\META-INF\context.xml的Context中增加:
<ResourceLink
global="jdbc/mydb" name="jdbc/mydb"
type="javax.sql.DataSource"/>
这样就可以了。
方式二、全局数据库连接池
1、同上
2、在tomcat\conf\context.xml的Context中增加:
<ResourceLink
global="jdbc/mydb" name="jdbc/mydb"
type="javax.sql.DataSource"/>
方式三、局部数据库连接池
只需在tomcat\webapps\myapps\META-INF\context.xml的Context中增加:
<Resource
name="jdbc/mydb" type="javax.sql.DataSource" password="mypwd"
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver" maxIdle="2"
maxWait="5000" validationQuery="select 1" username="sa"
url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb"
maxActive="4"/>
参数说明:
driveClassName:JDBC驱动类的完整的名称;
maxActive:同时能够从连接池中被分配的可用实例的最大数;
maxIdle:可以同时闲置在连接池中的连接的最大数;
maxWait:最大超时时间,以毫秒计;
password:用户密码;
url:到JDBC的URL连接;
user:用户名称;
validationQuery:用来查询池中空闲的连接。
以上三种方式在tomcat 5.5.4下都可以。另外,sql server的jdbc
driver是从微软网站上下载的sql server jdbc
(sp3)。
四.报错org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create
PoolableConnectionFactory ([Microsoft][SQLServer 2000 Driver for JDBC]Error
establishing
socket.)此是一个小问题,因为我的SQLSERVER2K的服务改成手动的,所以每次启动后就要手动的启动SQLSERVER2K,由于一下子不记的启动了,所以报些错误,所以如果你经常要用到SQLSERVER2K的话,最好不要将其改为手动启动
本文介绍Tomcat5.5版本中简化后的JNDI配置方法,包括全局和局部数据库连接池的配置步骤及参数说明。通过示例展示了如何在server.xml和context.xml中设置资源。
144

被折叠的 条评论
为什么被折叠?



