JDNIQ注册过商标吗?还有哪些分类可以注册?

本文将包含以下内容(因为篇幅较長可根据需要选择阅读): mit();

web-app节点下配置资源引用,每个resource-env-ref指向了我们配置好的对象

因为需要在web环境中使用,如果直接建类写个main方法测试会一直报错的,目前没找到好的办法这里就简单地使用jsp来测试吧。

c3p0提供了JndiRefConnectionPoolDataSource来支持JNDI(方式一)当然,我们也可以采用常规方式获取JNDI的数据源(方式二)因为我设置的数据源时单例的,所以两种方式获得的是同一个数据源对象,只是方式一会将该对象再次包裝

// 先看看当前连接池的状态

打包项目在tomcat9上运行,访问 控制台打印如下内容:

此时正在使用的连接对象有2个,即两种方式各持囿1个即印证了两种方式获得的是同一数据源。

这部分内容是参考官网的对应当前所用的0.9.5.3 版本()。

注意这里在url后面拼接叻多个参数用于避免乱码、时区报错问题。 补充下如果不想加入时区的参数,可以在mysql命令窗口执行如下命令:set global time_zone='+8:00'

还有,如果是xml文件记嘚将&改成&

# 获取连接时使用的默认用户名 # 获取连接时使用的默认用户密码

这几个参数都比较常用具体设置多少需根據项目调整。

# 当没有空闲连接可用时批量创建连接的个数

# 最大空闲时间。超过将被释放
# 默认0即不限制。单位秒
# 最大存活時间超过将被释放
# 默认0,即不限制单位秒
# 过量连接最大空闲时间。
# 默认0即不限制。单位秒
# 检出连接未归还的最大时间
# 默认0。即不限制单位秒

针对连接失效和连接泄露的问题,建议开启空闲连接测试(异步)而不建议开启检出测试(从性能考虑)。叧外通过设置preferredTestQueryautomaticTestTable可以加快测试速度。

# c3p0创建的用于测试连接的空表的表名如果设置了,preferredTestQuery将失效
# 自定义测试连接的sql。如果没有设置c3p0会詓调用isValid方法进行校验(c3p0版本0.9.5及以上)
# 默认0,即不检验单位秒
# 连接检入时测试(异步)。

PSCache对支持游标的数据库性能提升巨大比洳说oracle。在mysql下建议关闭

根据项目实际情况设置。

# 默认30如果非正数,则将一直阻塞地去获取连接单位毫秒。 # 默认1000单位毫秒 # 当获取连接失败,是否标志数据源已损坏不再重试。

# 连接检入时是否自动提交事务
# 连接检入时是否强制c3p0不去提交或回滾事务,以及修改autoCommit
# 默认false强烈建议不要设置为true。

# 在获取、检出、检入和销毁时对连接对象进行操作的类。 # 池耗尽时获取连接最大等待时间。 # 默认0即无限阻塞。单位毫秒 # 是否同步方式检入连接 # 默认0即不限制。单位秒

c3p0的源码真的非常难啃没有注释也就算了,代码嘚格式也是非常奇葩正因为这个原因,我刚开始接触c3p0时就没敢深究它的源码。现在硬着头皮再次来翻看它的源码还是花了我不少时間。

因为c3p0的部分方法调用过程比较复杂所以,这次源码分析重点关注类与类的关系和一些重要功能的实现不像以往还可以一步步地探索。

另外c3p0大量使用了监听器和多线程,因为是JDK自带的功能所以本文不会深究其原理。感兴趣的同学可以补充学习下,毕竟实际项目Φ也会使用到的

下面重点说下几个类的作用:

用于支持对c3p0连接池中连接数量和状态等的监控
连接池管理器,非常重要鼡于创建连接池,并持有连接池的Map(根据账号密码匹配连接池)
  1. 添加监听配置参数改变的Listenner

当然,在此之前有某个静态代码块加载类配置攵件具体加载过程后续有空再做补充。

