osgi 学习系列(七)osgi数据库c3p0连接池

没用osgi框架开发之前习惯了用spring配置c3p0连接池连接oracle,配置数据库事务管理器,用ibatis操作数据,下面说下怎么在osgi中配置数据库连接,事务后面再介绍。在设计bundle时每个bundle只完成单一功能,保证每个bundle的高可复用性。下面的demo中会建3个bundle,现在bundle还很少,真正在开发的时候bundle会很多,hundle之前的依赖一定要在前期设计时理清楚,否则到后期很容易出现bundle之间的循环依赖。Demo里数据库操作是用ibatis写的,把ibatis提供的数据库访问封装了一层,如果没用过ibatis可以看数据库连接,然后自己配置需要的数据持久化框架和数据库。


com.ferry.daoService 创建数据库连接

com.ferry.databaseService 操作数据库

com.ferry.bussinessService 具体业务处理


<bean id="oracle_datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
		<property name="driverClass"><value> oracle.jdbc.driver.OracleDriver </value></property>
		<property name="jdbcUrl"><value>根据自己环境填写jdbcUrl</value></property>
		<property name="user"><value>根据自己环境填写user</value></property>
		<property name="password"><value>根据自己环境填写password</value></property> 
	
		<property name="minPoolSize"><value>10</value></property>
		<property name="maxPoolSize"><value>30</value></property>
		<property name="initialPoolSize"><value>10</value></property>
		<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 --> 
		<property name="acquireIncrement"><value>5</value></property>
		<!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 --> 
		<property name="acquireRetryAttempts"><value>10</value></property> 
		<!--两次连接中间隔时间,单位毫秒。Default: 1000 --> 
		<property name="acquireRetryDelay"><value>1000</value></property>
		<!--当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出 
				SQLException,如设为0则无限期等待。单位毫秒。Default: 0 --> 
		<property name="checkoutTimeout"><value>0</value></property>
		<!--每240秒检查所有连接池中的空闲连接。Default: 0 --> 
		<property name="idleConnectionTestPeriod"><value>240</value></property>
		<!--定义所有连接测试都执行的测试语句。在使用连接测试的情况下这个一显著提高测试速度。注意: 
  					测试的表必须在初始数据源的时候就存在。Default: null--> 
		<property name="preferredTestQuery"><value>select 1 from dual</value></property>
	</bean>

	<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
		<property name="configLocation">
			<value>/ORM_RESOURCES/sqlMapConfig.xml</value>
		</property>
	</bean>
	
	<bean id="sqlDao_i" class="com.ferry.daoService.impl.BatisGenericDao">
		<property name="dataSource">
			<ref local="oracle_datasource" />
		</property>
		<property name="sqlMapClient">
			<ref local="sqlMapClient" />
		</property>
	</bean>
	
	<osgi:service ref="sqlDao_i" interface="com.ferry.daoService.IbatisGenericDao"  />

用到的c3p0jar包不是基于osgi开发的,所以这里要osgi化,集体操作可以参考上一章

daoService依赖如下bundle


启动osgi后会报如下错,因为我们在上面的配置文件中将driverClass配置成oracle.jdbc.driver.OracleDriver,该类在classes12.jar包中,所以这里我们还要继续把这个包osgi化

java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver


在c3p0 bundle导入oracle.jdbc.driver包即可,运行后一切正常


输入命令后会看到如下显示,首先会根据配置建立数据库连接池,然后执行数据库操作


我们配置了minPoolSize为10,所以此时打开pl/sql的Sessions会看到一次建了10个连接


代码我就不贴出来了,想看具体代码可以自己下


用到的jar包

com.springsource.com.ibatis-2.3.4.726.jar

com.springsource.org.aopalliance-1.0.0.jar

jcl-over-slf4j-1.6.4.jar

logback-classic-1.0.0.jar

logback-core-1.0.0.jar

org.eclipse.equinox.ds_1.3.1.R37x_v20110701.jar

org.eclipse.equinox.util_1.0.300.v20110502.jar

org.eclipse.osgi.services_3.3.0.v20110513.jar

org.eclipse.osgi_3.7.2.v20120110-1415.jar

org.springframework.aop-2.5.6.SEC03.jar

org.springframework.beans-2.5.6.SEC03.jar

org.springframework.context-2.5.6.SEC03.jar

org.springframework.core-2.5.6.SEC03.jar

org.springframework.jdbc-2.5.6.SEC03.jar

org.springframework.orm-2.5.6.SEC03.jar

org.springframework.transaction-2.5.6.SEC03.jar

slf4j-api-1.6.4.jar

spring-osgi-core-1.2.1.jar

spring-osgi-extender-1.2.1.jar

spring-osgi-io-1.2.1.jar

spring-osgi-mock-1.2.1.jar

点击下载demo代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值