LoginSignup
6
8

More than 5 years have passed since last update.

Bluemix の Object Storage サービスに Java からアクセスしてみた

Last updated at Posted at 2016-10-30

Object Storage とは

Bluemixのドキュメントを意訳すると「ストレージ・サービスの1種で、ストレージに保持されたオブジェクトを特定するためにメタデータを利用でき、検索しやすく大量のデータであっても早い。」

SoftLayer 上の Swift と言うオブジェクトストレージ機能に Bluemix を介してアクセスできる。

オブジェクトの例:

sample.json

{
    "objects": [{
        "hash": "aca9042b00021ad60807d4e8e418b207",
        "last_modified": "2016-10-28T09:31:37.401250",
        "bytes": 8512,
        "name": "cflogs.txt",
        "content_type": "text/plain"
    }],
    "objectCount": 1,
    "bytesUsed": 8512
}

構成

OS_howitworks.png

環境

Bluemix(Liberty for Java)
openstack4J 3.0.2 (Mavenリポジトリーはこちら)

コーディング

OpenStack4Jのドキュメントである以下2つを参照。
- Authenticate
- Object Storage (Swift)

以下でつまづくも、残りは難なく。

  • クラスローダー
  • Jacksonのバージョン

つまづいたところ詳細

  • クラスローダー

Liberty の利用する Jackson ライブラリーのバージョンと
OpenStack4J の利用する Jackson ライブラリーのバージョンが合わず、
authenticate しようとすると NullPointerException

トラブルシューティングにも書いてあったため、
クラスローダーポリシーを parentLastに変更

server.xml
    <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 のライブラリーを追加してみる

pom.xml
        <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を介したときの制約か。

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8