6.4. OSGi JDBC サービスの使用
OSGi Enterprise R6 仕様の第 125 章には、org.osgi.service.jdbc
パッケージの単一のインターフェイスが定義されています。これは、OSGi がデータソースを処理する方法です。
前述のように、java.sql.Driver
からプレーン java.sql.Connection
接続を直接取得できる可能性があります。
Generic org.osgi.service.jdbc.DataSourceFactory
org.osgi.service.jdbc.DataSourceFactory
の最も単純な実装は、mvn:org.ops4j.pax.jdbc/pax-jdbc/1.3.0
バンドルが提供する org.ops4j.pax.jdbc.impl.DriverDataSourceFactory
です。これはすべて、標準の Java™ ServiceLoader ユーティリティーの /META-INF/services/java.sql.Driver
記述子が含まれる可能性のあるバンドルを追跡するだけです。標準の JDBC ドライバーをインストールする場合、pax-jdbc
バンドルは java.sql.Driver.connect()
呼び出しを使用して接続を取得するために (直接ではなく) 使用できる DataSourceFactory
を登録します。
上記のコマンドは、登録までの手順の 1 つで、javax.sql.DataSource
サービスはまだ登録されません。上記の org.osgi.service.jdbc.DataSourceFactory
の中間サービスを使用して以下を取得できます。
-
java.sql.Driver
-
url
、user
およびpassword
のプロパティーをcreateDataSource()
メソッドに渡すjavax.sql.DataSource
。
データベース固有ではない pax-jdbc
で作成された汎用の org.osgi.service.jdbc.DataSourceFactory
から javax.sql.ConnectionPoolDataSource
または javax.sql.XADataSource
を取得できません。
mvn:org.postgresql/postgresql/42.2.5
バンドルは OSGi JDBC 仕様を正しく実装し、XA および ConnectionPool データソースを作成するメソッドを含む、実装されているすべてのメソッドで org.osgi.service.jdbc.DataSourceFactory
インスタンスを登録します。
データベース固有の 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
- …
これらのバンドルは、javax.sql.ConnectionPoolDataSource
および javax.sql.XADataSource
など、全種の ファクトリー を返すことができる、データベース固有の org.osgi.service.jdbc.DataSourceFactory
サービスを登録します。以下に例を示します。
6.4.1. PAX-JDBC 設定サービス リンクのコピーリンクがクリップボードにコピーされました!
pax-jdbc
(または pax-jdbc-mysql
、pax-jdbc-oracle
など) のバンドルでは、org.osgi.service.jdbc.DataSourceFactory
サービスを登録でき、それを使用して、指定のデータベースのデータソースを取得できます (「データベース固有のデータソースおよび汎用データソース」参照)。しかし、実際のデータソースはまだありません。
mvn:org.ops4j.pax.jdbc/pax-jdbc-config/1.3.0
バンドルは、以下の 2 つを行うマネージドサービスファクトリーを提供します。
メソッドを呼び出すために、
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 を追跡し、上記のメソッドに必要なプロパティーを収集します。たとえば、${karaf.etc}/org.ops4j.datasource-mysql.cfg
ファイルの作成など、Configuration Admin サービスで使用可能な任意の方法を使用して、ファクトリー設定 を作成する場合は、最終的な手順を実行して、実際のデータベース固有のデータソースを公開できます。
以下は、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 サービスバンドルと intermediary
org.osgi.service.jdbc.DataSourceFactory
を登録するpax-jdbc-mysql
バンドルをインストールします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow pax-jdbc
バンドルおよび、org.osgi.service.jdbc.DataSourceFactory
サービス およびorg.ops4j.datasource
ファクトリー PID を追跡するpax-jdbc-config
バンドルをインストールします。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. 処理されたプロパティーの概要 リンクのコピーリンクがクリップボードにコピーされました!
管理 ファクトリー 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 サービスなどのプロパティーとして、接頭辞を削除せずに追加されます。