開発 API を使用したウォッチ
casp1032jp
CA Spectrum
に登録すると、以下のようなイベントの非同期通知が可能になります。- モデルの作成および削除
- 属性値の変更
- イベントおよび統計の作成
- アラーム更新
クライアント アプリケーションは、サーバ上のオブジェクトへの参照を取得し、これらのスタブを使用してオブジェクトのリモート メソッド呼び出しを行います。非同期通知を登録するには、クライアント自体がウォッチ オブジェクトをインスタンス化し、サーバに参照を渡して、指定された条件が発生した場合にオブジェクトのメソッドを呼び出すよう指示します。指定された条件が発生した場合、サーバはクライアントのウォッチ オブジェクトのメソッドを呼び出し、クライアントに通知します。
CA Spectrum
ナレッジ ベース内の特定の属性値が変更されたときに通知されるクライアント アプリケーションを作成する場合は、最初に属性値の変更クラス、たとえば AttrValCallback を設計する必要があります。クライアント プログラムはクラスをインスタンス化し、オブジェクト参照(およびウォッチする属性 ID)を CA Spectrum
に渡します。属性値が変更された場合、CA Spectrum
は AttrValCallback クラスで attrValsChanged メソッドを呼び出します。属性値の変更における重要な要因は以下のとおりです。
- CA Spectrumが属性の変更を検出するには、メモリ フラグを設定する必要があります。設定されていない場合、CA Spectrumは比較のために最後の既知の値を保持しないため、属性変更メカニズムは機能しません。
- 外部属性の場合は、ポーリングされたフラグを設定する必要があります。CA Spectrumは、外部から指定されたすべての期間をポーリングするメカニズムがないと、他のプログラムが属性を読み取るまで変更を検出しません。
ウォッチを設定する方法
ウォッチの設定には、以下の手順が含まれます。
- コールバック用のクラス ファイルを作成し、目的のコールバック クラスから拡張します。
- コールバック クラスをインスタンス化してそれぞれのドメインに渡すメイン クラスを作成します。
以下の表に、利用可能なコールバック クラスとそれらのドメインを示します。
Monitor | 拡張コールバック クラス | ドメイン |
属性値の変更 | CsCAttrValWatchCBPOA | モデル ドメイン |
モデルの作成/破棄 | CsCModelWatchCBPOA | モデル ドメイン |
モデル関連付けの変更 | CsCAssocModelWatchCBPOA | モデル ドメイン |
イベント作成 | CsCEventWatchCBPOA | イベント ドメイン |
アラームの作成/変更/クリア | CsCAlarmWatchCBPOA | アラーム ドメイン |
モデル ID の属性変更をウォッチする例
以下の例では、指定されたモデル ID の属性変更をウォッチする方法を示します。
import java.io.*; import com.aprisma.spectrum.core.idl.* ; import com.aprisma.spectrum.core.util.* ; import com.aprisma.util.corba.* ; import com.aprisma.spectrum.core.idl.CsCAttribute.* ; import com.aprisma.spectrum.core.idl.CsCModelPackage.* ; public class WatchAttrValue { public static void main(String[] args) { try { String domainName = new String("mySpectroSERVER"); CORBAHelper hlp = CORBAHelper.getHelperImpl(); hlp.init(null, null); CsCModelDomain md = (CsCModelDomain) hlp.getObjectImplementation (CsCModelDomain.class, domainName); AttrValCallback callback = new AttrValCallback(); //decode model ID int[] modelIDs = {Integer.decode(args[0]).intValue()}; int[] attrs = {0x1006e}; //model name CsCAttrReadMode_e[] readModes = {CsCAttrReadMode_e.CSC_MOST_AVAILABLE}; CsCAttrValWatchCB cb = CsCAttrValWatchCBHelper.narrow( hlp.servant_to_reference( callback ) ); CsCAttrValListOfModels avlm = md.startWatchAttrValsOfModelsByIDs(modelIDs, attrs, readModes, cb); System.out.println("Watching started.." + " Press Enter to exit"); System.in.read(); md.stopWatchAttrValsOfModelsByIDs(cb, attrs, modelIDs); } catch (Throwable e) { System.out.println(e); } } } import java.io.*; import com.aprisma.spectrum.core.idl.* ; import com.aprisma.spectrum.core.idl.CsCAttribute.* ; import com.aprisma.spectrum.core.idl.CsCException.*; import com.aprisma.spectrum.core.idl.CsCModelPackage.*; import com.aprisma.spectrum.core.idl.CsCError.*; public class AttrValCallback extends CsCAttrValWatchCBPOA { public void attrValsChanged ( CsCAttrValListOfModels avlom) { System.out.println("Overall:" + avlom.error.toString()); for (int i = 0; i < avlom.list.length; i++) { CsCModelAttrValList mavl = avlom.list[i]; System.out.println("Model ID:" + mavl.modelID); CsCAttrValList avl = mavl.attrValList; for (int j = 0; j < avl.list.length; j++) { CsCAttrValue av = avl.list[j]; CsCValue v = av.value; System.out.println("Attr ID:" + av.attributeID + " --> Value:" + v.textString()); } } } }
この例では、以下のオブジェクトとメソッドが必要です。
- パッケージ com.aprisma.spectrum.core.idl
- インターフェース
- CsCModelDomain
- CsCAttrValWatchCBPOA
- クラス
- CsCModelDomainHelper
- パッケージ com.aprisma.spectrum.core.idl.CsCModelPackage
- クラス
- CsCAttrValListOfModels
- CsCModelAttrValList
- パッケージ com.aprisma.spectrum.core.idl.CsCAttribute
- クラス
- CsCAttrValList
- CsCAttrValue
- CsCValue
- パッケージ com.aprisma.spectrum.core.idl.CsCError
- クラス
- CsCError_e
モデルの作成および削除をウォッチする例
モデルが削除された場合は、モデル ID のみを取得できます。詳細情報が必要な場合は、モデル ID のキー設定済みのリポジトリを作成する必要があります。
以下の例では、モデルの作成と削除をウォッチする方法を示します。
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.CsCModelPackage.*; import com.aprisma.spectrum.core.idl.CsCError.*; import com.aprisma.util.corba.*; public class WatchModel { public static void main( String[] args ) { Integer mtypeID = Integer.decode( args[0] ); int[] mtypeIDs = { mtypeID }; CsCModelDomain md = null; try { String domainName = new String( "mySpectroSERVER" ); CORBAHelper helper = CORBAHelper.getHelperImpl(); helper.init( null, null ); md = (CsCModelDomain) helper.getObjectImplementation( CsCModelDomain.class, domainName ); ModelCallback callback = new ModelCallback(); CsCModelWatchCB cb = CsCModelWatchCBHelper.narrow( helper.servant_to_reference(callback)); md.startWatchModelsByTypeIDs(mtypeIDs, cb); System.out.println( "Press Enter to exit" ); System.in.read(); md.stopWatchModelsByTypeIDs(mtypeIDs, cb); } catch (Throwable e) { System.out.println( e ); } } } 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.CsCModelPackage.*; import com.aprisma.spectrum.core.idl.CsCError.*; import com.aprisma.util.corba.*; public class ModelCallback extends CsCModelWatchCBPOA { public void modelsAdded( CsCModelPropList mpl ) { System.out.println( "Overall: " + mpl.error.toString() ); for ( int i=0; i < mpl.list.length; i++ ) { CsCModelProperties mp = mpl.list[i]; System.out.println("ModelID:" + mp.modelID); } } public void modelsRemoved( CsCModelPropList mpl ) { System.out.println( "Overall: " + mpl.error.toString() ); for ( int i=0; i < mpl.list.length; i++ ) { CsCModelProperties mp = mpl.list[i]; System.out.println( "ModelID:" + mp.modelID ); } } }
この例では、以下のオブジェクトとメソッドが必要です。
- パッケージ com.aprisma.spectrum.core.idl
- インターフェース
- CsCModelDomain
- CsCModelWatchCBPOA
- クラス
- CsCModelDomainHelper
- パッケージ com.aprisma.spectrum.core.idl.CsCModelPackage
- クラス
- CsCModelPropList
- CsCModelProperties
- パッケージ com.aprisma.spectrum.core.idl.CsCError
- クラス
- CsCError_e
モデル関連付けの変更をウォッチする例
以下の例では、モデル関連付けの変更をウォッチする方法を示します。
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.CsCModelPackage.*; import com.aprisma.spectrum.core.idl.CsCRelationPackage.*; import com.aprisma.spectrum.core.idl.CsCError.*; import com.aprisma.util.corba.*; public class WatchAssocModel { public static void main( String[] args ) { Integer modelID = Integer.decode( args[0] ); int[] modelIDs = { modelID }; int relationID = 0x10002; CsCModelDomain md = null; try { String domainName = new String( "mySpectroSERVER" ); CORBAHelper helper = CORBAHelper.getHelperImpl(); helper.init( null, null ); md = (CsCModelDomain) helper.getObjectImplementation( CsCModelDomain.class, domainName ); AssocModelCallback callback = new AssocModelCallback(); CsCAssocModelWatchCB cb = CsCAssocModelWatchCBHelper.narrow( helper.servant_to_reference(callback)); md.startWatchAssocModelsOfModels(relationID,modelIDs, CsCSide_e.CSC_RIGHT_SIDE, cb); System.out.println( "Press Enter to exit" ); System.in.read(); md.stopWatchAssocModelsOfModelsByIDs(cb, modelIDs); } catch (Throwable e) { System.out.println( e ); } } } 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.CsCModelPackage.*; import com.aprisma.spectrum.core.idl.CsCError.*; import com.aprisma.util.corba.*; public class AssocModelCallback extends CsCAssocModelWatchCBPOA { public void associatedModelsAdded(CsCAssocModelPropList ampl) { System.out.println( "Overall: " + ampl.error.toString() ); System.out.println( "Added Assoc: " + ampl.relationID); System.out.println( " For Model: " + ampl.withModel.modelID); System.out.println( " On Side: " + ampl.withSide.toString()); CsCModelPropList mpl = ampl.assocModelList; for ( int i=0; i < mpl.list.length; i++ ) { CsCModelProperties mp = mpl.list[i]; System.out.println(" ModelID:" + mp.modelID); } } public void associatedModelsRemoved(CsCAssocModelPropList ampl) { System.out.println("Overall: " + ampl.error.toString()); System.out.println("Remove Assoc: " + ampl.relationID); System.out.println(" For Model: " + ampl.withModel.modelID); System.out.println(" On Side: " + ampl.withSide.toString()); CsCModelPropList mpl = ampl.assocModelList; for ( int i=0; i < mpl.list.length; i++ ) { CsCModelProperties mp = mpl.list[i]; System.out.println( " ModelID:" + mp.modelID ); } } }
上記の例では、モデル タイプ ID を渡し、OneClick を通じてデバイス モデル タイプを追加または削除します。上記の例では、以下のオブジェクトとメソッドが必要です。
- パッケージ com.aprisma.spectrum.core.idl
- インターフェース
- CsCModelDomain
- CsCModelAssocWatchCBPOA
- AssocModelCallback
- パッケージ com.aprisma.spectrum.core.idl.CsCModelPackage
- クラス
- CsCModelPropList
- CsCModelProperties
- パッケージ com.aprisma.spectrum.core.idl.CsCRelationPackage
- クラス
- CsCSide_e
- パッケージ com.aprisma.spectrum.core.idl.CsCError
- クラス
- CsCError_e
モデルで作成されたイベントをウォッチする例
以下の例では、モデルで作成されたイベントをウォッチする方法を示します。
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.spectrum.core.idl.CsCError.*; import com.aprisma.util.corba.*; public class WatchEvent { public static void main( String[] args ) { Integer modelID = Integer.decode( args[0] ); CsCModelDomain md = null; try { String domainName = new String( "mySpectroSERVER" ); CORBAHelper helper = CORBAHelper.getHelperImpl(); helper.init( null, null ); md = (CsCModelDomain) helper.getObjectImplementation( CsCModelDomain.class, domainName ); CsCorbaFilterAttrNode node = CsCorbaAttrFilterHelper.createModelIDNode( CsCorbaEventHelper.MODEL_HANDLE, CsCOperator_e.CSC_EQUALS, modelID.intValue() ); CsCValue[] filter = node.getFilter(); int[] attrIDs = new int[5]; attrIDs[0] = CsCorbaEventHelper.CREATOR; attrIDs[1] = CsCorbaEventHelper.EVENT_TYPE; attrIDs[2] = CsCorbaEventHelper.MODEL_NAME; attrIDs[3] = CsCorbaEventHelper.MODEL_TYPE_NAME; attrIDs[4] = CsCorbaEventHelper.TYPE_ATTRIBUTES; CsCEventDomain ed = (CsCEventDomain) helper.getObjectImplementation( CsCEventDomain.class, domainName ); EventCallback callback = new EventCallback(); CsCEventWatchCB cb = CsCEventWatchCBHelper.narrow( helper.servant_to_reference(callback)); ed.startWatchEvents( filter, attrIDs, cb ); System.out.println( "Press Enter to exit" ); System.in.read(); ed.stopWatchEvents( cb ); } catch (Throwable e) { System.out.println( e ); } } } 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.spectrum.core.idl.CsCEventDomainPackage.*; import com.aprisma.spectrum.core.idl.CsCError.*; import com.aprisma.util.corba.*; public class EventCallback extends CsCEventWatchCBPOA { public void eventsCreated( CsCEventList el ) { System.out.println( "Overall: " + el.error.toString() ); for ( int i=0; i < el.list.length; i++ ) { CsCEvent event = el.list[i]; CsCAttrValList avl = event.attrValList; System.out.println( "EventCode: " + event.type ); for ( int j=0; j < avl.list.length; j++ ) { CsCAttrValue av = avl.list[j]; System.out.println( "AttrID: " + av.attributeID ); CsCValue val = av.value; System.out.println( "AttrVal: " + val.toString() ); } } } public void eventAttrValsUpdated( CsCEventList el ) { System.out.println( "Overall: " + el.error.toString() ); for ( int i=0; i < el.list.length; i++ ) { CsCEvent event = el.list[i]; CsCAttrValList avl = event.attrValList; System.out.println( "EventCode: " + event.type ); for ( int j=0; j < avl.list.length; j++ ) { CsCAttrValue av = avl.list[j]; System.out.println( "AttrID: " + av.attributeID ); CsCValue val = av.value; System.out.println( "AttrVal: " + val.toString() ); } } } }
上記の例では、コールバックによって返されるモデル フィルタと属性リストを渡します。上記の例では、以下のオブジェクトとメソッドが必要です。
- パッケージ com.aprisma.spectrum.core.idl
- インターフェース
- CsCModelDomain
- CsCEventWatchCBPOA
- クラス
- CsCModelDomainHelper
- パッケージ com.aprisma.spectrum.core.idl.CsCEventDomainPackage
- クラス
- CsCEvent
- パッケージ com.aprisma.spectrum.core.util
- インターフェース
- CsCorbaFilterAttrNode
- クラス
- CsCorbaAttrFilterHelper
- CsCorbaEventHelper
- パッケージ com.aprisma.spectrum.core.idl.CsCAttribute
- クラス
- CsCAttrValList
- CsCAttrValue
- CsCValue
- パッケージ com.aprisma.spectrum.core.idl.CsCError
- クラス
- CsCError_e
アラームの作成、クリア、および属性更新をウォッチする例
以下の例では、アラームの作成、属性更新、およびクリアをウォッチする方法を示します。
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.spectrum.core.idl.CsCAlarmDomainPackage.*; import com.aprisma.spectrum.core.idl.CsCError.*; import com.aprisma.util.corba.*; public class WatchAlarms { public static void main( String[] args ) { Integer modelID = Integer.decode( args[0] ); CsCModelDomain md = null; try { String domainName = new String( "mySpectroSERVER" ); CORBAHelper helper = CORBAHelper.getHelperImpl(); helper.init( null, null ); md = (CsCModelDomain) helper.getObjectImplementation( CsCModelDomain.class, domainName ); CsCAlarmDomain ad = md.getAlarmDomain(); CsCorbaFilterAttrNode node = CsCorbaAttrFilterHelper.createModelIDNode( CsCorbaAlarmHelper.MODEL_HANDLE, CsCOperator_e.CSC_EQUALS, modelID.intValue() ); CsCValue[] filter = node.getFilter(); int[] attrIDs = new int[1]; attrIDs[0] = CsCorbaAlarmHelper.CREATION_DATE; AlarmCallback callback = new AlarmCallback(); CsCAlarmWatchCB cb = CsCAlarmWatchCBHelper.narrow( helper.servant_to_reference(callback)); ad.startWatchAlarms( filter, attrIDs, cb ); System.out.println( "Press Enter to exit" ); System.in.read(); ad.stopWatchAlarms( cb ); } catch (Throwable e) { System.out.println( e ); } } } 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.spectrum.core.idl.CsCAlarmDomainPackage.*; import com.aprisma.spectrum.core.idl.CsCError.*; import com.aprisma.util.corba.*; public class AlarmCallback extends CsCAlarmWatchCBPOA { public void alarmsUpdated( CsCAlarmUpdate au ) { CsCAlarmList addlist = au.addList; CsCAttrValListOfAlarms changelist = au.changeList; System.out.println( "addList len:" + addlist.list.length + " changeList len:" + changelist.list.length ); for ( int i=0; i < addlist.list.length; i++ ) { CsCAlarm alarm = addlist.list[i]; System.out.println( "Added AlarmID:" + CsCorbaAlarmHelper.toString( alarm.alarmID ) ); System.out.println("Value: " + alarm.attrValList.list[0].value ); System.out.println("Value: " + alarm.attrValList.list[1].value ); } for ( int j=0; j < changelist.list.length; j++ ) { System.out.println( "Changed AlarmID:" + CsCorbaAlarmHelper.toString( changelist.list[j].alarmID ) ); } for (int k = 0; k < au.removeList.length; k++) { System.out.println("Removed AlarmID:" + CsCorbaAlarmHelper.toString(au.removeList[k])); } } }
上記の例では、コールバックによって返されるモデル フィルタと属性リストを startWatch メソッドに渡します。
CA Spectrum
がこのクラスに通知する AlarmCallback クラスには、新規作成、更新、および削除という 3 種類のアラームがあります。上記の例では、以下のオブジェクトとメソッドが必要です。
- パッケージ com.aprisma.spectrum.core.idl
- インターフェース
- CsCModelDomain
- CsCAlarmDomain
- クラス
- CsCModelDomainHelper
- パッケージ com.aprisma.spectrum.core.idl.CsCAlarmDomainPackage
- クラス
- CsCAlarm
- CsCAlarmList
- CsCAlarmUpdate
- CsCAttrValListOfAlarms
- パッケージ com.aprisma.spectrum.core.util
- インターフェース
- CsCorbaFilterAttrNode
- クラス
- CsCorbaAlarmHelper
- CsCorbaAttrFilterHelper
- パッケージ com.aprisma.spectrum.core.idl.CsCAttribute
- クラス
- CsCAttrValList
- CsCAttrValue
- CsCValue
- パッケージ com.aprisma.spectrum.core.idl.CsCError
- クラス
- CsCError_e