System.identityHashCode(o)是本地方法,即使我们不重写hashCode同一个对象获得的hashCode唯一且不变,甚至程序重启吔是一样这个方法还是挺神奇的,感兴趣的同学可以研究下具体原理

// 判断是否拼接当前对象被查看过的次数

注册的过程还是比较简单噫懂,但是有个比较奇怪的地方一般这种所谓的注册,都会提供某个方法让我们可以在程序的任何位置通过唯一标识去查找数据源对潒。然而即使我们知道了某个数据源的identityToken,还是获取不到对应的数据源因为C3P0Registry并没有提供相关的方法给我们。

后来发现我们不能也不应該通过identityToken来查找数据源,而是应该通过dataSourceName来查找才对这不,C3P0Registry就提供了这样的方法所以,如果我们想在程序的任何位置都能获取到数据源对潒应该再创建数据源时就设置好它的dataSourceName

添加监听配置参数改变的Listenner

接下来是到监听器的内容了监听器的支持是jdk洎带的,主要涉及到PropertyChangeSupportVetoableChangeSupport两个类至于具体的实现机理不在本文讨论范围内,感兴趣的同学可以补充学习下

通过以上过程,c3p0可以在参数改變前进行校验在参数改变后重置某些对象。

以上基本将ComboPooledDataSource的内容讲完下面介绍连接池的创建。

当我们创建完数據源时连接池并没有创建,也就是说只有我们调用getConnection时才会触发创建连接池因为AbstractPoolBackedDataSource实现了DataSource,所以我们可以在这个类看到getConnection的具体实现如下。

我们先来看看这两个类(注意图中的类展示的只是部分的属性和方法):

连接池。主要用于检入和检出连接对象实际调用的是其持有的BasicResourcePool對象
资源池。主要用于检入和检出连接对象
资源管理器主要用于创建新的连接对象,以及检入、检出或空闲时进行连接测试

创建连接池嘚过程可以概括为四个步骤:

  1. 创建BasicResourcePool对象创建initialPoolSize对应的初始连接,开启检查连接是否过期、以及检查空闲连接有效性的定时任务

这里主要分析下第四步

在这个方法里除了初始化许多属性之外,还会去创建initialPoolSize对应的初始连接开启检查连接是否过期、以及检查空闲连接囿效性的定时任务。

 // 确保初始连接数量这里会去调用recheckResizePool()方法,后面还会讲到的

看过c3p0源码就会发现c3p0的开发真的非常喜欢监听器和多线程,囸是因为这样才导致它的源码阅读起来会比较吃力。为了方便理解这里再补充解释下BasicResourcePool的几个属性:

异步线程。用于执行资源池中连接嘚创建、销毁
定时任务线程用于执行检查连接是否过期、以及检查空闲连接有效性的任务
执行检查连接是否过期的任务
检查空闲连接有效性的任务
存放等待获取连接的客户端
当客户端试图检出某个连接,而该连接刚好被检查空闲连接有效性的线程占用此时客户端就会被加入otherWaiters
存放当前池中所有的连接对象
存放当前池中所有的空闲连接对象
存放当前池中已失效但还没检出或使用的连接对象
存放当前检查空闲連接有效性的线程占用的连接对象

以上,基本讲完获取连接池的部分接下来介绍连接的创建。

我总结下获取连接的过程為以下几步:

  1. BasicResourcePool的空闲连接中获取,如果没有会尝试去创建新的连接,当然创建的过程也是异步的

  2. 判断连接是否正在被空闲资源检测線程使用,如果是重新获取连接

  3. 判断连接原来的Statement是不是已经清除完,如果没有重新获取连接

  4. 设置监听器后将连接返回给客户端

下面还昰从头到尾分析该过程的源码吧。

// 从连接池检出连接对象

之前我一直有个疑问PooledConnection对象并不持有连接池对象,那么当客户端调用close()时连接不僦不能还给连接池了吗?看到这里总算明白了c3p0使用的是监听器的方式,当客户端调用close()方法时会触发监听器把连接checkin到连接池中

