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、user和passwordto thecreateDataSource ()方法。
您无法从非特定于数据库的 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.DataSourceFactoryOSGi 服务,以调用其方法: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: 223Copy 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.datasourcefactory 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 服务的属性。