Cisco UCS Director Open Automation の手順書、リリース 5.4
オブジェクトの管理
オブジェクトの管理

オブジェクトの管理

この章は、次の項で構成されています。

オブジェクト ストア

オブジェクト ストアは、データベースの持続化のためにシンプルな API を提供します。データベースへのオブジェクトの持続化を必要とするモジュールは、通常、オブジェクト ストア API を使用してすべての CRUD(作成、読み取り、更新、削除)操作を実行します。

Cisco UCS Director では、データベースとして MySQL を使用します。プラットフォーム ランタイムは、DataNucleus が提供する Java Data Object(JDO)ライブラリを利用して、オブジェクト クエリ表現によってすべての SQL 操作を抽象化します。これにより、データの持続性について開発の簡素化、高速化が可能になります。オブジェクト ストアのマニュアルには、JDO を使用して CRUD 操作を行う方法を示す項も用意されています。


(注)  


このマニュアルで、POJO(Plain Old Java Object)という頭字語は、他のクラスを拡張しない、またはインターフェイスを実装しない Java クラスを指しています。

クラスへの持続性のマーキング

データベースで持続的に存在する必要がある POJO クラスは、JDO の適切な注釈を使用して定義し、マーキングする必要があります。次に示すクラスは、JDO の持続性を示すマーキングが付けられています。

このクラスでは、次の点に注意してください。

  • foo_netapp_filer がクラス宣言の先頭に付加されていること。

  • 使用するテーブルの名前を table 属性で指定していること。

  • foo はモジュールの名前であること。

  • 持続性が必要なフィールドに @Persistent が付加されていること。

     

package com.cloupia.lib.cIaaS.netapp.model;

@PersistenceCapable(detachable = "true", table = “foo_netapp_filer”)
public class  NetAppFiler
{
    @Persistent
    private String filerName;

    @Persistent
    private String accountName;
   
    @Persistent
    private String dcName;
}

前述のクラスには、@PersistenceCapable@Persistent の 2 つの注釈が使用されています。これらの持続性は JDO で定義されており、Cisco UCS Director プラットフォーム ランタイムでは、持続的なすべてのクラスがこれら 2 つの注釈でマーキングされると想定しています。JDO ではネストされたスキーマを作成でき、許可されてはいますが、Cisco UCS Director ではフラット スキーマを使用しているため、モジュールにネストされたスキーマを作成することは推奨されません。

次の作業

持続性クラスはデータベースに対する CRUD 操作に対応できるようになりました。

持続性クラスの公開

JDO の適切な注釈でマーキングされたクラスは公開して、プラットフォーム ランタイムがそのクラスを取得できるようにする必要があります。

手順
    ステップ 1   jdo.files という名前のファイルを、持続性クラスと同じディレクトリ(パッケージ)に作成します。
    ステップ 2   次の手順を実行して、クラスの名前をファイルに追加します。

    例:
    Linux# cat jdo.files
    
    // Copyright (C) 2010 Cisco Inc. All rights reserved.
    // 
    // Note: all blank lines and lines that start with // are ignored
    // 
    // Each package that has Persistable Objects shall have a file called jdo.files
    // Each line here indicates one class that represents a persistable object.
    // 
    // Any line that starts with a + means package name is relative to current package
    // If a line starts without +, then it must be complete fully qualified java class name 
    // (for example: com.cloupia.lib.xyz.MyClass)
    
    +NetAppFiler
    
    Linux#
    

    持続性クラスの CRUD 操作の実行

    持続性クラスでデータベースに対する CRUD 操作を実行できる場合、次の例に示すように、使用可能な各種操作を行うことができます。

    オブジェクトの新規インスタンスの作成

    NetAppFiler filer = new NetAppFiler();
    filer.setAccountName("netapp-account");
    filer.setDcName("Default Datacenter");
    filer.setfilerName("filer0");
    filer.setIpAddress("192.168.0.1");
        	
    ObjStore store = ObjStoreHelper.getStore(NetAppFiler.class);
        store.insert(filer);

    オブジェクトの単一インスタンスの変更

    ObjStore store = ObjStoreHelper.getStore(NetAppFiler.class);
    String query = "filerName == 'filer0'"; 
    //Use Java field names as parameter,
    
        // can use && , || operators in the query.
        store.modifySingleObject(query, filer);

    データベースからのすべてのインスタンスのクエリ

    ObjStore store = ObjStoreHelper.getStore(NetAppFiler.class);
    
    List filerList = store.queryAll();
    

    ファイラ クエリを使用したインスタンスのクエリ

    ObjStore store = ObjStoreHelper.getStore(NetAppFiler.class);
    
    String query = "dcName == 'Default Datacenter'";
    List filerList = store.query(query);