#Object Storage とは
Bluemixのドキュメントを意訳すると「ストレージ・サービスの1種で、ストレージに保持されたオブジェクトを特定するためにメタデータを利用でき、検索しやすく大量のデータであっても早い。」
SoftLayer 上の Swift と言うオブジェクトストレージ機能に Bluemix を介してアクセスできる。
オブジェクトの例:
{
"objects": [{
"hash": "aca9042b00021ad60807d4e8e418b207",
"last_modified": "2016-10-28T09:31:37.401250",
"bytes": 8512,
"name": "cflogs.txt",
"content_type": "text/plain"
}],
"objectCount": 1,
"bytesUsed": 8512
}
#環境
Bluemix(Liberty for Java)
openstack4J 3.0.2 (Mavenリポジトリーはこちら)
#コーディング
OpenStack4Jのドキュメントである以下2つを参照。
以下でつまづくも、残りは難なく。
- クラスローダー
- Jacksonのバージョン
#つまづいたところ詳細
- クラスローダー
Liberty の利用する Jackson ライブラリーのバージョンと
OpenStack4J の利用する Jackson ライブラリーのバージョンが合わず、
authenticate しようとすると NullPointerException
トラブルシューティングにも書いてあったため、
クラスローダーポリシーを parentLastに変更
<webApplication id="object-storage-sample" location="object-storage-sample.war" name="object-storage-sample">
<classloader delegation="parentLast"/>
</webApplication>
ヌルポは解消。
今度は以下のエラー:
java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.ObjectReader.forType
- Jacksonのバージョン
openstack4j の利用している jackson のバージョンが 2.7.3 だが、不整合があるらしい
2.6.3 のライブラリーを追加してみる
<dependency>
<groupId>org.pacesys</groupId>
<artifactId>openstack4j</artifactId>
<version>3.0.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.6.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.6.3</version>
</dependency>
これで一旦動くようになった。詳細はもっと調べたいが、一旦ここで切り上げ。
#備考
Region や domain, project といった OpenStack の概念(詳しくは用語集参照)は、当サービスを作成したタイミングで自動的に作成され、プログラムから追加・変更することはできなかった。role も同じ。Bluemixを介したときの制約か。