CA Spectrum 開発キット

内容
casp1032jp
内容
CA Spectrum
Java ドキュメントへのアクセス
開発 API Java ドキュメントは、
SPECTRUM Development API
の重要部分です。
開発 API Java ドキュメントにアクセスする方法
  1. ブラウザで <
    $SPECROOT
    >/SDK/docs/SSORB/index.html ファイルを開き、Packages の下の com.aprisma.spectrum.core.idl をクリックします。
    インターフェース サマリおよびクラス サマリが表示されます。
  2. サマリの下のリンクをクリックします。
    インターフェースまたはクラスの説明が表示されます。
  3. 説明までスクロールします。
    フィールド、コンストラクタ、およびメソッドのサマリが表示されます。[Method Summary (メソッド サマリ)]の下にメソッドの説明が表示されます。
  4. メソッドのリンクをクリックします。
    [Method Detail (メソッドの詳細)]セクションが表示されます。
注:
 サンプル コードは <
$SPECROOT
>/SDK/examples/SSORB/DevelopmentAPI にあります。
Java の権限
次のように権限を設定する必要があります。
  • java.util.PropertyPermission: 読み取り権限と書き込み権限の両方を設定します。
  • java.lang.RuntimePermission: setContextClassLoader を使用します。
開発するアプリケーションに応じて、追加の権限を設定する必要があります。たとえば、プロパティ ファイルを読み取ったり、ログ ファイルに書き込んだりするには、ファイル権限を設定する必要があります。
モデル ドメイン ID
CA Spectrum
環境の各
SpectroSERVER
には、次のように一意の ID と名前を持つモデル ドメインがあります。
  • 一意の ID は、
    CA Spectrum
    の用語で
    ランドスケープ ハンドル
    と呼ばれるエンティティです。
  • 一意の名前は、
    SpectroSERVER
    ホスト システムの DNS またはネットワーク名です。
  • GetDomainID プログラムは、モデル ドメイン名を使用して、モデル ドメイン ID を取得し、表示します。この実行で、GetDomainID は、以下の関数も実行します。
  • CA Spectrum
    CORBA サービスへのバインド
  • (オプション)セキュリティの設定
作成するすべてのプログラムで、これらの関数を実行する必要があります。
サービス バインド
CORBA は、
CA Spectrum
のバインド処理を簡単にするためのヘルパー オブジェクトを提供しています。CORBAHelper クラスは、CORBA ORB をカプセル化し、CORBA オブジェクトを見つけてアドバタイズするためのヘルパー メソッドを提供します。このクラスの目的は、CORBA オブジェクトのアドバタイズの ORB ベンダー固有メソッドを非表示にすることです。CORBAHelper は抽象クラスです。静的メソッドのいずれかによって、ベンダー固有の実装を取得できます。
注:
 com.aprisma.util.corba パッケージから CORBAHelper クラスをインポートする必要があります。
CORBAHelper クラスは、以下のプロパティを定義します。
  • LOGIN_USERNAME (user.name)
    ユーザ名を定義します。
    注:
     user.name は、起動時にシステム プロパティに設定されますが、Supplied Properties (提供されたプロパティ)で上書きすることができます。
  • LOGIN_APPNAME (CORBAHelper.AppName)
    アプリケーション名を定義します。
  • LOGIN_SUBAPPNAME (CORBAHelper.SubAppName)
    サブ アプリケーション名を定義します。
  • LOGIN_APPVERSION (CORBAHelper.AppVersion)
    アプリケーションのバージョンを定義します。
  • LOGIN_PASSWORD (CORBAHelper.password)
    ユーザのパスワードを定義します。
注:
 以前のすべてのプロパティで、SSORB 通信に対して、対応する CsApplicationInfo フィールドが設定されます。
  • LOGIN_CONNECTIONTYPE (CORBAHelper.ConnectionType)
    CsApplicationInfo で列挙される接続タイプを定義します。
  • NAMING_SERVICE_PORT
    ネーミング サービスが 14006 (SPECTRUM のデフォルト)以外のポートで実行するように設定されている場合のみ、このプロパティを設定します。
アプリケーションは、init メソッドに渡される 
System.setProperty
またはプロパティ オブジェクトによって、これらのプロパティを設定できます。定義済みの値は、かっこで囲みます。
バインディングの実装
以下の例は、バインディングの実装を示しています。ユーザが指定されていないため、ヘルパーはプログラムを実行しているユーザにデフォルトを設定します。大半のコードが try catch ステートメントに囲まれていることも示しています。メソッド getObjectImplementation および getModelDomainID は、Java ドキュメントを参照している場合に例外をスローします。
注:
 このセクションの後半のセクションのコード サンプルでは、簡潔にするため、
