到底是 数据源(data source) 还是 连接池(connection pool) ???

pirateRocy 2003-08-21 01:48:20
我用tomcat + sqlserver2000,按官方网站上的提示,配置了连接池。
其中 %CATALINA_HOME%\config\server.xml 的相关片段如下:

<Context path="/myaddressbook" docBase="myaddressbook" debug="0" >
<Resource name="jdbc/mysqlserver" auth="Container"
type="javax.sql.DataSource"
description="addressbook Database"/>

<ResourceParams name="jdbc/mysqlserver">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:microsoft:sqlserver://127.0.0.1:1433;DataBaseName=AddressBook</value>
</parameter>
<parameter>
<name>username</name>
<value>sa</value>
</parameter>
<parameter>
<name>password</name>
<value>sa</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>

访问数据库的代码片段如下:
Context initCtx = new InitialContext();
Context ctx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)ctx.lookup("jdbc/mysqlserver");
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
String query = "select UserName, password from UserInfo";
ResultSet rs = stmt.executeQuery(query);

程序能正常访问到数据库,看上去一切正常。但是,我的问题如下:

1)我曾经用过weblogic的数据库连接池,初始连接数设为3,当我weblogic启动后,我在SQLServer的企业管理器中能看到当前有3个连接。但是,我用上面的设置启动tomcat后,SQLServer的企业管理器中看不到连接。这是为什么????

2)DataSource 应该表示数据源的一个接口,好象和连接池没有关系吧?
因为microsoft sqlserver2000 driver for jdbc的帮助文档上明确写着,上面的访问数据库的方法是通过DataSource,而不是connection pool

通过连接池访问的代码要这样写:
Context ctx = new InitialContext();
ConnectionPoolDataSource ds =
(ConnectionPoolDataSource)ctx.lookup("jdbc/DBPool");
pooledConnection pcon = ds.getPooledConnection("username", "password");

那么我当前的数据库访问方式到底是通过数据源呢还是连接池?

=======================================================================
有大虾帮忙解答疑惑吗????





...全文
90 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
pirateRocy 2003-08-24
  • 打赏
  • 举报
回复
up
joy_wind 2003-08-24
  • 打赏
  • 举报
回复
1)我曾经用过weblogic的数据库连接池,初始连接数设为3,当我weblogic启动后,我在SQLServer的企业管理器中能看到当前有3个连接。但是,我用上面的设置启动tomcat后,SQLServer的企业管理器中看不到连接。这是为什么????

答:按照你的配置,连接应该是从池中取的。可能tomcat连接池不建立初始连接,所以你在sqlserver管理器中看不到数据库连接。

2)DataSource 应该表示数据源的一个接口,好象和连接池没有关系吧?

答:javax.sql.DataSource是jdbc2定义的一个接口,它是一个工厂对象,用于创建数据库连接。你说的对,它和连接池没有直接的关系。但是由于它是一个接口,你在实现它的getConnection()方法时可以直接创建一个数据库连接并返回,但也可以实现成一个连接池,并从池中返回一个连接。实际上许多厂商的DataSource正是这么做的。在你的例子中,你用的是org.apache.commons.dbcp.BasicDataSourceFactory,它就能返回一个jakarta实现的DataSource(当然,是一个javax.sql.DataSource,只是实现方式被隐藏了),这个DataSource就是一个连接池的实现。所以,请确信你已经用到连接池了。

>>>>>因为microsoft sqlserver2000 driver for jdbc的帮助文档上明确写着,上面的访问数据库的方法是通过DataSource,而不是connection pool.

答:如上所述,通过DataSource得到的连接就是从一个connection pool中取得的连接,只是连接池的实现被隐藏了,而只暴露出javax.sql.DataSource接口(不错吧,这正是java语言设计的巧妙之处:大量采用接口,让各厂商添加自己的实现,比如你的DataSource用连接池,而我的DataSource可以不用)。
gboy2003 2003-08-22
  • 打赏
  • 举报
回复
up
Sundery 2003-08-22
  • 打赏
  • 举报
回复
应该是:

jsp-->数据源--〉连接池
diewikwang 2003-08-22
  • 打赏
  • 举报
回复
数据源。至于这个源下面是否使用了连接池跟tomcat的实现有关,我不知道,
我对tomcat不是太熟悉。
eaglecoody 2003-08-22
  • 打赏
  • 举报
回复
up
pirateRocy 2003-08-22
  • 打赏
  • 举报
回复
怎么没有人回答呢?那怕是帮我UP一下。
pirateRocy 2003-08-22
  • 打赏
  • 举报
回复
请针对我提出的二个问题回答,谢谢!

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