各製品の資料を入手。
詳細はこちら →Java のIBM Cloud Object Storage のデータエンティティを使用したObject-Relational Mapping (ORM)
Object-relational mapping (ORM) 技術により、リレーショナルデータソースの操作が容易になり、論理的なビジネスモデルと物理的なストレージモデルを橋渡しすることができます。このチュートリアルに従って、IBM Cloud Object Storage への接続をJava ベースのORM フレームワークであるHibernate に連携します。
最終更新日:2022-04-25
この記事で実現できるIBM Cloud Object Storage 連携のシナリオ
こんにちは!ウェブ担当の加藤です。マーケ関連のデータ分析や整備もやっています。
Hibernate を使用することで、オブジェクト指向のドメインモデルを従来のリレーショナルデータベースにマッピングすることができます。以下のチュートリアルでは、CData JDBC Driver for IBMCloudObjectStorage を使用し、Hibernate でIBM Cloud Object Storage リポジトリのORM を生成する方法を説明します。
この記事を通してEclipse がIDE として選択されていますが、CData JDBC Driver for IBMCloudObjectStorage はJava Runtime Environment をサポートするすべての 製品で機能します。Knowledge Base には、IntelliJ IDEA やNetBeans からIBM Cloud Object Storage に接続するためのチュートリアルがあります。
Hibernate をインストール
以下のステップに従って、Eclipse にHibernate プラグインをインストールします。
- Eclipse で、[Help]->[Install New Software]と進みます。
- Work With ボックスに[http://download.jboss.org/jbosstools/neon/stable/updates/] と入力します。
- フィルタボックスに、[Hibernate]と入力します。
- [Hibernate Tools]を選択します。

新しいプロジェクトを開始
以下のステップに従って、新しいプロジェクトにドライバーJARs を追加します。
- 新しいプロジェクトを作成します。プロジェクトタイプとして[Java Project]を選択し、[Next]をクリックします。プロジェクト名を入力し、[Finish]をクリックします。
- [project]を右クリックし、[Properties]を選択します。[Java Build Path]をクリックし、[Libraries]タブを開きます。
- [Add External JARs]をクリックし、インストールディレクトリのlib サブフォルダにあるcdata.jdbc.ibmcloudobjectstorage.jar ライブラリを追加します。
Hibernate 構成ファイルを追加
以下のステップに従って、IBM Cloud Object Storage に接続プロパティを構成します。
- [new project]で右クリックし、[New]->[Hibernate]->[Hibernate Configuration File (cfg.xml)]と進みます。
- 親フォルダとして[src]を選択し、[Next]をクリックします。
以下の値をインプットします。
- Hibernate version:5.2
- Database dialect:Derby
- Driver class: cdata.jdbc.ibmcloudobjectstorage.IBMCloudObjectStorageDriver
Connection URL:jdbc:ibmcloudobjectstorage: で始まり、セミコロンで区切られた接続プロパティのリストが続くJDBC URL
Cloud Object Storage 接続プロパティの取得・設定方法
Cloud Object Storage に接続する前に、Cloud Object Storage インスタンスを登録してCloud Object Storage API キーとCRN を取得していきます。
Cloud Object Storage の新規インスタンスの登録
IBM Cloud アカウントにCloud Object Storage がまだない場合は、以下の手順に従ってアカウントにSQL Query のインスタンスをインストールできます。
- IBM Cloud アカウントにログインします。
- Cloud Object Storage ページに移動して、インスタンス名を指定して「作成」をクリックします。Cloud Object Storage の新規インスタンスにリダイレクトされます。
API キー
API キーは以下の手順で取得できます。
- まずは、IBM Cloud アカウントにログインします。
- API キーページに移動します。
- 中央右隅のIBM Cloud APIキーの作成 をクリックして、新しいAPI キーを作成します。
- ポップアップウィンドウが表示されたら、API キーの名前を指定して作成をクリックします。ダッシュボードからはアクセスできなくなるため、API Key を控えておきましょう。
Cloud Object Storage CRN
デフォルトでは、CData 製品はCloud Object Storage CRN を自動で取得します。ただし、複数のアカウントがある場合は、CloudObjectStorageCRN を明示的に指定する必要があります。この値は、次の2つの方法で取得できます。
- Services ビューをクエリする。これにより、IBM Cloud Object Storage インスタンスとそれぞれのCRN がリストされます。
- IBM Cloud で直接CRN を見つける。これを行うには、IBM Cloud のダッシュボードに移動します。リソースリストで、ストレージからCloud Object Storage リソースを選択してCRN を取得します。
IBM Cloud Object Storage への接続
これで準備は完了です。以下の接続プロパティを設定してください。
- InitiateOAuth:GETANDREFRESH に設定。InitiateOAuth を使うと、OAuth 認証を繰り返す必要がなく、さらに自動でアクセストークンを設定できます。
- ApiKey:セットアップ中に控えたAPI キーを指定。
- CloudObjectStorageCRN(オプション):控えておいたCloud Object Storage のCRN に設定。Cloud Object Storage アカウントが複数ある場合のみ設定する必要があります。
プロパティを設定したら、これで接続設定は完了です。
ビルトイン接続文字列デザイナ
JDBC URL の構成については、IBM Cloud Object Storage JDBC Driver に組み込まれている接続文字列デザイナを使用してください。JAR ファイルのダブルクリック、またはコマンドラインからJAR ファイルを実行します。
java -jar cdata.jdbc.ibmcloudobjectstorage.jar
接続プロパティを入力し、接続文字列をクリップボードにコピーします。
以下は一般的なJDBC URL です。
jdbc:ibmcloudobjectstorage:ApiKey=myApiKey;CloudObjectStorageCRN=MyInstanceCRN;Region=myRegion;OAuthClientId=MyOAuthClientId;OAuthClientSecret=myOAuthClientSecret;
Hibernate のIBM Cloud Object Storage のデータへの接続
以下のステップに従って、前の手順で作成した構成を選択します。
- [Window]->[Open Perspective]->[Hibernate]と進み、Hibernate Configurations パースペクティブに切り替えます。
- [Hibernate Configurations]パネルで右クリックし、[Add Configuration]を選択します。
- Hibernate version を5.2に設定します。
- [Browse]ボタンをクリックし、[project]を選択します。
- [Configuration file]フィールドで、[Setup]->[Use Existing]とクリックし、(このデモのsrc フォルダー内にある)hibernate.cfg.xml ファイルを選択します。
- [Classpath tab]で、[User Entries]の下に何もなかった場合、[Add External JARS]をクリックしてドライバーjar をもう一度追加します。構成が完了したら、[OK]をクリックします。
- 新しく作成されたHibernate 構成ファイルのDatabase node を展開します。

IBM Cloud Object Storage のデータをリバースエンジニアリング
以下のステップに従って、reveng.xml 構成ファイルを生成します。アクセスするテーブルをオブジェクトとして指定します。
- Package Explorer に戻ります。
- プロジェクトを右クリックし、[New]->[Hibernate]->[Hibernate Reverse Engineering File (reveng.xml)]と進みます。[Next]をクリックします。
- 親フォルダとして[src]を選択し、[Next]をクリックします。
- [Console configuration drop-down]メニューで、上で作成した[Hibernate configuration]ファイルを選択し、[Refresh]をクリックします。
- ノードを展開し、リバースエンジニアリングするテーブルを選択します。完了したら、[Finish]をクリックします。

実行するためのHibernate を構成
以下のステップに従って、plain old Java objects (POJO) をIBM Cloud Object Storage テーブルに生成します。
- メニューバーから、[Run]->[Hibernate Code Generation]->[Hibernate Code Generation Configurations]と進みます。
- [Console configuration drop-down]メニューで、前のセクションで作成した[Hibernate configuration]ファイルを選択します。Output ディレクトリで[Browse]をクリックし、src を選択します。
- [JDBC Connection]チェックボックスから[Reverse Engineer]を有効にします。[Setup]ボタンをクリックし、[Use Existing]をクリックして(このデモのsrcフォルダ内にある) hibernate.reveng.xml ファイルの場所を選択します。
- [Exporters]タブで[Domain code (.java)]と[Hibernate XML Mappings (hbm.xml)]をチェックします。
- [Run]をクリックします。
POJO は、前のステップのリバースエンジニアリング設定に基づいて作成されます。
マッピングタグを挿入
生成したマッピングごとにhibernate.cfg.xml にマッピングタグを作成し、Hibernate がマッピングリソースを指定するようにする必要があります。hibernate.cfg.xml を開き、次のようにマッピングタグを挿入します。
cdata.ibmcloudobjectstorage.IBMCloudObjectStorageDriver
jdbc:ibmcloudobjectstorage:ApiKey=myApiKey;CloudObjectStorageCRN=MyInstanceCRN;Region=myRegion;OAuthClientId=MyOAuthClientId;OAuthClientSecret=myOAuthClientSecret;
org.hibernate.dialect.SQLServerDialect
SQLを実行
前の手順で作成したエンティティを使用して、IBM Cloud Object Storage のsearchを行うことができます。
import java.util.*;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;
public class App {
public static void main(final String[] args) {
Session session = new
Configuration().configure().buildSessionFactory().openSession();
String SELECT = "FROM Objects O WHERE Bucket = :Bucket";
Query q = session.createQuery(SELECT, Objects.class);
q.setParameter("Bucket","someBucket");
List<Objects> resultList = (List<Objects>) q.list();
for(Objects s: resultList){
System.out.println(s.getKey());
System.out.println(s.getEtag());
}
}
}