try
および
catch
ステートメントを省略していますが、作成するプログラムにはそれらを含める必要があります。
import com.aprisma.spectrum.core.idl.*; import com.aprisma.spectrum.core.util.*; import com.aprisma.util.corba.* ; import java.io.* public class ExampleBind { public static void main(String[] args) { try { //**************************************************** // Initialize. //**************************************************** String domainName = new String("mySpectroServer"); // Construct helper CORBAHelper helper = CORBAHelper.getHelperImpl () ; if (helper.init(null, null)) { CsCModelDomain md = (CsCModelDomain) helper.getObjectImplementation ( CsCModelDomain.class, domainName ) ; //************************************************ //Get the Model Domain ID //************************************************ int ID = md.getModelDomainID(); System.out.println("0x" + Integer.toHexString(ID) ); } } catch(Throwable e) { System.out.println(e); } } }
ユーザ指定によるバインディングの実装
以下の例に、ユーザ指定によるバインディングの実装方法を示します。
import com.aprisma.spectrum.core.idl.*; import com.aprisma.spectrum.core.util.*; import com.aprisma.util.corba.* ; import java.io.*; public class ExampleBind { public static void main(String[] args) { try { //**************************************************** // Initialize. //**************************************************** String domainName = new String("mySpectroServer"); // Construct helper CORBAHelper helper = CORBAHelper.getHelperImpl () ; Properties props = new Properties () ; props.setProperty ( "user.name", "JonDoe" ) ; if (helper.init(null, props)) { CsCModelDomain md = (CsCModelDomain) helper.getObjectImplementation ( CsCModelDomain.class, domainName ) ; //************************************************ //Get the Model Domain ID //************************************************ int ID = md.getModelDomainID(); System.out.println( "0x" + Integer.toHexString(ID) ); } } catch(Throwable e) { System.out.println(e); } } }
自動再接続を無効にする方法
サービスへの接続が失われた場合、接続を回復するまで再接続が自動的に開始されます。再接続が不要な場合は、次のように、getObjectImplementation メソッドに 3 番目のパラメータとして FALSE を渡して、この機能を無効にできます。
String domainName = new String("mySpectroServer"); // Construct helper CORBAHelper helper = CORBAHelper.getHelperImpl () ; Properties props = new Properties () ; props.setProperty ( "user.name", "JonDoe" ) ; if (helper.init(null, props)) { CsCModelDomain md = (CsCModelDomain) helper.getObjectImplementation ( CsCModelDomain.class, domainName, FALSE ) ; }
注:
 java -Dvbroker.orb.cacheDSQuery=false ClientApp を設定して、自動再接続を無効にすることもできます。
セキュリティ レベル
CA Spectrum
CORBA サービスには、さまざまなレベルのセキュリティが必要です。たとえば、金融データベース オブジェクトには、暗号化されたユーザ名とパスワードが必要です。
CA Spectrum
モデル ドメインには、暗号化されていないユーザ名が必要です。セキュリティは、Java アプリケーションが実装されたユーザとホストに対して事前設定されますが、この設定は変更できます。
この ORB をデフォルト値以外のユーザやホストに設定する必要がある場合は、「ユーザ指定によるバインディングの実装」の例に示すように、プロパティ クラスを設定し、
init
 に渡すことができます。
タイプ カタログ インターフェース
タイプ カタログ インターフェース CsCTypeCatalog には、開発者 ID、モデル タイプ、関係、ルール、および属性のプロパティに関する情報が含まれます。CsCModelDomain は、このタイプ カタログに存在するモデル タイプに対してのみモデルを作成できます。この非永続インターフェースでは、新しいモデル タイプ、関係、ルール、または属性の作成または破棄ができません。ただし、開発者情報、モデル タイプ、関係、ルール、および属性のプロパティの読み取りと属性のデフォルト値の変更ができます。
開発者 ID の取得の例
インターフェースから、開発者 ID とプレフィックスを取得できます。getDevProperties メソッドの呼び出しは、CsCDevProperties データ構造を返します。
注:
 「」セクションでは、開発者 ID の概念と Model Type Editor でのその使用方法を説明します。
例: 開発者 ID の取得
以下の例では、開発者 ID を取得する方法を示します。
import com.aprisma.spectrum.core.idl.*; import com.aprisma.spectrum.core.util.*; import com.aprisma.util.corba.* ; import com.aprisma.spectrum.core.idl.CsCDeveloper.*; import java.io.*; public class GetTypeCatalogInfo { public static void main(String[] args) { try { //**************************************************** // Initialize. //**************************************************** String domainName = new String("mySpectroServer"); // Construct helper CORBAHelper helper = CORBAHelper.getHelperImpl () ; if (helper.init(null, null)) { CsCModelDomain md = (CsCModelDomain) helper.getObjectImplementation ( CsCModelDomain.class, domainName ) ; //************************************************ //Get the Retrieve the other Domains //************************************************ CsCTypeCatalog tc = md.getTypeCatalog(); CsCDevProperties devprop = tc.getDevProperties(0x210000); System.out.println("Name:" + devprop.name ); System.out.println("Prefix:" + devprop.prefix ); } } catch(Throwable e) { System.out.println(e); } } }
この例では、以下のオブジェクトとメソッドが必要です。
  • パッケージ com.aprisma.spectrum.core.idl
    • インターフェース
      • CsCModelDomain
      • CsCTypeCatalog
    • クラス
      • CsCModelDomainHelper
  • パッケージ com.aprisma.spectrum.core.idl.CsCDeveloper
    • クラス
      • CsCDevProperties
モデル ドメイン インターフェース
CsCModelDomain クラスは、
CA Spectrum
モデルを作成するためのいくつかの方法を提供します。これらのメソッドは、CsCModelDomainOperations から継承しますが、CsCModelDomain クラス インターフェースから呼び出す必要があります。
ユーザ セキュリティ
SPECTRUM Development API
を使用して開発するほとんどのクライアント アプリケーションでは、以下のクラスの 1 つ以上のサービスを使用します。
  • CsCTypeCatalog
    モデリング カタログへのアクセスを提供します。
  • CsCModelDomain
    モデル、関連付け、および属性へのアクセスを提供します。
  • CsCEventDomain
    イベントへのアクセスを提供します。
  • CsCAlarmDomain
    アラームへのアクセスを提供します。
CsCModelDomain、CsCEventDomain、および CsCAlarmDomain は永続的なインターフェース、つまり、
SpectroSERVER
の再起動間で保持されるインターフェースです。アプリケーションが ORB にバインドされ、インターフェース参照を取得すると、参照は、
SpectroSERVER
全体で有効になり、ArchMgr が再起動します。
これらのサービスへのインターフェース ドメイン参照を取得するには、まずモデル ドメインにバインドし、以下のように適切な CsCModelDomain メソッドを呼び出します。
import com.aprisma.spectrum.core.idl.*; import com.aprisma.spectrum.core.util.*; import com.aprisma.util.corba.* ; import java.io.* public class ExampleBind { public static void main(String[] args) { try { //**************************************************** // Initialize. //**************************************************** String domainName = new String("mySpectroServer"); // Construct helper CORBAHelper helper = CORBAHelper.getHelperImpl () ; if (helper.init(null, null)) { CsCModelDomain md = (CsCModelDomain) helper.getObjectImplementation ( CsCModelDomain.class, domainName ) ; //************************************************ //Get the Retrieve the other Domains //************************************************ CsCTypeCatalog tc = md.getTypeCatalog(); CsCEventDomain ed = (CsCEventDomain) helper.getObjectImplementation( CsCEventDomain.class, domainName ); CsCAlarmDomain ad = md.getAlarmDomain(); } } catch(Throwable e) { System.out.println(e); } } }
モデル ID とモデル ハンドル
モデル ID は、モデル ハンドルと異なります。モデル ハンドルは上位 12 ビットがランドスケープを構成し、残りの 20 ビットがモデル ID を構成する 32 ビットの数値です。
メソッド呼び出しでは多くの場合にモデル ハンドルが必要です。ランドスケープとモデル ID を結合して、ハンドルを構成することができます。
デバイス モデリング
モデルの作成は、デバイスのモデリングと異なります。作成では、通常コンテナやユーザのように単純でアドレス指定不可能なエンティティを表すモデルを作成するように、
CA Spectrum
に指示します。デバイスをモデリングする場合は、
CA Spectrum
にデバイスを説明し(IP アドレスによって)、サーバがデバイスを調査して、コンポーネントと複雑さを表す一連の相互に関連するモデルを作成できるようにします。前のセクションでは、ネットワーク モデルの作成方法について説明しました。以下のセクションでは、デバイスをモデリングし、ネットワーク コンテナ モデル内に配置する方法について説明します。
デバイスをモデリングするには、次のように 1 つのメソッドを呼び出します。
CsCModelProperties mp = md. createModelByIP( ip, // IP address of device. community, // CsCValue containing the SNMP community string. 5000, // time to wait for ping reply. 3, // retry count 161 // agent SNMP Port
args[i] 変数は、すべてのコード スニペットを含むダミー プログラムに渡されるコマンド ライン引数を表します。2 行目から 6 行目のパラメータは次のとおりです。
  • ip
    ターゲット デバイスの IP アドレスを定義します。次のように、IP アドレスを文字列形式(192.168.1.81 など)から int[] 形式に変換するヘルパー クラスを使用できます。
    CsCorbaValueHelper helper = new CsCorbaValueHelper(); CsCValue ipValue = valueHelper.parseInternetAddressValue(argv[0]); byte[] ip = ipValue.internetAddress();
    注:
    IP アドレスは、IPv4 と IPv6 のどちらも使用できます。
  • community
    CA Spectrum がデバイスに接続するときに、セキュリティ要件を満たすために使用する SNMP コミュニティ文字列を含む CsCValue を定義します。
  • 5000
    CA Spectrum
    がデバイスへの接続の試行間で待機する時間(ミリ秒単位)を定義します。
  • 3
    CA Spectrum
    が中止するまでにデバイスの ping を試みる回数を定義します。
  • 161
    SNMP エージェント ポートを定義します。
この例では、以下のオブジェクトとメソッドが必要です。
  • パッケージ com.aprisma.spectrum.core.idl
    • インターフェース
      • CsCModelDomain
      • CsCTypeCatalog
      • CsCRelation
      • CsCModelType
    • クラス
      • CsCModelDomainHelper
  • パッケージ com.aprisma.spectrum.core.idl.CsCModelPackage
    • クラス
      • CsCModelProperties
  • パッケージ com.aprisma.spectrum.core.util
    • クラス
      • CsCorbaValueHelper
 
モデル タイプ
CA Spectrum
のモデル タイプは、オブジェクト指向プログラミングでクラスがオブジェクトに関連付けられるのと同じようにモデルに関連付けられます。モデル タイプはテンプレートで、モデルはインスタンスです。以下のセクションでは、モデル タイプを調査する、つまりそのオブジェクト参照、タイプ階層内のその位置、その属性、およびプロパティを取得する方法を示します。
モデル タイプのオブジェクト参照の取得の例
以下の例は、指定されたモデル タイプ ID のオブジェクト参照を取得する方法を示しています。
Integer mtypeID = Integer.decode(args[0]); CsCTypeCatalog tc = md.getTypeCatalog(); CsCModelType mt = tc.getModelType(mtypeID.intValue());
最初の行では、コマンド ラインから mtype ID を取得します。2 行目は、タイプ カタログへのオブジェクト参照を取得します。3 行目は、特定のモデル タイプへのオブジェクト参照を取得します。
指定されたモデル タイプ名のオブジェクト参照を取得するのには、以下のコードを使用します。
String mtypeName = args[0]; CsCTypeCatalog tc = md.getTypeCatalog(); CsCMTypePropList mtpl = tc.getMTypePropListByName(mtypeName);
最初の行は、コマンド ラインからモデル タイプ名を取得します。2 行目は、タイプ カタログへのオブジェクト参照を取得します。3 行目は、指定した名前を持つすべてのモデル タイプのリストを取得します。ほとんどの場合、リストには 1 つのメンバしか含まれません。
モデル タイプ階層
CsCModelType オブジェクト参照(以下の例では mt)を取得したら、以下のメソッドを使用して、ベース モデル タイプと派生モデル タイプを確認します。
CsCMTypePropList bmtpl = mt.getBaseMTypePropList(); CsCMTypePropList dmtpl = mt.getDerivedMTypePropList();
モデル タイプのプロパティ
モデル タイプには、以下のブール プロパティがあります。
  • instantiable
    このモデル タイプからインスタンスを作成できることを示します。
  • underivable
    モデル タイプはこのモデル タイプから派生できないことを示します。
  • noDestroy
    このタイプのモデルを破棄できないことを示します。
  • unique
    このモデル タイプのモデルは最大でも 1 つしか存在できないことを示します。
  • required
    このタイプのモデルが少なくとも 1 つ必要であることを示します。
モデル タイプのプロパティを読み取る方法
モデル タイプのプロパティを読み取るには、以下の手順に従います。
  1. モデル タイプを表す CsCMTypeProperties オブジェクトを取得します (CsCTypeCatalog および CsCModelType クラスにはそのようなオブジェクトを返すメソッドがあります)。
  2. 各プロパティのブール変数を格納する CsCMTypeProperties メンバ変数フラグ(タイプ CsCMTypeFlags の)にアクセスします。
例:モデル タイプのプロパティを読み取る。
Integer mtypeID = Integer.decode(args[0]); CsCTypeCatalog tc = md.getTypeCatalog(); CsCMTypeProperties mtp = tc.getMTypeProperties (mtypeID.intValue()); CsCMTypeFlags flags = mtp.flags;
最初の行は、コマンド ラインからモデル タイプ ID を取得します。2 行目は、タイプ カタログへのオブジェクト参照を取得します。3 行目と 4 行目はモデル タイプ プロパティ オブジェクトを取得します。5 行目は、モデル タイプ フラグ オブジェクトを抽出します。
モデル タイプ プロパティの読み取りの例
以下の例は、モデル タイプ情報を取得する方法を示しています。
import com.aprisma.spectrum.core.idl.*; import com.aprisma.spectrum.core.util.*; import com.aprisma.util.corba.* ; import com.aprisma.spectrum.core.idl.CsCModelTypePackage.*; import java.io.*; public class GetTypeCatalogInfo { public static void main(String[] args) { Integer mtid = Integer.decode( args[0] ); try { //**************************************************** // Initialize. //**************************************************** String domainName = new String("mySpectroServer"); // Construct helper CORBAHelper helper = CORBAHelper.getHelperImpl () ; if (helper.init(null, null)) { CsCModelDomain md = (CsCModelDomain) helper.getObjectImplementation ( CsCModelDomain.class, domainName ) ; //************************************************ //Get the Retrieve the other Domains //************************************************ CsCTypeCatalog tc = md.getTypeCatalog(); CsCModelType mt = tc.getModelType( mtid.intValue() ); CsCMTypeProperties mtprop = mt.getMTypeProperties(); CsCMTypeFlags mtflags = mtprop.flags; System.out.println("Name:" + mtprop.name ); System.out.println("Underivable:" + mtflags.underivable ); } } catch(Throwable e) { System.out.println(e); } } }
上記の例では、以下のオブジェクトとメソッドが必要です。
  • パッケージ com.aprisma.spectrum.core.idl
    • インターフェース
      • CsCModelDomain
      • CsCTypeCatalog
      • CsCModelType
    • クラス
      • CsCModelDomainHelper
  • パッケージ com.aprisma.spectrum.core.idl.CsCModelTypePackage
    • クラス
      • CsCMTypeProperties
      • CsCMTypeFlags
モデル タイプの属性
CA Spectrum
モデル タイプには、属性が関連付けられています。属性は、モデルの機能を説明し、いくつかのデータ タイプと外部の MIB オブジェクト情報の内部ストレージを反映しています。ベースと派生の両方のモデル タイプに属性があります。
以下の図は、ベース モデル タイプとその派生モデル タイプを示しています。
Derived Model Types
モデル タイプ属性には、独自のメタデータ、属性の変更可能なプロパティ、および属性の変更不可能なプロパティがあります。
変更不可能なプロパティ
モデル タイプ属性プロパティは、ベースモデル タイプと派生モデル タイプ間で同じままです。つまり、派生モデル タイプのプロパティは変更できません。
以下の図は、ベース モデル タイプとその派生モデル タイプの変更不可能なプロパティの例を示しています。
Non-modifiable Properties
変更不可能なプロパティを以下に示します。
  • external
    属性が、
    CA Spectrum
    の外部にあり、SNMP などのプロトコルを経由して取得する必要があることを示します。
  • readable
    属性がアプリケーションによって読み取り可能であることを示します。
  • writable
    属性がアプリケーションによって書き込み可能であることを示します。
  • 共有
    属性がモデル タイプのすべてのモデルで 1 つだけの共有値を持つことを示します。
  • list
    属性がリストであることを示します。リスト属性は通常、属性テーブルの列を形成します。
  • guaranteed
    属性が管理モジュール開発者によって削除されないことが保証されることを示します。
  • global
    内部使用のために予約されています。
  • preserveLegacyValue
    データベース内の属性値が、インポートされたデータベースのカタログ(.e または .xml)ファイルによって上書きされることを示します。システム要件のモデル タイプをカスタマイズし、このフラグを設定した場合、後続のリリース バージョンによってモデル タイプが更新された場合も変更したモデル タイプの属性値が保持されます。
属性のプロパティを読み取る方法
以下のように属性のプロパティを読み取ることができます。
  1. 1 つの属性を表す CsCAttrProperties オブジェクトを取得します。
  2. CsCAttrProperties クラスの Flags メンバ変数(タイプ CsCAttrFlags の)にアクセスします。この変数には、これらの 8 つの特性ごとに 1 つのブール値変数が格納されています。
例: 属性プロパティの読み取り
Integer attrID = Integer.decode(args[0]); CsCTypeCatalog tc = md.getTypeCatalog(); CsCAttrProperties ap = tc.getAttrProperties(attrID.intValue()); CsCAttrFlags flags = ap.flags;
最初の行は、コマンド ラインから attrID を取得します。2 行目はタイプ カタログへのオブジェクト参照を取得します。3 行目と 4 行目は属性プロパティ オブジェクトを取得します。5 行目は、属性フラグ オブジェクトを抽出します。
変更可能なプロパティ
属性は、派生タイプ レベルで変更できる変更可能なプロパティを持つことができます。これらのプロパティは拡張フラグとして参照することもできます。
以下の図は、ベース モデル タイプとその派生モデル タイプの変更可能なプロパティの例を示しています。
Modifiable Properties
変更可能なプロパティを以下に示します。
  • polled
    属性の値が定期的に読み取られることを示します。ポーリング間隔は、頻度を設定します。
  • logged
    属性値は定期的に読み取られ、
    CA Spectrum
    統計ログに保存されることを示します。ログ記録の間隔は、頻度を設定します。
  • memory
    頻繁に読み取られる属性の場合、属性値がメモリに格納されることを示します。
  • データベース
    属性値がデータベースに格納されることを示します。これは、
    SpectroSERVER
    の再起動間で維持する必要がある属性に対して使用します。
  • oidPrefix
    ネットワーク エンティティをサポートするエージェントの MIB のオブジェクト識別子(OID)の最初の部分を示します。これは、テーブル属性が開始する MIB ツリーのブランチです。
  • oidReference
    値が OID サフィックスである属性 ID を示します。このオブジェクト識別子は、MIB ツリー内のオブジェクトを完全に識別するために、OID プレフィックスを補足します。テーブル属性の行は、この値をサフィックスとして使用して表します。値 0 は、このモデル タイプ属性の OID 参照が指定されていないことを示します。
  • pollingGroup
    ポーリング グループ識別子を示します。ポーリング グループの属性はまとめてポーリングされ、ログに記録されます。各モデル タイプは、最大 256 個のポーリング グループを持つことができます。各ポーリング グループは、0 ~ 255 の値によって識別します。
  • pollingInterval
    属性値が最新の値に更新されてからの時間を秒単位で示します。
モデル タイプ属性のプロパティは、以下のように属性のプロパティと異なります。
  • モデル タイプ属性のプロパティはブール値に制限されません。
  • 2 つ目に、特定のモデル タイプの属性に適用されます。
モデル タイプ属性のプロパティを読み取る方法
以下のようにモデル タイプ属性のプロパティを読み取ることができます。
  1. まず、1 つのモデル タイプを表す CsCModelType オブジェクト参照を取得します。
  2. CsCMTypeAttrProperties オブジェクトを取得し、モデル タイプ属性のプロパティを構成するオブジェクトのいくつかのデータ メンバにアクセスします。
例: モデル タイプ属性のプロパティの読み取り
Integer mtypeID = Integer.decode(args[0]); Integer attrID = Integer.decode(args[1]); CsCModelType mt = tc.getModelType(mtypeID.intValue()); CsCMTypeAttrProperties mtap = mt.getMTypeAttrProperties(attrID.intValue()); CsCMTypeAttrFlags flags = mtap.flags; int[] oidPrefix = mtap.oidPrefix; int oidReference = mtap.oidReference; int pollingInterval = mtap.pollingInterval; int loggingInterval = mtap.loggingInterval; int pollingGroup = mtap.pollingGroup;
最初の行と 2 行目は、コマンド ラインから、モデル タイプ ID と属性 ID を取得します。3 行目は、タイプ カタログ オブジェクト参照を取得します。5 行目は、モデル タイプ属性のプロパティ オブジェクトを取得します。残りの行は、属性のプロパティを構成するすべてのフィールドにアクセスします。
属性のプロパティの取得の例
以下の例では、属性のプロパティを取得する方法を示します。
import java.io.*; import com.aprisma.spectrum.core.idl.*; import com.aprisma.spectrum.core.util.*; import com.aprisma.spectrum.core.idl.CsCException.*; import com.aprisma.spectrum.core.idl.CsCAttribute.*; import com.aprisma.util.corba.*; public class GetAttributeInfo { public static void main( String[] args ) { CsCorbaValueHelper help = new CsCorbaValueHelper(); Integer attrid = Integer.decode( args[0] ); Integer mtid = Integer.decode( args[1] ); CsCModelDomain md = null; try { String domainName = new String( "mySpectroServer" ); CORBAHelper helper = CORBAHelper.getHelperImpl(); helper.init( null, null ); md = (CsCModelDomain) helper.getObjectImplementation( CsCModelDomain.class, domainName ); CsCTypeCatalog tc = md.getTypeCatalog(); CsCModelType mt = tc.getModelType( mtid.intValue() ); CsCMTypeAttrProperties mtap = mt.getMTypeAttrProperties( attrid.intValue() ); CsCMTypeAttrFlags mtaf = mtap.flags; System.out.println( "Memory: " + mtaf.memory ); System.out.println( "Logged: " + mtaf.logged ); CsCAttrProperties ap = mtap.commonProperties; System.out.println( "Name: " + ap.name ); System.out.println( "Group ID: " + ap.attrGroupID ); System.out.println( "Type: " + ap.type.toString() ); System.out.println( "OID: " + CsCorbaObjectIDHelper.toString( mtap.oidPrefix ) ); CsCAttrFlags af = ap.flags; System.out.println( "Global: " + af.global ); System.out.println( "Shared: " + af.shared ); System.out.println( "External: " + af.external ); System.out.println( "Readable: " + af.readable ); System.out.println( "Writable: " + af.writable ); } catch (Throwable e) { System.out.println( e ); } } }
この例では、以下のオブジェクトとメソッドが必要です。
  • パッケージ com.aprisma.spectrum.core.idl
    • インターフェース
      • CsCModelDomain
      • CsCTypeCatalog
      • CsCModelType
    • クラス
      • CsCModelDomainHelper
  • パッケージ com.aprisma.spectrum.core.idl.CsCAttribute
    • クラス
      • CsCMTypeAttrProperties
      • CsCMTypeAttrFlags
      • CsCAttrProperties
      • CsCAttrFlags
      • CsCValueType_e
  • パッケージ com.aprisma.spectrum.core.util
    • クラス
      • CsCorbaObjectIDHelper
モデル作成
1 つのタスクを実行するメソッドと、複数のタスクを実行するメソッドがあります。たとえば、createModelByID はモデルを作成するだけです。モデルに名前を付けたり、属性値を設定したり、または別のモデルに関連付けたりしません。ただし、createModelByIP は指定された IP アドレスでネットワーク デバイスを検出し、デバイスを表す一連のモデルを作成します。作成と関連付けの両方のメソッドには、モデル ドメインの構成要素として、モデル タイプ ID と関係 ID が必要です。
以下の図は、モデル タイプと関係のインスタンス化としてモデルと関連付けを示しています。
Models and Associations
コンテナ モデルを作成し、モデルをユニバース ビューに収集するには、createModelByID と createAssociationByIDs の CsCModelDomain メソッドを使用します。最初のメソッドは、指定されたモデル タイプのモデルを作成し、新しいモデルの属性値のいずれかを初期化します。コンテナ モデルを作成するため、ネットワーク モデル タイプ(0x1002e)を指定する必要があります。2 番目のメソッドは、2 つのモデル間の関連付けを作成します。目的のためには、関係(0x10002)として Collects、左側のモデルとしてユニバース モデル、右側のモデルとしてコンテナを指定します。
以下の図は、Collects 関係を示しています。
An Example of Models and Associations
注:
 クライアント プログラムが 2 番目のメソッドを呼び出すまで、新しいコンテナは OneClick トポロジに表示されません。
以下の例は、CsCModelDomain の Create Model メソッドを呼び出す方法を示しています。
Integer mtypeID = Integer.decode(args[0]); CsCModelProperties mp = md.createModelByID( mtypeID.intValue());
1 行目と 2 行目は、プリミティブ データ タイプ int としてモデル タイプ ID を取得します。2 行目は、モデルを作成し、モデル タイプ ID を指定し、CsCModelProperties データ クラスを返します。createModelByID メソッドは、CsCModelProperties を含む CORBA オブジェクト CsCModelType を返しません。これらのフィールドには、null 参照が含まれます。
モデル関連付け
以下の例では、CsCModelDomain の関連付けのモデル メソッドを呼び出す方法を示しています。
int universeID = ... int myContainerID = ... int relationID = 0x10002; md.createAssociationByIDs(relationID,universeID,myContainerID);
1 行目から 3 行目は、プリミティブ データ タイプとして、モデル ID と関係 ID を指定しています。4 行目は、createAssociationByIDs を呼び出しています。このメソッドは、関係を使用して、モデル ドメイン内の 2 つのモデルの関連付けを作成します。コンテナおよびデバイス モデルを 
collects
関連付けで関連付けることが重要です。そうしないと、モデルが LostAndFound に属します。
モデルの作成と関連付けの例
以下の例では、モデルを作成して関連付ける方法を示します。
import java.io.*; import com.aprisma.spectrum.core.idl.*; import com.aprisma.spectrum.core.util.*; import com.aprisma.spectrum.core.idl.CsCModelPackage.*; import com.aprisma.spectrum.core.idl.CsCAttribute.*; import com.aprisma.spectrum.core.idl.CsCError.*; import com.aprisma.util.corba.* ; public class CreateModelAndAssocByIP { public static void main(String[] args) { CsCorbaValueHelper valhelper = new CsCorbaValueHelper(); byte[] ipAddress = null; try { CsCValue ipValue = valhelper.parseInternetAddress( argv[0] ) ipAddress = ipValue.internetAddress(); } catch( java.lang.NumberFormatException e) { System.out.println(e); } Integer relID = Integer.decode(args[1]); Integer modeltypeID = Integer.decode(args[2]); Integer universeID = Integer.decode(args[3]); try { String domainName = new String("mySpectroSERVER"); // Bind CORBAHelper helper = CORBAHelper.getHelperImpl () ; helper.init(null, null); CsCModelDomain md = (CsCModelDomain) helper.getObjectImplementation ( CsCModelDomain.class, domainName ) ; // Create the Network Models CsCModelProperties mpNetwork = md.createModelByID(modeltypeID.intValue()); System.out.println( mpNetwork.modelID ); // Create the association: Universe "Collects" Network md.createAssociationByIDs( relID.intValue(), universeID.intValue(), mpNetwork.modelDomainID + mpNetwork.modelID); // Calling this method will return a CsCModelProperties with // only the handle value set in the data object CsCValue commStrVal = new CsCValue() ; commStrVal.textString( EncodeUtils.convertToBytes( "public" )) ; CsCModelProperties mpDevice = md.createModelByIP( ipAddress, commStrVal, 300, 2, 161, avl); // Create the association: Network "Collects" Device md.createAssociationByIDs( relID.intValue(), mpNetwork.modelDomainID + mpNetwork.modelID, mpNetwork.modelDomainID + mpDevice.modelID ); } catch(Throwable e) { System.out.println(e); } } }
関連付けによってモデルを取得する例
以下の理由で、関連付けによってモデルを取得する必要があります。
  • デバイスに存在しているポート モデルを知るため
  • 特定のコンテナ モデルに存在するモデルを知るため
  • デバイスが相互にどのように接続されているかを知るため
getAssocModelIDList または getAssocModelIDListOfMType を呼び出すことにより、この情報を入手できます。モデル ドメインに対して両方の呼び出しを行うことができます。
例: LAN コンテナ モデルによって収集されたすべてのモデルを取得する
以下の例では、LAN コンテナ モデルによって収集されたすべてのモデルを取得する方法を示します。
int myLANContainer = ... int relationID = 0x10002; //Collects relation int[] list = md.getAssocModelIDList(relationID, myLANContainer, CsCSide_e.CSC_LEFT_SIDE);
注:
 特定のモデル タイプに設定される結果を絞り込む場合は、getAssocModelIDListOfMType を使用します。
以下のパラメータがあります。
  • myLANContainer
    コンテナのモデル ハンドルを定義します。
  • 関係
    関係 ID を収集します。
  • list
    モデル ID の int [] を定義します。
  • CsCSide_e.CSC_LEFT_SIDE
    myLANContainer モデル ハンドルが存在する側を定義します。
この例では、以下のオブジェクトとメソッドが必要です。
  • パッケージ com.aprisma.spectrum.core.idl
    • インターフェース
      • CsCModelDomain
    • クラス
      • CsCModelDomainHelper
  • パッケージ com.aprisma.spectrum.core.idl.CsCRelationPackage
    • クラス
      • CsCSide_e
以下の例は、関連付けによってモデルを取得する方法を示しています。
import com.aprisma.spectrum.core.idl.*; import com.aprisma.spectrum.core.util.*; import com.aprisma.spectrum.core.idl.CsCRelationPackage.*; import com.aprisma.spectrum.core.idl.CsCError.*; import com.aprisma.util.corba.* ; public class GetModelAssocInfo { public static void main(String[] args) { Integer relID = Integer.decode(args[0]); Integer modelID = Integer.decode(args[1]); try { String domainName = new String("mySpectroSERVER"); // Bind CORBAHelper helper = CORBAHelper.getHelperImpl () ; helper.init(null, null); CsCModelDomain md = (CsCModelDomain) helper.getObjectImplementation ( CsCModelDomain.class, domainName ) ; int[] modelIDList = md.getAssocModelIDList( relID.intValue(), modelID.intValue(), CsCSide_e.CSC_LEFT_SIDE); } catch(Throwable e) { System.out.println(e); } } }
ルールと関係
CA Spectrum
モデルのルールと関係を定義することができます。
関係
は、2 つのモデル間のインタラクションについて記述し、Contains、Manages、Is_Adjacent_to などの動詞または動詞句として表されます。
ルール
は、2 つのモデル タイプに関係を適用するステートメントです。ルールにより、関係を通じて 2 つのタイプのモデルを関連付けることができます。たとえば、Contains という関係がある場合、ルールは、Model Type A Contains Model Type B のようになります。ルール ステートメントの左側は、ルールのサブジェクト(Model Type A)と呼ばれ、右側はオブジェクト(Model Type B)と呼ばれます。モデル タイプのロールは、それが表示される側によって異なります。
CA Spectrum
ナレッジ ベース内の多くの関係には、その関係に参加できるモデル タイプを指定する 1 つ以上のメタルールがあります。メタルールに指定されている別のモデル タイプから派生したモデル タイプは、その関係に参加する資格を継承します。たとえば、Contains 関係のメタルールの 1 つは LAN Contains Device です。myLAN という名前のモデル タイプがモデル タイプ LAN から派生した場合、
SpectroSERVER
はルール myLAN Contains Device に自動的に従います。
CA Spectrum
は以下の関係タイプをサポートしています。
  • 1 対多:
    One LAN Collects Many Devices など。トポロジ内のデバイスの親所有者になることができるのは、1 つだけの LAN です。
  • 多対多: 
    Many Ports Connects_To Many Devices など。
基数は、関係ごとに異なる場合があります。
注:
 関係、ルール、およびメタルールの詳細については、 セクションを参照してください。
関係ハンドル
CA Spectrum
データベース内のすべての関係がハンドルを持ちます。以下の表は、関係とハンドルの例を示しています。
関係
ハンドル
Collects
0x10002
HASPARTS
0x10004
Manages
0x1001f
 
関係情報の取得の例
以下の例では、関係情報を取得する方法を示します。
import java.io.*; import com.aprisma.spectrum.core.idl.* ; import com.aprisma.spectrum.core.util.* ; import com.aprisma.spectrum.core.idl.CsCException.* ; import com.aprisma.spectrum.core.idl.CsCError.* ; import com.aprisma.spectrum.core.idl.CsCRelationPackage.* ; import com.aprisma.util.corba.* ; public class GetRelationInfo { public static void main(String[] args) { CsCModelDomain md = null; CsCTypeCatalog tc = null; CsCRelProperties relprop = null; try { String domainName = new String("mySpectroServer"); // Construct helper CORBAHelper helper = CORBAHelper.getHelperImpl () ; helper.init(null,null); md = (CsCModelDomain) helper.getObjectImplementation ( CsCModelDomain.class, domainName); tc = md.getTypeCatalog(); CsCRelPropList rpl = tc.getAllRelPropList(); for( int i=0; i < rpl.list.length; i ++) { relprop = rpl.list[i]; if(relprop.error == CsCError_e.SUCCESS){ System.out.println ("Name : " + relprop.name); System.out.println ("Cardinality : " + relprop.cardinality.toString()); } } } catch (Throwable e) { System.out.println(e); } } }
上記の例では、以下のオブジェクトとメソッドが必要です。
  • パッケージ com.aprisma.spectrum.core.idl
    • インターフェース
      • CsCModelDomain
      • CsCTypeCatalog
      • CsCRelation
    • クラス
      • CsCModelDomainHelper
  • パッケージ com.aprisma.spectrum.core.idl.CsCRelationPackage
    • クラス
      • CsCRelProperties
ルールとメタルールの重要性
ルールとメタルールは、
SpectroSERVER
が誤動作を引き起こす可能性がある非論理的な関連付けを防止します。ルールは、特定の関係に参加できる 2 つのモデル タイプを指定します。ルールは、各モデル タイプのステートメント内の位置(つまり、左または右)によって、相対的な役割も指定します。通常、左側のモデル タイプは親/子関係の親になります。メタルールは、派生モデル タイプもそのルールに参加することを定義します。
以下の表は、関係の左側と右側を示しています。
左側
関係
右側
ユニバース
Collects
LAN
Port
Connects to
Device
GnSNMPDev
Manages
アプリの管理
モデルの関連付けを作成するプログラムの場合、既存のルールを確認して、関係によって関連付けることができるモデル タイプを判断します。
トピック「ルール情報を取得するメソッド」の getRelMTypePropList メソッド呼び出しでは、モデル タイプと左側か右側かを渡します。
side
パラメータは、モデル タイプに関連します。
以下の図は、ルール、およびその左側および右側を示しています。
Relations Between Models
開発者がルールの右側にあるタイプ Y のすべてのモデルを探している場合は、モデル タイプ X が渡されます。モデル タイプ X は左側にあります。
ルール情報の取得の例
以下の例では、ルール情報を取得する方法を示します。
import java.io.*; import com.aprisma.spectrum.core.idl.*; import com.aprisma.spectrum.core.util.*; import com.aprisma.spectrum.core.idl.CsCException.*; import com.aprisma.spectrum.core.idl.CsCModelType.*; import com.aprisma.spectrum.core.idl.CsCModelTypePackage.*; import com.aprisma.spectrum.core.idl.CsCRelationPackage.*; import com.aprisma.util.corba.*; public class GetRuleInfo { public static void main( String[] args ) { Integer relid = Integer.decode( args[0] ); Integer mtid = Integer.decode( args[1] ); CsCModelDomain md = null; try { String domainName = new String("mySpectroServer"); CORBAHelper helper = CORBAHelper.getHelperImpl(); helper.init( null, null ); md = (CsCModelDomain) helper.getObjectImplementation( CsCModelDomain.class, domainName ); CsCTypeCatalog tc = md.getTypeCatalog(); CsCModelType mt = tc.getModelType( mtid.intValue() ); CsCRelation rel = tc.getRelation( relid.intValue() ); CsCMTypePropList mtpl = rel.getRelMTypePropList( mt, CsCSide_e.CSC_LEFT_SIDE ); System.out.println( "Read: " + mtpl.error.toString() ); for ( int i=0; i<mtpl.list.length; i++ ) { CsCMTypeProperties mtp = mtpl.list[i]; System.out.println( "ModelTypeName " + new Integer(i).toString() + ": " + mtp.name ); } } catch ( Throwable e ) { System.out.println( e ); } } }
この例では、以下のオブジェクトとメソッドが必要です。
  • パッケージ com.aprisma.spectrum.core.idl
    • インターフェース
      • CsCModelDomain
      • CsCTypeCatalog
      • CsCRelation
      • CsCModelType
    • クラス
      • CsCModelDomainHelper
  • パッケージ com.aprisma.spectrum.core.idl.CsCModelTypePackage
    • クラス
      • CsCMTypePropList
      • CsCMTypeProperties
  • パッケージ com.aprisma.spectrum.core.idl.CsCRelationPackage
    • クラス
      • CsCSide_e
フィルタ
CsCModelDomain インターフェースは、リストで返される情報を指定するいくつかのテクニックを提供します。サーバ側フィルタリングには以下の利点があります。
  • ネットワーク トラフィックの減少。
  • 無関係なデータの削除とクライアント アプリケーションに必要な情報のみの提供。
情報をクライアント アプリケーションに送信する前に、
CA Spectrum
に情報をフィルタ処理するように求める必要があります。フィルタの基礎として、右側の属性を使用すると、検索のパフォーマンスが向上します。
以下の図は、A と B の 2 つのセットを示しています。A はすべてのモデルを表し、B は属性 b を持つモデルのサブセットを表します。ほとんどのお客様が属性をフィルタとして使用することを前提としています。検索は属性 A がすべてのモデルに存在するため機能します。データベースのすべてのモデルを比較します。属性 B が使われた場合は、2 つのモデルだけが比較されます。つまり、半分のモデルだけが比較されるため、比較の時間が半分になります。
以下の図は、フィルタを使用して、
SpectroSERVER
と通信するクライアントを示しています。
Filter Search
CA Spectrum
属性フィルタ(CsCValue[])により、データベース検索手順を定義できます。たとえば、モデル タイプ Device から派生するモデル タイプのすべてのモデルのリストを取得するには、以下のようにフィルタを使用できます。
CsCorbaFilterAttrNode node = CsCorbaAttrFilterHelper.createModelTypeIDNode( 0x10001, // Attribute ID of Model Type Handle CsCOperator_e.CSC_IS_DERIVED_FROM, 0x1004b ); // Model Type Handle for Device CsCValue[] filter = node.getFilter();
この例の中心は、クラス CsCorbaAttrFilterHelper です。このクラスのメソッドを使用して、この例で使用されている createModelTypeIDNode メソッドなど、さまざまなタイプのフィルタを作成できます。このメソッドはパラメータとして、属性 ID、オペレータ、およびモデル タイプ ID を取ります。ノードを作成したら(1 行目から 5 行目)、ノードの getFilter メソッドを呼び出して、フィルタ(6 行目)を作成します。これは以下の CsCValue オブジェクトの配列です。
  • CSC_OPERATOR = IS_DERIVED_FROM
  • CSC_ATTR_VALUE = 0x10001
  • CSC_MODEL_TYPE_ID = 0x1004b
属性フィルタには、演算子とその後に属性 ID と値が含まれます。
属性フィルタをパラメータとして受け入れるインターフェースには、CsCValue オブジェクトの配列が必要です。この配列の構築は、順序のため複雑です。CsCorbaAttrFilterHelper は、CORBA インターフェースの属性フィルタを作成する代替の方法を提供します。このクラスは、フィルタの基本部分を作成し、それらをまとめて組み立てる簡単な方法を提供します。フィルタを組み立てたら、getFilter メソッドを使用して、最終の配列を取得できます。
たとえば、Model_Name 属性 MyName を持つすべてのモデルの簡単なフィルタが必要な場合、以下のようにフィルタを記述できます。
CsCorbaFilterNode nameNode = CsCorbaAttrFilterHelper.createTextStringNode ( 0x1006e, CsCOperator_e.CSC_EQUALS, "MyName" ) ; CsCValue [] filter = nameNode.getFilter () ;
ここでは、タイプ TextString の属性を比較するため、メソッド createTextStringNode が呼び出されます。この属性タイプは、CsCorbaAttrFilterHelper への呼び出しを指示しています。CsCOperator は、使用されるすべての論理演算子およびテキスト演算子を収容しています。テキスト文字列属性に CSC_EQUALS_IGNORE_CASE や CSC_HAS_SUBSTRING など他の演算子を使用できるため、属性タイプを比較する前に利用可能な演算子を考慮する必要があります。
複雑な属性フィルタ
タイプ Indirect RMON のモデルを除く、Device モデル タイプから派生したモデル タイプを持つすべてのモデルを取得するには、以下のようにフィルタを記述できます。
CsCorbaFilterAttrNode node1 = CsCorbaAttrFilterHelper.createModelTypeIDNode( 0x10001, // Attribute ID of Model Type Handle CsCOperator_e.CSC_IS_DERIVED_FROM, 0x1004b ); // Model Type Handle for Device CsCorbaFilterAttrNode node2 = CsCorbaAttrFilterHelper.createModelTypeIDNode( 0x10001, // Attribute ID of Model Type Handle CsCOperator_e.CSC_DOES_NOT_EQUAL, 0x59001b); // model type ID IndirectRMON CsCorbaFilterBinaryNode bnode = CsCorbaAttrFilterHelper.createBinaryNode( node1,CsCOperator_e.CSC_AND,node2); CsCValue[] filter = bnode.getFilter();
この例では、以下のように、3 つのノードを作成しています。
  • Node1 は、Device から派生したモデル タイプを持つすべてのモデルを表します。
  • Node2 は、モデル タイプが Indirect RMON であってはならないことを指定します。
  • 3 番目のノード bnode (バイナリ ノード)は、node1 および node2 の論理 AND です。
例のフィルタ配列には、以下の情報が含まれます。
CSC_OPERATOR = AND CSC_OPERATOR = IS_DERIVED_FROM CSC_ATTR_VALUE = 0x10001 CSC_MODEL_TYPE_ID = 0x1004b CSC_OPERATOR = DOES_NOT_EQUAL CSC_ATTR_VALUE = 0x10001 CSC_MODEL_TYPE_ID = 0x59001b
最初の CsCValue オブジェクトに論理 AND が表示され、その後にそれぞれ node1 と node2 を表す 2 つの三重項が続いています。
このフィルタを別の制限で強化する場合は、リストのすべてのモデルが 2 のモデル クラス属性値を持つ必要があり、このフィルタは以下のように記述できます。
CsCorbaFilterAttrNode node1 = CsCorbaAttrFilterHelper.createModelTypeIDNode( SSORBHelper.attrIDMType, CsCOperator_e.CSC_IS_DERIVED_FROM, SSORBHelper.mtypeIDDevice); CsCorbaFilterAttrNode node2 = CsCorbaAttrFilterHelper.createModelTypeIDNode( 0x10001, // Attribute ID of Model Type Handle CsCOperator_e.CSC_DOES_NOT_EQUAL, 0x59001b); // model type ID IndirectRMON CsCorbaFilterBinaryNode bnode = CsCorbaAttrFilterHelper.createBinaryNode( node1,CsCOperator_e.CSC_AND,node2); CsCValue modelClass = new CsCValue(); modelClass.intValue(2); node2 = CsCorbaAttrFilterHelper.createAttrValNode( 0x11ee8, CsCOperator_e.CSC_EQUALS, 2); bnode = CsCorbaAttrFilterHelper.createBinaryNode( bnode,CsCOperator_e.CSC_AND,node2); CsCValue[] filter = bnode.getFilter();
注:
 属性は、モデルがブリッジ、スイッチ、ルータ、ブルーターなどのいずれであるかを指定し、2 の値はスイッチを指定します。
1 行目から 15 行目は、上記の例と同じです。バイナリ ノード bnode には、node1 と node2 の情報と論理 AND 演算子が格納されます。17 行目から 23 行目は、モデル クラスが 2 に等しいことを指定し、使用可能な node2 を再利用する新しいノードを作成しています。25 行目と 26 行目は、bnode と node2 を結合し、結果を再度 bnode に格納して、以前の情報を上書きします。28 行目は bnode から、CsCValue[] 配列を抽出します。配列の内容は以下のとおりです。
CSC_OPERATOR AND CSC_OPERATOR AND CSC_OPERATOR IS_DERIVED_FROM CSC_ATTR_VALUE 0x10001 CSC_MODEL_TYPE_ID 0x1004b CSC_OPERATOR DOES_NOT_EQUAL CSC_ATTR_VALUE 0x10001 CSC_MODEL_TYPE_ID 0x59001b CSC_OPERATOR EQUALS CSC_ATTR_VALUE 0x11ee8 CSC_INTEGER 2
3 行目から 5 行目は、1 つのノードを表し、6 行目から 8 行目は 2 番目のノードを表しています。2 行目は、2 つのノード間の論理 AND を表します。つまり、2 行目は、3 行目から 8 行目を 1 つのノードにしています。9 行目から 12 行目は、3 番目のノードを表しています。1 行目はこのノードと 3 行目から 8 行目の 1 つのノード間の論理 AND を表しています。
上記の例では、以下のオブジェクトとメソッドが必要です。
  • パッケージ com.aprisma.spectrum.core.idl
    • インターフェース
      • CsCModelDomain
      • CsCModelPropList
      • CsCModeProperties
    • クラス
      • CsCModelDomainHelper
  • パッケージ com.aprisma.spectrum.core.util
    • インターフェース
      • CsCorbaFilterAttrNode
      • CsCorbaFilterBinaryNode
    • クラス
      • CsCorbaAttrFilterHelper
 
検索条件 XML
getModelIDListByXmlSearchCriteria() を使用して、
CA Spectrum
で検索を呼び出します。
CA Spectrum
の任意の有効な検索条件 xml を getModelIDListByXmlSearchCriteria() に渡すことができます。
注:
 getModelIDListByXmlSearchCriteria() は、可能な検索のサブセットのみをサポートするレガシー getModelIDListByAttrFilter() より多くの機能を備えています。
getModelIDListByXmlSearchCriteria() で使用できる検索条件 xml を作成するには、以下の手順に従います。
以下の手順に従います。
  1. OneClick の[ロケータ]タブを使用して、新しい検索を作成して保存します。カスタム検索は、<
    SPECROOT$
    >/custom/console/config ディレクトリ内の xml ファイルとして保存されます。
    注:
     [ロケータ]タブを使用して検索を作成する詳細については、「」を参照してください。
  2. 新しい検索の内容を getModelIDListByXmlSearchCriteria() への xml 入力として使用します。以下のマイナー コードの変更を加えます。
    • コーディングしている言語に適した文字列または char* データ型に検索条件を変換します。
    • 円記号(\)でコード内の任意の引用符をエスケープします。