有个项目,使用了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连接数据库、操纵数据、GridView显示数据并结合SQLdataSource管理数据
天轰穿系列教程之-29SqlDataSource天轰穿系列教程之-29SqlDataSource天轰穿系列教程之-29SqlDataSource天轰穿系列教程之-29SqlDataSource天轰穿系列教程之-29SqlDataSource天轰穿系列教程之-29SqlDataSource天轰穿...
使用SqlDataSource控件操作数据库实验报告
GridView_+_FormView_+_SqlDataSource
ASP.NET SqlDataSource To AccessASP.NET SqlDataSource To Access
SqlDataSource控件(增、删、改、查)是使用
SqlDataSource、GridView、DetailsView显示、编辑、删除数据
<appSettings> <connectionStrings> <add name=”ConnectionString” connectionString=”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\good.mdb;Persist Security Info=True;...
当使用SqlDataSource控件选择数据时,可以从两个属性:ConnectionString和SelectCommand开始,如下所示:<asp:SqlDataSource ID=”MySourceControlName” Runat=”server”ConnectionString=”Server=MyServer ;...
在ASP.NET 2.0中操作数据:使用SqlDataSource控件查询数据
教学视频 在vs2005 asp.net中 不写一行代码 通过使用SqlDataSource 用拖拉的方式实现数据增删改查操作
在ASP.NET 2.0中操作数据:使用SqlDataSource控件查询数据(源码)
实验7-1 使用GridView控件显示数据 实验7-2 使用GridView控件显示数据,自定义显示列 实验7-3 GridView控件实现删除数据 实验7-4 使用GridView控件编辑数据 实验7-5 使用GridView控件编辑数据,性别使用单选按钮列表...
SQLDataSource 该软件包将与的易用性结合在一起。v1.0.0中的重大更改在v1.0.0中,此库具有一个新的流畅接口,该接口可以与Knex很好地配合使用,并且更加符合Apollo DataSources的精神。 const query = this . knex ....
怎样实现在页面中一条语句就创建SqlDataSource
本文主要介绍使用SqlDataSource控件完成插入、更新、删除数据等操作,通过设置向导,SqlDataSource控件的InsertCommand, UpdateCommand和DeleteCommand属性都会被赋以相应的 INSERT, UPDATE和DELETE SQL语句,从而...
服务器装了mysql odbc驱动,想在那个iis上操作另一个服务器的mysql,找到个.net的sqldatasource类可以操作mysql,下在把使用方法分享一下
在前面的教程里,我们用ObjectDataSource控件充分的将表现层和数据访问层(DAL)分开来。在这篇教程里我们看看怎样在一个表现层和数据访问层区分的不是很严格的简单程序中使用SqlDataSource控件。