OSGi 系列(十六)之 JDBC Service
OSGi 系列(十六)之 JDBC Service
compendium 规范提供了 org.osgi.service.jdbc.DataSourceFactory 服务
1. 快速入门
1.1 环境准备
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.core</artifactId>
<version>5.0.0</version>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.compendium</artifactId>
<version>5.0.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>org.ops4j.pax.jdbc</groupId>
<artifactId>pax-jdbc</artifactId>
<version>0.8.0</version>
</dependency>
1.2 获取连接
import java.sql.*;
import java.util.Properties;
import javax.sql.DataSource;
import org.osgi.service.jdbc.DataSourceFactory;
public class JDBCServiceDemo {
private DataSourceFactory dataSourceFactory;
public void setDataSourceFactory(DataSourceFactory dataSourceFactory) {
this.dataSourceFactory = dataSourceFactory;
}
public void jdbc()throws Exception {
System.out.println(dataSourceFactory);
Properties props = new Properties();
props.put(DataSourceFactory.JDBC_URL, "jdbc:mysql://localhost:3306/test?characterEncoding=utf-8");
props.put(DataSourceFactory.JDBC_USER, "root");
props.put(DataSourceFactory.JDBC_PASSWORD, "root");
DataSource ds = dataSourceFactory.createDataSource(props);
Connection conn = ds.getConnection();
//3、编写sql
String sql="select * from sys_user where id=?";
//4、创建语句执行者
PreparedStatement st = conn.prepareStatement(sql);
//5、设置参数
st.setString(1, "1");
//6、执行sql
ResultSet rs = st.executeQuery();
//7、处理结果
while(rs.next()){
System.out.println(rs.getString("id") + "=>" + rs.getString("username"));
}
//8、释放资源.
rs.close();
st.close();
System.out.println(conn);
System.out.println(conn.getCatalog());
conn.close();
}
}
1.3 OSGI-INF/blueprint 下配制 blueprint.xml
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
<reference id="dataSourceFactory" interface="org.osgi.service.jdbc.DataSourceFactory" filter="(osgi.jdbc.driver.class=com.mysql.jdbc.Driver)"/>
<bean class="com.edu.osgi.jdbc.JDBCServiceDemo" init-method="jdbc">
<property name="dataSourceFactory" ref="dataSourceFactory" />
</bean>
</blueprint>
1.4 karaf 测试
(1) 安装依赖
# 安装 mysql驱动
install -s mvn:mysql/mysql-connector-java/5.1.38
# 安装 osgi jdbc
install -s mvn:org.osgi/org.osgi.service.jdbc/1.0.0
# pax-jdbc 实现了 DataSourceFactory 服务
install -s mvn:org.ops4j.base/ops4j-base-spi/1.5.0
install -s mvn:org.ops4j.pax.jdbc/pax-jdbc/0.8.0
(2) 测试结果

安装 pax-jdbc 开启了 DataSourceFactory 服务

