6.4. 使用 OSGi JDBC 服务
chapter 125 of the OSGi Enterprise R6 规范在 org.osgi.service.jdbc
软件包中定义了单一接口。这是 OSGi 处理数据源的方式:
如前文所述,可以从 java.sql.Driver
直接获取普通 java.sql.Connection
连接。
Generic org.osgi.service.jdbc.DataSourceFactory
org.osgi.service.jdbc.DataSourceFactory
的最简单实现是 org.ops4j.pax.jdbc.impl.DriverDataSourceFactory
由 mvn:org.ops4j.pax.jdbc/pax-jdbc/1.3.0
捆绑包提供。所有这些都跟踪捆绑包,其中可能包括标准 Java™ ServiceLoader 工具的 /META-INF/services/java.sql.Driver
描述符。如果您安装任何标准 JDBC 驱动程序,pax-jdbc
捆绑包注册一个 DataSourceFactory
,它可以通过 java.sql.Driver.connect ()
调用来获取连接。
在上述命令中,javax.sql.DataSource
服务仍未注册,但您更接近一个步骤。以上中间的 org.osgi.service.jdbc.DataSourceFactory
服务可用于获取:
-
java.sql.Driver
-
javax.sql.DataSource
通过将属性传递:url
、
到用户和密码
createDataSource ()
方法。
您无法从非特定于数据库的 pax-
获取 jdbc
捆绑包创建的通用 org.sql.XADataSource 或 javax.sql.
XADataSourcejavax.sql.ConnectionPoolDataSource
或 javax.sql.XADataSource。
mvn:org.postgresql/postgresql/42.2.5
捆绑包可以正确地实现 OSGi JDBC 规格,并使用实施的所有方法注册 org.osgi.service.jdbc.DataSourceFactory
实例,包括创建 XA 和 ConnectionPool 数据源的方法。
特定于数据库的 org.osgi.service.jdbc.DataSourceFactory
实现
还有其他捆绑包,例如:
-
mvn:org.ops4j.pax.jdbc/pax-jdbc-mysql/1.3.0
-
mvn:org.ops4j.pax.jdbc/pax-jdbc-db2/1.3.0
- …
这些捆绑包注册特定于数据库的 org.osgi.service.jdbc.DataSourceFactory
服务,它可以返回所有类型的 工厂,包括 javax.sql.ConnectionPoolDataSource
和 javax.sql.XADataSource
。例如:
6.4.1. PAX- JDBC 配置服务 复制链接链接已复制到粘贴板!
使用 pax-jdbc
(或 pax-jdbc-mysql
,pax-jdbc-oracle
, …)捆绑包时,您可以注册 org.osgi.service.jdbc.DataSourceFactory
服务,可用于获取给定数据库的数据源(请参阅 第 6.2.1 节 “特定于数据库和通用数据源”)。但是还没有实际的数据源。
mvn:org.ops4j.pax.jdbc/pax-jdbc-config/1.3.0
捆绑包提供了一个受管服务工厂,它有两个操作:
跟踪
org.osgi.service.jdbc.DataSourceFactory
OSGi 服务,以调用其方法:public DataSource createDataSource(Properties props); public XADataSource createXADataSource(Properties props); public ConnectionPoolDataSource createConnectionPoolDataSource(Properties props);
public DataSource createDataSource(Properties props); public XADataSource createXADataSource(Properties props); public ConnectionPoolDataSource createConnectionPoolDataSource(Properties props);
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
跟踪
org.ops4j.datasource
工厂 PID,以收集以上方法所需的属性。如果您使用 Configuration Admin 服务的任何方法创建 工厂配置,例如,通过创建一个${karaf.etc}/org.ops4j.datasource-mysql.cfg
文件,您可以执行最终步骤来公开特定于数据库的实际数据源。
以下是从全新的 Fuse 安装开始的详细 规范 逐步指南。
您明确安装捆绑包而不是功能,以精确显示需要哪些捆绑包。为方便起见,PAX JDBC 项目提供了多种数据库产品和配置方法的功能。
使用
/META-INF/services/java.sql.Driver
安装 JDBC 驱动程序:karaf@root()> install -s mvn:mysql/mysql-connector-java/5.1.34 Bundle ID: 223
karaf@root()> install -s mvn:mysql/mysql-connector-java/5.1.34 Bundle ID: 223
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 安装 OSGi JDBC 服务捆绑包和
pax-jdbc-mysql
捆绑包,该捆绑包注册 中介org.osgi.service.jdbc.DataSourceFactory
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 安装
pax-jdbc
捆绑包和pax-jdbc-config
捆绑包,该捆绑包跟踪org.osgi.service.jdbc.DataSourceFactory
服务和org.ops4j.datasource
factory PIDs:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 工厂配置 (假设 MySQL 服务器正在运行):
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查
pax-jdbc-config
是否将配置处理到javax.sql.DataSource
服务中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
您现在有一个特定于数据库的实际(还没有池)数据源。您可以已经注入需要它的位置。例如,您可以使用 Karaf 命令查询数据库:
在上例中,您可以看到 MySQL 警告。这不是一个问题。可以提供任何属性(不仅是 OSGi JDBC 特定属性):
6.4.2. 处理的属性摘要 复制链接链接已复制到粘贴板!
admin factory PID 配置中的属性传递给相关的 org.osgi.service.jdbc.DataSourceFactory
实现。
generic
org.ops4j.pax.jdbc.impl.DriverDataSourceFactory
properties:
-
url
-
user
-
password
DB2
org.ops4j.pax.jdbc.db2.impl.DB2DataSourceFactory
属性包括这些实现类的所有 bean 属性:
-
com.ibm.db2.jcc.DB2SimpleDataSource
-
com.ibm.db2.jcc.DB2ConnectionPoolDataSource
-
com.ibm.db2.jcc.DB2XADataSource
PostgreSQL
Nnative org.postgresql.osgi.PGDataSourceFactory
属性包括 org.postgresql.PGProperty
中指定的所有属性。
HSQLDB
org.ops4j.pax.jdbc.hsqldb.impl.HsqldbDataSourceFactory
properties:
-
url
-
user
-
password
-
databaseName
的所有 bean 属性
-
org.hsqldb.jdbc.JDBCDataSource
-
org.hsqldb.jdbc.pool.JDBCPooledDataSource
-
org.hsqldb.jdbc.pool.JDBCXADataSource
-
SQL Server 和 Sybase
org.ops4j.pax.jdbc.jtds.impl.JTDSDataSourceFactory
属性包括 net.sourceforge.jtds.jdbcx.JtdsDataSource
的所有 bean 属性。
SQL Server
org.ops4j.pax.jdbc.mssql.impl.MSSQLDataSourceFactory
属性:
-
url
-
user
-
password
-
databaseName
-
serverName
-
portNumber
的所有 bean 属性
-
com.microsoft.sqlserver.jdbc.SQLServerDataSource
-
com.microsoft.sqlserver.jdbc.SQLServerConnectionPoolDataSource
-
com.microsoft.sqlserver.jdbc.SQLServerXADataSource
-
MySQL
org.ops4j.pax.jdbc.mysql.impl.MysqlDataSourceFactory
properties:
-
url
-
user
-
password
-
databaseName
-
serverName
-
portNumber
的所有 bean 属性
-
com.mysql.jdbc.jdbc2.optional.MysqlDataSource
-
com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource
-
com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
-
Oracle
org.ops4j.pax.jdbc.oracle.impl.OracleDataSourceFactory
properties:
-
url
-
databaseName
-
serverName
-
user
-
password
的所有 bean 属性
-
oracle.jdbc.pool.OracleDataSource
-
oracle.jdbc.pool.OracleConnectionPoolDataSource
-
oracle.jdbc.xa.client.OracleXADataSource
-
SQLite
org.ops4j.pax.jdbc.sqlite.impl.SqliteDataSourceFactory
properties:
-
url
-
databaseName
-
org.sqlite.SQLiteDataSource
的所有 bean 属性
6.4.3. pax-jdb-config 捆绑包如何处理属性 复制链接链接已复制到粘贴板!
pax-jdbc-config
捆绑包处理前缀为 jdbc 的属性。
所有这些属性都将删除这个前缀,剩余的名称将被传递。
下面是一个全新的 Fuse 安装开始的示例:
pax-jdbc-config
捆绑包需要这些属性:
-
osgi.jdbc.driver.name
-
dataSourceName
-
dataSourceType
查找并调用相关的 org.osgi.service.jdbc.DataSourceFactory
方法。前缀为 jdbc.
的属性会被传递(在删除前缀后),例如 org.osgi.service.jdbc.DataSourceFactory.createDataSource (properties)
。但是,会添加这些属性,而不删除前缀,如 javax.sql.DataSource
OSGi 服务的属性。