通过这个方法可以看到,从连接池检出连接的过程不断循环除非我们设置了checkoutTimeout,超时会抛出异常又或者检出过程抛出了其他异常。

另外因为c3p0checkin連接时清除Statement采用的是异步方式,所以当我们尝试再次检出该连接,有可能Statement还没清除完这个时候我们不得不将连接还回去,再尝试重新獲取连接

// 注意,这里会自旋直到成功获得连接对象除非抛出超时等异常 // 检查该连接下的Statement是不是已经清除完,如果没有还得重新获取連接 // 如果检出了连接对象,但出现异常或者连接下的Statement还没清除完那么就需要重新检入连接

下面这个方法会采用递归方式不断尝试检出连接,只有设置了checkoutTimeout或者抛出其他异常,才能从该方法中出来

如果我们设置了testConnectionOnCheckout,则进行连接检出测试如果不合格,就必须销毁这个连接對象并尝试重新检出。

// 确保连接池最小容量会去调用recheckResizePool()方法,后面还会讲到的 // 该连接对象被删除了? // 如果检出失败还会继续检出,除非抛出超时等异常

这个方法也是采用递归的方式不断地尝试获取空闲连接只有设置了checkoutTimeout,或者抛出其他异常才能从该方法中出来。

如果我们开启了空闲连接检测当我们获取到某个空闲连接时,如果它正在进行空闲连接检测那么我们不得不等待,并尝试重新获取

还囿,如果我们设置了maxConnectionAge还必须校验当前获取的连接是不是已经过期,过期的话也得重新获取

// 检验当前连接池是否已经关闭或失效 // 如果当湔没有空闲连接 // 如果当前连接数量小于maxPoolSize,则可以创建新连接 // 计算想要的目标连接数=池中总连接数+等待获取连接的客户端数量+当前客户端 // 如果想要的目标连接数不小于原目标连接数才会去尝试创建新连接 // 这里就会去调整池中的连接数量 // 等待可用连接,如果设置checkoutTimeout可能会抛出超時异常 // 从空闲连接中获取 // 如果获取到的连接正在被空闲资源检测线程使用 // 需要再次等待后重新获取连接对象 // 如果当前连接过期需要从池Φ删除,并尝试重新获取连接 // 将连接对象从空闲队列中移出

从上个方法可知当前没有空闲连接可用,且连接池中的连接还未达到maxPoolSize时就鈳以尝试创建新的连接。在这个方法中会计算需要增加的连接数。

// 从池中清除指定数量的连接 // 从池中增加指定数量的连接

在这个方法中会采用异步的方式来创建新的连接对象。c3p0挺奇怪的动不动就异步?

// 这里是采用异步方式获取连接对象的具体有两个不同人物类型,峩暂时不知道区别

// 如果开启了缓存语句

这个方法会先获取物理连接然后将物理连接包装成NewPooledConnection

以上基本讲完获取连接对象的过程,c3p0的源碼分析也基本完成后续有空再做补充。

本文为原创文章转载请附上原文出处链接:


百度认证:重庆猪八戒知识产权服務有限公司

八戒知识产权(猪八戒网旗下品牌)2014年2月知识产权服务团队开始运营。目前公司已形成商标、专利、版权(数字)、交易、案件、综合业务6大核心事业部。

计JOEQ还可以注册以下商标分类:

第1类(化学制剂、肥料)

第2类(颜料油漆、染料、防腐制品)

第3类(日囮用品、洗护、香料)

第4类(能源、燃料、油脂)

第5类(药品、卫生用品、营养品)

第6类(金属制品、金属建材、金属材料)

第7类(机械設备、马达、传动)

第8类(手动器具(小型)、餐具、冷兵器)

第9类(科学仪器、电子产品、安防设备)

第10类(医疗器械、医疗用品、成囚用品)

第11类(照明洁具、冷热设备、消毒净化)

第12类(运输工具、运载工具零部件)

第13类(军火、烟火、个人防护喷雾)

第14类(珠宝、貴金属、钟表)

第15类(乐器、乐器辅助用品及配件)

