abstract class AbstractPoolBackedDataSource

extends PoolBackedDataSourceBase

implements PooledDataSource{

//.....

// dataSource.getConnection()所调用的就是该方法

//implementation of javax.sql.DataSource

public Connection getConnection() throws SQLException{

PooledConnection pc =

getPoolManager(). // 返回 C3P0PooledConnectionPoolManager

getPool(). // 返回 C3P0PooledConnectionPool

checkoutPooledConnection(); // 返回PooledConnection

return pc.getConnection();

}

//.....

}

class C3P0PooledConnectionPool{

// ....

public PooledConnection checkoutPooledConnection() throws SQLException{

//System.err.println(this + " -- CHECKOUT");

try

{

PooledConnection pc = (PooledConnection) this.checkoutAndMarkConnectionInUse();

pc.addConnectionEventListener( cl );

return pc;

}

catch (TimeoutException e)

{ throw SqlUtils.toSQLException("An attempt by a client to checkout a Connection has timed out.", e); }

catch (CannotAcquireResourceException e)

{ throw SqlUtils.toSQLException("Connections could not be acquired from the underlying database!", "08001", e); }

catch (Exception e)

{ throw SqlUtils.toSQLException(e); }

}

private Object checkoutAndMarkConnectionInUse() throws TimeoutException, CannotAcquireResourceException, ResourcePoolException, InterruptedException

{

Object out = null;

boolean success = false;

while (! success)

{

try

{

out = rp.checkoutResource( checkoutTimeout );

if (out instanceof AbstractC3P0PooledConnection)

{

// cast should succeed, because effectiveStatementCache implies c3p0 pooled Connections

AbstractC3P0PooledConnection acpc = (AbstractC3P0PooledConnection) out;

/*

*以下在获取物理连接的时候,PooledcConnection中注册的事件监听器会收到消息

*无论每次对connection的何种操作,PooledConnection都会收到来自驱动的消息,

*其中的钩子(hook)对象就会完成对Connection的回收

*/

Connection physicalConnection = acpc.getPhysicalConnection();

success = tryMarkPhysicalConnectionInUse(physicalConnection);

}

else

success = true; //we don't pool statements from non-c3p0 PooledConnections

}

finally

{

try { if (!success && out != null) rp.checkinResource( out );}

catch (Exception e) { logger.log(MLevel.WARNING, "Failed to check in a Connection that was unusable due to pending Statement closes.", e); }

}

}

return out;

}

//....

}

c3p0 服务启动获取连接超时_c3p0获取连接Connection后的Close()---释疑相关推荐

  1. 逆战网络连接断开连接服务器超时_逆战服务器连接超时 与服务器连接超时的原因...

    今天小编为大家带来了逆战服务器连接超时 与服务器连接超时的原因,感兴趣的朋友们可以跟着小编去下文了解一下哦! 很多玩家都碰到过这种问题,大多都是腾讯的TP安全防卫提示的这个消息,大家大可不必着急,出现 ...

  2. c3p0 服务启动获取连接超时_微服务架构中的熔断、降级

    微服务架构中熔断和降级是保证服务高可用的一项重要功能点,微服务区别于一体化项目的最大区别也再于熔断和降级,很多微服务项目的开发人员对熔断的理解就是当服务不可用的时候,为了让整体服务可以正常运行,需要让 ...

  3. c3p0 服务启动获取连接超时_JDBC数据库连接池

    连接池的本质是构建一个容器,容器是用来存创建好的线程,http连接.数据库连接.netty连接等 各个连接池的使用大致分为三个部分 1.首先是初始化连接池,根据设置相应的参数.连接池的大小.核心连接数 ...

  4. ftp文件服务器连接超时,ftp服务器连接成功 获取文件超时

    ftp服务器连接成功 获取文件超时 内容精选 换一换 有以下几种现象:将制作好的SD卡插入开发者板并上电后,开发者板LED1与LED2灯状态信息异常.将制作好的SD卡插入开发者板,并通过USB方式连接 ...

  5. c3p0获取连接Connection后的Close()---释疑

    论题: java c3p0获取连接Connnection 之后, 调用 con.close( ) 是否真的关闭了物理连接 ? 简答: c3p0采用连接池, 目的就是提前预置一定数量的连接, 在使用时候 ...

  6. sqlserver服务启动失败_条码打印软件连接SQL数据库出现TCP连接失败解决办法

    小编今天用条码打印软件连接SQL 数据库遇到了一个问题:通过端口1433连接到主机localhost的TCP/IP连接失败.错误:"Connection refused:connect.请验 ...

  7. 网页数据库服务器连接超时,数据库服务器连接超时

    数据库服务器连接超时 内容精选 换一换 执行以下步骤创建数据库连接:单击工具栏上的或按"Ctrl+N"连接到数据库服务器,弹出"新建/选择数据库连接"对话框.建 ...

  8. 连接超时计算机无法连接失败,爱思助手无法连接或者连接超时解决办法

    手机插入数据线连接电脑之后,打开爱思助手但是无法读取到设备或者显示设备连接超时的解决方法. 首先请确认: ①数据线和电脑USB接口正常状态 ②电脑端有安装最新版本iTu 手机插入数据线连接电脑之后,打 ...

  9. finalshell连接超时怎么解决_vncviewer连接超时,vncviewer连接超时怎么解决

    简单来说,vnc就是一个远程操作,这个远程操作可适用于Linux和windows两个操作系统.vnc viewer是一款远程控制的软件,一般用于远程解决电脑故障或软件调试.一般来说,当vncviewe ...

最新文章

  1. PHP---微信JS-SDK获取access_token/jsapi_ticket/signature权限签名算法,php/thinkphp实现微信分享自定义文字和图片...
  2. MATLAB读取excel文件中的数据
  3. DAGNN:有向无环图神经网络
  4. Storyboard中segue使用总结
  5. Mybatis入门 使用注解
  6. 重学java基础第十六课:jdk jre jvm
  7. unionall mysql_5分钟了解MySQL5.7union all用法的黑科技
  8. python regex_Python 正则表达式
  9. python自动备份手机_python实现自动备份windows应用数据
  10. 【Elasticsearch】es 的配置集合
  11. Asp.Net--回调技术
  12. c++ builder xe2 字符串转日期
  13. InitializeSecurityDescriptor、InitializeAcl、AddAccessAllowedAce、SetSecurityDescriptorDacl
  14. c语言五大常用算法,C语言------五大常用算法总结
  15. 计算机网络 校园网规划与设计方案,校园网设计方案—计算机网络课作业
  16. 网银打印回单显示服务器不能创建对象,打开应用弹出提示“Activex部件不能创建对象”的解决方法...
  17. 企业微信集成EAS流程助手
  18. OFDM载波间隔_LTE-子载波间隔与符号持续时长关系
  19. Vue+Vuex+Axios+ECharts 画一个动态更新的中国地图
  20. 安科瑞无线测温装置ARTM的功能特点有哪些

热门文章

  1. Android 学习--ListView 的使用(一)
  2. jdk集合常用方法分析之HashSet和TreeSet
  3. 【求助】Android开发中的数据持久化
  4. shell if condition
  5. 微软MCITP系列课程(十)WSUS服务器搭建
  6. iOS 编译百度地图静态库-合二为一
  7. 316. 去除重复字母
  8. 可以进行单元测试么_大量实例助攻,让你的单元测试更高效
  9. 女朋友跟你说晚安之后仍然在线,我用Python制作脚本成功征服
  10. 浏览器向服务器发送的消息称为,网络是怎样连接之浏览器的探索之旅读书笔记(一)...