首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SQLServerXADataSource的连接池

使用SQLServerXADataSource的连接池
EN

Stack Overflow用户
提问于 2016-02-09 11:01:00
回答 2查看 1.5K关注 0票数 2

SQLServerXADataSource接口的文档说明,它提供连接池,每当客户端完成连接时,都应该调用close()方法;在这种情况下,连接不会关闭,而是返回到池中。我正在尝试这个,但是下一次我尝试连接时,它说连接已经关闭了。如何使用此接口实现连接池?

提供连接的类是:

代码语言:javascript
复制
public class ConnectionPool {
   SQLServerXADataSource ds;
   Decoder dec = Base64.getDecoder();
   Connection connection = null;

   public ConnectionPool(InputStream inputStream) throws Exception {
    ds = new SQLServerXADataSource();
    boolean res = Config.load(inputStream);
    if (res) {
        ds.setServerName(Config.SQL_SERVER());
        ds.setDatabaseName(Config.SQL_DB_NAME());
        ds.setIntegratedSecurity(Config.SQL_INTEGRATED_SECURITY());
        ds.setPortNumber(Config.SQL_PORT());
        if (!Config.SQL_INTEGRATED_SECURITY()) {
            ds.setUser(Config.SQL_USERNAME());
            ds.setPassword(new String(dec.decode(Config.SQL_USER_PASSWORD())));
           }
       } else {
           throw new Exception("Failed to load parameters.");
       }
       connection = ds.getConnection();
   }

   public Connection getConnection() throws SQLServerException {
       return this.connection;
   }
}

在创建ConnectionPool对象之后(当用户登录时),我将其保存为会话属性,以便servlet能够在需要时获得它。

请提供一个利用此接口在web应用程序中实现连接池的示例。我知道我做得不对,但我不知道问题出在哪里。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-09 13:57:17

您将在构造函数中创建一次连接。如果关闭此连接,则关闭此连接(即使物理句柄返回到连接池)。相反,您的getConnection方法应该执行如下操作:

代码语言:javascript
复制
public Connection getConnection() throws SQLServerException {
    return ds.getConnection();
}

或者更好的是:只提供对数据源本身的访问,而不是引入不必要的包装器。

然而,据我所知,SQLServerXADataSource,而不是,是连接池。它是XA连接的工厂(您在代码示例中没有使用它),也扩展了SQLServerConnectionPoolDataSource (它是连接池使用的连接工厂,而不是连接池本身)。

Java的方法是定义一个JNDI数据源(可以使用SQLServerXADataSourceSQLServerConnectionPoolDataSource作为其工厂),然后从JNDI注入(或获取)该数据源。

票数 2
EN

Stack Overflow用户

发布于 2016-02-09 11:20:02

数据库可能会关闭连接,这不是连接池的正确实现。如果您想了解有关连接池的更多信息,可以阅读commons-dbcp项目或c3p0。这里是实现连接池的数据源的示例

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35290315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档