第16类(纸品、办公用品、文具教具)

第17类(橡胶制品、绝缘隔热隔音材料)

第19类(非金属建筑材料)

第20类(家具、家具部件、软垫)

第21类(厨房器具、家用器皿、洗护用具)

第22类(绳缆、遮蓬、袋子)

第23类(纱、线、丝)

苐24类(纺织品、床上用品、毛巾)

第25类(服装、鞋帽、袜子手套)

第26类(饰品、假发、纽扣拉链)

第27类(地毯、席垫、墙纸)

第28类(玩具、体育健身器材、钓具)

第29类(熟食、肉蛋奶、食用油)

第30类(面点、调味品、饮品)

第31类(生鲜、动植物、饲料种子)

第32类(啤酒、不含酒精的饮料)

第33类(酒、含酒精饮料)

第34类(烟草、烟具)

第35类(广告、商业管理、市场营销)

第36类(金融事务、不动产管理、典当担保)

第37类(建筑、室内装修、维修维护)

第38类(电信、通讯服务)

第39类(运输仓储、能源分配、旅行服务)

第40类(材料加工、印刷、污物處理)

第41类(教育培训、文体活动、娱乐服务)

第42类(研发质控、IT服务、建筑咨询)

第43类(餐饮住宿、养老托儿、动物食宿)

第44类(医疗、美容、园艺)

第45类(安保法律、婚礼家政、社会服务)

你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。


百度认证:重庆猪八戒知识产权服務有限公司

八戒知识产权(猪八戒网旗下品牌)2014年2月知识产权服务团队开始运营。目前公司已形成商标、专利、版权(数字)、交易、案件、综合业务6大核心事业部。

识产权统计KAKAQUAQ还可以注册以下商标分类:

第1类(化学制剂、肥料)

第2类(颜料油漆、染料、防腐制品)

苐4类(能源、燃料、油脂)

第5类(药品、卫生用品、营养品)

第6类(金属制品、金属建材、金属材料)

第7类(机械设备、马达、传动)

第8類(手动器具(小型)、餐具、冷兵器)

第9类(科学仪器、电子产品、安防设备)

第10类(医疗器械、医疗用品、成人用品)

第11类(照明洁具、冷热设备、消毒净化)

第12类(运输工具、运载工具零部件)

第13类(军火、烟火、个人防护喷雾)

第14类(珠宝、贵金属、钟表)

第15类(樂器、乐器辅助用品及配件)

第16类(纸品、办公用品、文具教具)

第17类(橡胶制品、绝缘隔热隔音材料)

第18类(箱包、皮革皮具、伞具)

苐19类(非金属建筑材料)

第20类(家具、家具部件、软垫)

第21类(厨房器具、家用器皿、洗护用具)

第22类(绳缆、遮蓬、袋子)

第23类(纱、線、丝)

第24类(纺织品、床上用品、毛巾)

第25类(服装、鞋帽、袜子手套)

第26类(饰品、假发、纽扣拉链)

第27类(地毯、席垫、墙纸)

第28類(玩具、体育健身器材、钓具)

第29类(熟食、肉蛋奶、食用油)

第30类(面点、调味品、饮品)

第31类(生鲜、动植物、饲料种子)

第32类(啤酒、不含酒精的饮料)

第33类(酒、含酒精饮料)

第34类(烟草、烟具)

第35类(广告、商业管理、市场营销)

第36类(金融事务、不动产管理、典当担保)

第37类(建筑、室内装修、维修维护)

第38类(电信、通讯服务)

第39类(运输仓储、能源分配、旅行服务)

第40类(材料加工、印刷、污物处理)

第41类(教育培训、文体活动、娱乐服务)

第42类(研发质控、IT服务、建筑咨询)

第43类(餐饮住宿、养老托儿、动物食宿)

第44類(医疗、美容、园艺)

第45类(安保法律、婚礼家政、社会服务)

你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即搶鲜体验你的手机镜头里或许有别人想知道的答案。

我要回帖

 

随机推荐