2. 补充说明
很多数据驱动已经实现了 DataSourceFactory 服务,如 postgresql
karaf 中安装 postgresql 的 DataSourceFactory 服务:
# osgi 规范
install -s mvn:org.osgi/org.osgi.service.jdbc/1.0.0
# 安装事务
feature:list | grep transaction
feature:install transaction
install -s mvn:org.postgresql/postgresql/9.4-1201-jdbc4
ls DataSourceFactory
可以看到 DataSourceFactory 服务已经开启。
OSGi 系列(十六)之 JDBC Service的更多相关文章
- OSGi 系列(六)之服务的使用
OSGi 系列(六)之服务的使用 1. 为什么使用服务 降低服务提供者和服务使用者直接的耦合,这样更容易重用组件 隐藏了服务的实现细节 支持多个服务的实现.这样你可以互换这实现 2. 服务的使用 2. ...
- S3C2416裸机开发系列十六_sd卡驱动实现
S3C2416裸机开发系列十六 sd卡驱动实现 象棋小子 1048272975 SD卡(Secure Digital Memory Card)具有体积小.容量大.传输数据快.可插拔.安全性好等长 ...
- 学习ASP.NET Core Razor 编程系列十六——排序
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
- 为什么不让用join?《死磕MySQL系列 十六》
大家好,我是咔咔 不期速成,日拱一卒 在平时开发工作中join的使用频率是非常高的,很多SQL优化博文也让把子查询改为join从而提升性能,但部分公司的DBA又不让用,那么使用join到底有什么问题呢 ...
- BizTalk开发系列(二十六) 使用Web Service
Web Service是在构建SOA平台中广泛使用的技术.在BizTalk开发过程中使用SOAP适配器接收和发送 Web Services 请求.业务流程可以发布为 Web Services 并使用外 ...
- ES系列十六、集群配置和维护管理
一.修改配置文件 1.节点配置 1.vim elasticsearch.yml # ======================== Elasticsearch Configuration ===== ...
- javaweb学习总结(三十六)——使用JDBC进行批处理
在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率. JDBC实现批处理有两种方式:statement和pr ...
- arcgis api for js入门开发系列十六迁徙流动图
最近公司有个arcgis api for js的项目,需要用到百度echarts迁徙图效果,而百度那个效果实现是结合百度地图的,怎么才能跟arcgis api结合呢,网上搜索,终于在github找到了 ...
- arcgis api 3.x for js 入门开发系列十六迁徙流动图
前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...
- MP实战系列(十六)之性能分析插件
性能分析拦截器,用于输出每条 SQL 语句及其执行时间. 虽然使用阿里的Druid连接池可以完成这个目的,但是,我们一般认为,目前的组件能够达到这个目的,尽量使用目前的组件,因为修改配置和引入第三方库 ...
随机推荐
- centos6.5 64安装ffmpeg过程支持转码mp3
百度了几个文章 大致知道了思路 首先yum源安装是木有的,只能编译安装了. 要安装ffmpeg要先安装一个yasm支持汇编优化(FFmpeg需要) 在安装一个lame,支持mp3的转码 那就是需要3步 ...
- 7.css实现三角形
1.效果: 2.代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- maven项目中的报错问题——Dynamic Web Module 3.0 requires Java 1.6 or newer.
转自:http://www.cnblogs.com/beppezhang/p/5919221.html maven项目中的报错问题——Dynamic Web Module 3.0 requires J ...
- Linux批量查询替换字符串
Linux 批量查询替换文本文件中的字符串: 1.批量查找某个目下文件的包含的内容,例如: # grep -rn "要找查找的文本" ./ 2.批量查找并替换文件内容. # ...
- vue深入了解组件——组件注册
一.组件名 在注册一个组件的时候,我们始终需要给它一个名字.比如在全局注册的时候我们已经看到了: Vue.component('my-component-name', { /* ... */ }) J ...
- 将Ctrl+Alt+Delete键进行屏蔽,防止误操作重启服务器
[root@bgw-t ~]# vi /etc/init/control-alt-delete.conf #exec /sbin/shutdown -r now "Control-Alt- ...
- How to Pronounce OF
How to Pronounce OF Tagged With: OF Reduction Study the OF reduction. There are many reductions in ...
- 输入N组父子对,求父子对所组成的二叉树的高度----17年某公司的笔试题
题目的大致意思如下: 输入N组数,一组数代表一个父子对(如,0 1,0代表父节点,1代表子节点),求这N组数所组成的二叉树的高度: 例如: 输入:6 0 1 0 2 1 3 1 4 2 5 ...
- kubectl 获取信息
获取pod所在节点的ip kubectlget po tiller-deploy-8694f8fddc-c2rql -n kube-system -o jsonpath='{.status.hostI ...
- php 过滤emoji
function filter_emoji_string($str){ $str = trim($str); $str = preg_replace_callback('/./u',function ...