有个项目,使用了SmartGwtEE,并且直接采用了SmartGwtEE所提供的SqlDataSource。
这样做的好处是可以利用它提供的 admin console 和 develop tools来直接定义ds.xml文件,
只要事先做好数据库的设计,就很容易的自动生成所需要的ds.xml。
开发都没问题,到要部署的时候,做了一下压力测试,麻烦就来了。似乎缺省的配置里面,
SqlDataSource就不使用连接池。虽然搜了一下smartgwt的论坛,它里面是说应该是自带了
连接池,但是最大连接数什么的没法设置。
现象就是,在pl/sql里面查询 v$session,发现来自那个应用服务器的连接数,最开始是5个,看起来
像是有连接池的样子,但是只要有人访问它,连接数就变成0。而且,经常发生变化,通过netstat -an
在应用服务器上看,也是看到了一堆的 1521连接,都处于TIME_WAIT状态。因此,判断还是由于
连接池没有起到作用。
重新用smartgwtee提供的datasource admin console,定义的时候是可以选择使用连接池的,
相应的server.properties也修改了,但是就是不起作用,经常是无法建立连接,报错
Io 异常: The Network Adapter could not establish the connection
从smartgwt论坛里面看到不少的人都有这样的问题,但是按照他们提供的办法都没有解决。
于是,考虑使用 jndi,而不是直接用DriverManager来访问数据库,毕竟在jndi定义的时候,
连接池的大小还是比较容易控制的。
应用服务器使用的是jetty,所以定义jndi比较容易。在WEB-INF下新建一个jetty-web.xml文件,里面
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure class="org.mortbay.jetty.webapp.WebAppContext">
<New id="db" class="org.mortbay.jetty.plus.naming.Resource">
<Arg></Arg>
<Arg>jdbc/db</Arg>
<Arg>
<New class="org.apache.commons.dbcp.BasicDataSource">
<Set name="driverClassName">oracle.jdbc.driver.OracleDriver</Set>
<Set name="url">jdbc:oracle:thin:@192.168.0.10:1521:sid</Set>
<Set name="username">***</Set>
<Set name="password">***</Set>
<Set name="initialSize">5</Set>
<Set name="maxActive">50</Set>
<Set name="maxIdle">10</Set>
<Set name="minIdle">3</Set>
<Set name="maxWait">60000</Set>
</New>
</Arg>
</New>
</Configure>
然后修改server.properties,设置为
sql.db.pool.enabled: true
sql.db.autoJoinTransactions: true
sql.db.interface.type: jndi
sql.db.database.type: oracle
sql.db.driver.name: jdbc/db
sql.db.driver.driverType: thin
sql.db.interface.credentialsInURL: true
然而,还是很不幸的发生了一个dbcp pool 与oracle不兼容的问题:
java.sql.SQLException: Already closed.
查了一下,觉得可能是版本不兼容,于是把commons-dbcp从1.2.2换成了1.4,感觉问题都解决了。
但是一上压力测试,发现连接数不够了,加的再大也不够,感觉就是所有的连接都没有释放。然后想了
一下,应该是jndi这里已经是个池了,但是我在server.properties里面又定义了 sql.db.pool.enabled: true
于是smartgwtee本身就不释放连接,于是在jndi那里,连接就都没关闭,于是将这一行修改为
sql.db.pool.enabled: false
终于一切都ok了,上100个并发感觉也还正常,总算解决了。
分享到:
相关推荐
SqlDataSource控件是ASP.NET Web开发中处理数据库操作的关键组件之一。它不仅简化了数据库操作的复杂性,还提供了强大的数据绑定功能,能够与各种数据绑定控件(如GridView、DropDownList等)无缝集成,从而提高Web...
天轰穿系列教程之-29SqlDataSource天轰穿系列教程之-29SqlDataSource天轰穿系列教程之-29SqlDataSource天轰穿系列教程之-29SqlDataSource天轰穿系列教程之-29SqlDataSource天轰穿系列教程之-29SqlDataSource天轰穿...
SqlDataSource控件是数据源控件的一种,它通过ADO.NET直接连接到SQL Server数据库,并执行SQL命令或存储过程。它的主要优点在于简化了数据绑定过程,使得页面可以直接与数据库进行交互,而无需额外的代码处理。 1. ...
2. **配置SqlDataSource控件**:在ASP.NET页面上添加SqlDataSource控件,并在后台代码或Web.config文件中设置连接字符串。例如,在ASP.NET代码中: ```asp.net <asp:SqlDataSource ID="SqlDataSource1" runat=...
3. **SqlDataSource**: SqlDataSource是ASP.NET中的数据源控件,可以直接连接到SQL Server数据库,执行SQL查询、存储过程等,为GridView和FormView等提供数据。在练习中,SqlDataSource1和SqlDataSource2分别用于...
"SqlDataSource、GridView、DetailsView显示、编辑、删除数据" 在 Web 应用开发中,显示、编辑、删除数据是最基本的操作。为了实现这些操作,我们需要使用三个控件:SqlDataSource、GridView 和 DetailsView。下面...
描述部分说明了直接使用AccessDataSource连接带密码的Access数据库可能遇到的问题,并推荐了一个替代方案,即使用SqlDataSource连接Access数据。文章还提到了作者为了解决问题所付出的努力,暗示了问题的难度和替代...
SqlDataSource控件是ASP.NET 2.0引入的数据源控件之一,它简化了与SQL Server数据库的交互,允许开发者在设计时配置数据库连接和SQL命令。这种方式特别适合初学者和快速原型开发,因为它极大地降低了编程复杂性。 ...
这个类将负责根据预定义的配置信息(例如在`Web.config`文件中的连接字符串)动态地创建SqlDataSource实例。在`Web.config`文件中,我们通常会有一个像`<appSettings>`标签内的键值对,用于存储数据库连接字符串,...
- **配置数据源**: 使用用户自定义的数据库连接字符串,该字符串存储在web.config文件中。 - **SqlQuery属性**: 设置SQL查询语句以从数据库中获取数据。 - **GridView控件**: - **ID**: gvStudent - **...
在ASP.NET 2.0中操作数据:使用SqlDataSource控件查询数据
当使用SqlDataSource控件选择数据时,可以从两个属性:ConnectionString和SelectCommand开始,如下所示:<asp:SqlDataSource ID=”MySourceControlName” Runat=”server”ConnectionString=”Server=MyServer ;...
- `sqlDataSource`: 使用C3P0连接池配置SQL Server的数据源。 - `driverClass`: 数据库驱动类。 - `jdbcUrl`: 数据库URL。 - `user`: 用户名。 - `password`: 密码。 - `autoCommitOnClose`: 自动提交设置。 ...
在ASP.NET 2.0中操作数据:使用SqlDataSource控件查询数据(源码)
在ASP.NET应用中,SQLDataSource控件提供了一种方便的方式来连接和操作SQL Server数据库。它支持多种数据操作,如选择、插入、更新和删除,并且可以配合缓存策略来优化性能。 1. 页面缓存(Output Cache):ASP.NET...
ASP.NET中的SQLDataSource控件是用于与数据库交互的内置组件,尤其适用于简单的数据绑定操作。在本示例中,我们看到它被用来连接并查询一个MySQL数据库。在ASP.NET环境中,如果你想要操作远程MySQL服务器,你需要...
SqlDataSource控件的ConnectionString属性需要配置为要查询的数据库的连接字符串。 2. **SelectCommand**:定义用于获取数据的SQL语句或存储过程名。SelectParameters用于设置查询所需的任何参数。 3. **...
SQLDataSource 该软件包将与的易用性结合在一起。v1.0.0中的重大更改在v1.0.0中,此库具有一个新的流畅接口,该接口可以与Knex很好地配合使用,并且更加符合Apollo DataSources的精神。 const query = this . knex ....