`
SimonLei
  • 浏览: 176148 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SmartGwtEE 之 SqlDataSource 的连接池

 
阅读更多

有个项目,使用了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个并发感觉也还正常,总算解决了。

0
0
分享到:
评论
2 楼 SimonLei 2013-07-08  
SmartGwtEE 是要钱的,不过有试用版。
1 楼 a137268431 2013-07-07  
弱弱的问下SmartGWTEE,用花钱吗?是不是 直接可以用 还是 有什么特殊的jar包,还是得花钱买吗?
直接用smartgwt的jar包是不是不好使。。。
请大神 回答下

相关推荐

    SqlDataSource

    SqlDataSource控件是ASP.NET Web开发中处理数据库操作的关键组件之一。它不仅简化了数据库操作的复杂性,还提供了强大的数据绑定功能,能够与各种数据绑定控件(如GridView、DropDownList等)无缝集成,从而提高Web...

    天轰穿系列教程之-29SqlDataSource

    天轰穿系列教程之-29SqlDataSource天轰穿系列教程之-29SqlDataSource天轰穿系列教程之-29SqlDataSource天轰穿系列教程之-29SqlDataSource天轰穿系列教程之-29SqlDataSource天轰穿系列教程之-29SqlDataSource天轰穿...

    SqlDataSource控件

    SqlDataSource控件是数据源控件的一种,它通过ADO.NET直接连接到SQL Server数据库,并执行SQL命令或存储过程。它的主要优点在于简化了数据绑定过程,使得页面可以直接与数据库进行交互,而无需额外的代码处理。 1. ...

    ASP.NET SqlDataSource To Access

    2. **配置SqlDataSource控件**:在ASP.NET页面上添加SqlDataSource控件,并在后台代码或Web.config文件中设置连接字符串。例如,在ASP.NET代码中: ```asp.net &lt;asp:SqlDataSource ID="SqlDataSource1" runat=...

    GridView_+_FormView_+_SqlDataSource

    3. **SqlDataSource**: SqlDataSource是ASP.NET中的数据源控件,可以直接连接到SQL Server数据库,执行SQL查询、存储过程等,为GridView和FormView等提供数据。在练习中,SqlDataSource1和SqlDataSource2分别用于...

    SqlDataSource、GridView、DetailsView显示、编辑、删除数据

    "SqlDataSource、GridView、DetailsView显示、编辑、删除数据" 在 Web 应用开发中,显示、编辑、删除数据是最基本的操作。为了实现这些操作,我们需要使用三个控件:SqlDataSource、GridView 和 DetailsView。下面...

    SqlDataSource 链接Access 数据

    描述部分说明了直接使用AccessDataSource连接带密码的Access数据库可能遇到的问题,并推荐了一个替代方案,即使用SqlDataSource连接Access数据。文章还提到了作者为了解决问题所付出的努力,暗示了问题的难度和替代...

    vs2005 asp.net中使用SqlDataSource拖拉的方式实现数据增删改查操作

    SqlDataSource控件是ASP.NET 2.0引入的数据源控件之一,它简化了与SQL Server数据库的交互,允许开发者在设计时配置数据库连接和SQL命令。这种方式特别适合初学者和快速原型开发,因为它极大地降低了编程复杂性。 ...

    怎样实现在页面中一条语句就创建SqlDataSource

    这个类将负责根据预定义的配置信息(例如在`Web.config`文件中的连接字符串)动态地创建SqlDataSource实例。在`Web.config`文件中,我们通常会有一个像`&lt;appSettings&gt;`标签内的键值对,用于存储数据库连接字符串,...

    WEB应用开发 使用SqlDataSource、GridView实验报告

    - **配置数据源**: 使用用户自定义的数据库连接字符串,该字符串存储在web.config文件中。 - **SqlQuery属性**: 设置SQL查询语句以从数据库中获取数据。 - **GridView控件**: - **ID**: gvStudent - **...

    在ASP.NET 2.0中操作数据:使用SqlDataSource控件查询数据

    在ASP.NET 2.0中操作数据:使用SqlDataSource控件查询数据

    ASP.NET2.0数据库入门之SqlDataSource

    当使用SqlDataSource控件选择数据时,可以从两个属性:ConnectionString和SelectCommand开始,如下所示:<asp:SqlDataSource ID=”MySourceControlName” Runat=”server”ConnectionString=”Server=MyServer ;...

    ssh连接两个数据库

    - `sqlDataSource`: 使用C3P0连接池配置SQL Server的数据源。 - `driverClass`: 数据库驱动类。 - `jdbcUrl`: 数据库URL。 - `user`: 用户名。 - `password`: 密码。 - `autoCommitOnClose`: 自动提交设置。 ...

    在ASP.NET 2.0中操作数据:使用SqlDataSource控件查询数据(源码)

    在ASP.NET 2.0中操作数据:使用SqlDataSource控件查询数据(源码)

    sqlserver2005的缓存机制+.net SQLDATASOURCE的实现

    在ASP.NET应用中,SQLDataSource控件提供了一种方便的方式来连接和操作SQL Server数据库。它支持多种数据操作,如选择、插入、更新和删除,并且可以配合缓存策略来优化性能。 1. 页面缓存(Output Cache):ASP.NET...

    aspx中的mysql操作类sqldatasource使用示例分享

    ASP.NET中的SQLDataSource控件是用于与数据库交互的内置组件,尤其适用于简单的数据绑定操作。在本示例中,我们看到它被用来连接并查询一个MySQL数据库。在ASP.NET环境中,如果你想要操作远程MySQL服务器,你需要...

    在ASP.NET 2.0中操作数据之四十七:用SqlDataSource控件插入、更新、删除数据

    SqlDataSource控件的ConnectionString属性需要配置为要查询的数据库的连接字符串。 2. **SelectCommand**:定义用于获取数据的SQL语句或存储过程名。SelectParameters用于设置查询所需的任何参数。 3. **...

    SQLDataSource:用于Apollo GraphQL项目SQL DataSource

    SQLDataSource 该软件包将与的易用性结合在一起。v1.0.0中的重大更改在v1.0.0中,此库具有一个新的流畅接口,该接口可以与Knex很好地配合使用,并且更加符合Apollo DataSources的精神。 const query = this . knex ....

Global site tag (gtag.js) - Google Analytics