Cisco Transport Manager GateWay/CORBA ユーザ ガイド プログラマ マニュアル Release 7.1
OSS 使用例とクライアント開発
OSS 使用例とクライアント開発
発行日;2012/02/05 | ドキュメントご利用ガイド | ダウンロード ; この章pdf , ドキュメント全体pdf (PDF - 3MB) | フィードバック

目次

OSS 使用例とクライアント開発

OSS 使用例とクライアント開発

この付録では、インターセプタをリストし、NMS を EMS から再同期するための使用例を示します。

「EMS から NMS を再同期するための使用例」

「CTM Gateway/CORBA クライアント開発」

C.1 EMS から NMS を再同期するための使用例

表C-1 表C-2 および 表C-3 に、EMS から NMS を再同期するための使用例を示します。

 

表C-1 EMS から NMS を再同期するための使用例

情報
詳細

要約

NMS は、すべての EMS アラームと ManagedElement アラーム、および GateWay/CORBA インターフェイスから既存の MultiLayerSubnetwork、ManagedElement、PTP、CTP、SNC、保護グループの情報を取得します。

アクター

NMS

事前条件

NMS は EmsSessionFactory オブジェクトを検索し、EMSMgr_I、MultiLayerSubnetworkMgr_I、ManagedElementMgr_I、EquipmentInventoryMgr_I、MaintenanceMgr_I、ProtectionMgr_I、および PerformanceManagementMgr_I インターフェイスへの参照情報を取得します。

開始時期

NMS がすべての CTM 情報を取得する要求を送信したときに開始します。

説明

NMS は、GateWay/CORBA インターフェイスからの次の情報を要求します。

1. NMS は emsMgr::EMSMgr_I::getAllEMSSystemActiveAlarms インターフェイスを使用してすべての EMS アラームを要求します。

2. NMS は emsMgr::EMSMgr_I::getAllTopLevelSubnetworks インターフェイスを使用して CTM 内のすべての MultiLayerSubnetwork を要求します。

CTM は、MultiLayerSubnetwork の詳細情報の入った MultiLayerSubnetwork_T オブジェクトのリストを返します。

3. 各 MultiLayerSubnetwork_T オブジェクトに対して、NMS は multiLayerSubnetwork::MultiLayerSubnetworkMgr_I::getAllManagedElements インターフェイスを使用して、同じ MultiLayerSubnetwork に属するすべての ME を要求します。

CTM は、ManagedElement の詳細情報の入った ManagedElement_T オブジェクトのリストを返します。

各 ManagedElement オブジェクトに対して、NMS は使用例「NMS が(再)同期する ManagedElement に固有の情報」を実行します。

4. NMS は emsMgr::EMSMgr_I::getAllTopLevelTopologicalLinks インターフェイスを使用して、MultiLayerSubnetwork に関連付けられたすべてのトポロジー リンクを要求します。

CTM は、トポロジー リンクの詳細情報の入った TopologicalLink_T オブジェクトのリストを返します。

5. NMS は multiLayerSubnetwork::MultiLayerSubnetworkMgr_I::getAllVLANs インターフェイスを使用して、MultiLayerSubnetwork に関連付けられたすべての VLAN(仮想LAN)を要求します。

終了時期

NMS がすべての CTM 情報を取得したときに終了します。

例外

個別のインターフェイス メソッドがスローした例外を参照してください。

事後条件

NMS は CTM と同期を取ります。

NMS は CTM に登録して、CTM の管理対象オブジェクト、新規アラーム、および TCA への変更に関連する通知を取得します。

追跡可能性

--

 

表C-2 NMS が再同期する管理対象要素に固有の情報

情報
詳細

要約

NMS は、特定 ME のすべての PTP、CTP、SNC、および保護グループ情報を取得します。

アクター

NMS

事前条件

NMS は ManagedElementMgr_I、EquipmentInventoryMgr_I、MaintenanceMgr_I、ProtectionMgr_I、
および PerformanceManagementMgr_I インターフェイスへの参照を取得します。また、NMS は ManagedElement 名を取得します。

開始時期

NMS がすべての ME 情報を取得する要求を送信したときに開始します。NMS は、情報を取得する ME の名前を識別します。

説明

NMS は、GateWay/CORBA インターフェイスからの次の情報を要求します。

1. NMS は managedElementManager::ManagedElementManager_I::getAllActiveAlarms インターフェイスを使用して、ME の現在の全アラームを要求します。

2. NMS は equipment::EquipmentInventoryMgr_I::getAllEquipment インターフェイスを使用して、ME のすべての既存機器を要求します。

CTM は、ME の機器ホルダーと機器の詳細情報の入った EquipmentHolder_T オブジェクトのリストを返します。

3. EquipmentorHolder_T オブジェクトで取得する機器情報では、NMS は equipment::EquipmentInventoryMgr_I::getAllSupportedPTPs インターフェイスを使用して、機器でサポートされているすべての PTP を要求します。

CTM は、SDH_SONET ポート、ServiceState(サービス状態)、LineCode(ライン コード)、FrameFormat(フレーム形式)など、PTP の詳細情報の入った TerminationPoint_T オブジェクトのリストを返します。

4. 各 TerminationPoint_T オブジェクトに対して、NMS は使用例「NMS が(再)同期する終端地点に固有の情報」を実行します。

5. NMS は managedElementManager::ManagedElementManager_I::getAllSNCs インターフェイスを使用して、SNC で開始、SNC で終了、または ME を通過するすべての SNC を要求します。

CTM はレイヤ レート、SNC の状態、SNC の保護状態、aEnd CTP、zEnd CTP など、SNC の詳細情報の入った SubnetworkConnection_T オブジェクトのリストを返します。

6. NMS は protection::ProtectionMgr_I::getAllProtectionGroups インターフェイスを使用して、ME に作成されたすべての保護グループを要求します。

CTM は 1:1、1+1、2F-BLSR、リバーティブ、非リバーティブなど、保護グループの詳細情報の入った ProtectionGroup_T オブジェクトのリストを返します。

終了時期

NMS がすべての ME 固有の情報を取得したときに終了します。

例外

個別のインターフェイス メソッドがスローした例外を参照してください。

事後条件

NMS は ME の情報に関して CTM と同期を取ります。

追跡可能性

--

 

表C-3 NMS が再同期する TerminationPoint に固有の情報

情報
詳細

要約

NMS は、SNC が使用中の PTP および CTP のすべてのループバック情報とスレッシュホールド情報を取得します。

アクター

NMS

事前条件

NMS は ManagedElementMgr_I、MaintenanceMgr_I、および PerformanceManagementMgr_I インターフェイスへの参照を取得します。また、NMS は PTP のリストを取得します。

開始時期

NMS が、PTP および使用中の CTP のすべてのスレッシュホールド情報とループバック情報を取得する要求を送信したときに開始します。NMS は、情報を取得する TP の名前と種類(PTP または CTP)を識別します。

説明

NMS は、GateWay/CORBA インターフェイスからの次の情報を要求します。

1. NMS は maintenanceOps::MaintenanceMgr_I::getActiveMaintenanceOperations インターフェイスを使用して、TP のすべてのループバック情報を要求します。

CTM は、PTP に設定されたループバックのタイプ(設定されている場合)の詳細情報の入った、CurrentMaintenanceOperation_T オブジェクトのリストを返します。CTM は
FACILITY_LOOPBACK と TERMINAL_LOOPBACK の 2 つのタイプのループバックをサポートします。TP にループバックが設定されていない場合は、空のリストが返されます。

2. NMS は performance::PerformanceManagementMgr_I::getTCATPParameter インターフェイスを使用して、特定の TP オブジェクトのすべての PM スレッシュホールドに設定されたスレッシュホールド値を要求します。

CTM は、PTP の PM スレッシュホールドの名前と値のすべてのペアに関する詳細情報の入った、TCAParameter_T オブジェクトを返します。

3. TP として NMS に指定されている各 PTP に対して、NMS は managedElementManager::ManagedElementManager_I::getContainedInUseTPs インターフェイスを使用して、SNC に属している PTP に含まれるすべての CTP を要求します。

CTM は、SNC に属する CTP の詳細情報と、IPPMMonitor のステータスや J1 パスのトレース ステータスなどの関連するプロビジョニングの詳細情報の入った、TerminationPoint_T オブジェクトのリストを返します。

4. 各 CTP オブジェクトに対して、NMS は performance::PerformanceManagementMgr_I::getTCATPParameter インターフェイスを使用して、スレッシュホールド情報を要求します。

CTM は CTP の PM スレッシュホールドの名前と値のペアに関する詳細情報の入った、TCAParameter_T オブジェクトのリストを返します。

終了時期

NMS がすべての PTP および CTP のループバック情報とスレッシュホールド情報を取得したときに終了します。

例外

個別のインターフェイス メソッドがスローした例外を参照してください。

事後条件

NMS は TP オブジェクトの情報に関して CTM と同期を取ります。

追跡可能性

--

C.2 CTM Gateway/CORBA クライアント開発

CTM GateWay/CORBA では、TeleManagement Forum の Multi-Technology Network Management(MTNM)グループにより定義された Application Programming Interface(API)を実装しています。これらの API は、NMS と EMS 間の通信用に定義されています。NMS では、これらの API を使用するクライアント アプリケーションを開発する必要があります。次の項では、クライアント アプリケーションの開発に必要なツールについて説明します。また、コード例も示します。

C.2.1 推奨するツール

CORBA クライアントは、UNIX プラットフォームまたは PC プラットフォームで開発できます。シスコでは次の開発ツールを推奨します。

Sun Microsystems Java Development Kit(JDK)1.4.2(www.javasoft.com で入手可能)


) このウェブサイトは、Copyright © 1994-2006, Sun Microsystems, Inc. のサイトです。


JacORB 2.x

C.2.2 Java コード例

一般的な CORBA クライアント アプリケーションでは、次の手順を実行します。


ステップ 1 Object Request Broker(ORB; オブジェクト リクエスト ブローカ)へのクライアント接続を初期化します。

ステップ 2 ネーミング サービスへの参照を取得します。

ステップ 3 EMSSessionFactory への参照を解決します。「EMSSessionFactory への参照の取得」を参照してください。

ステップ 4 NmsSession_IOperations を実装します。「NmsSession_IOperations の実装」を参照してください。

ステップ 5 ユーザ名とパスワードを指定して EMSSession を取得します。「ログインと EmsSession の取得」を参照してください。

ステップ 6 EMSSession を照会し、操作に利用可能なマネージャのリストを取得します。「マネージャ リストの取得」を参照してください。

ステップ 7 目的のメソッドをそのマネージャで呼び出します。「EMS Manager での getEMS 操作」を参照してください。

クライアントで CTM GateWay/CORBA からの通知を受信するには、さらに次の手順を実行する必要があります。

ステップ 8 ステップ 2 のノーティフィケーション サーバ内の EventChannel オブジェクトへの参照を取得します。

ステップ 9 ConsumerAdmin オブジェクトへの参照を取得します。

ステップ 10 パラメータとして CosNotifyChannelAdmin::STRUCTURED_EVENT を指定し、SupplierAdmin オブジェクトの obtain_notification_push_consumer() を呼び出します。この操作によって、
StructuredProxyPushSupplier への参照が返されます。

ステップ 11 StructuredPushConsumer(OMG で定義)のインスタンスを実装します。

ステップ 12 StructuredProxyPushSupplier オブジェクトの操作 connect_structured_push_consumer() を呼び出し、StructuredPushConsumer 実装オブジェクトをノーティフィケーション チャネルに接続します。

ステップ 13 着信通知をモニタします。


 

ここでは、クライアント アプリケーションの開発に必要な手順用の Java コード例を示します。


) これらのコードは例としての目的でのみ示しており、実際にコンパイルしたコードとは異なる場合があります。これらのコード例は、一部の例外処理を省略しています。


C.2.2.1 クライアント接続の初期化

// Import OMG packages
import org.omg.CORBA.IntHolder;
import org.omg.CORBA.ORB;
import org.omg.CORBA.Policy;
 
// Import naming context packages.
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
 
// Import notify channel and event service packages.
import org.omg.CosEventChannelAdmin.AlreadyConnected;
import org.omg.CosEventChannelAdmin.TypeError;
import org.omg.CosNotifyChannelAdmin.AdminLimitExceeded;
import org.omg.CosNotifyChannelAdmin.AdminNotFound;
import org.omg.CosNotifyChannelAdmin.ClientType;
import org.omg.CosNotifyChannelAdmin.ConsumerAdmin;
import org.omg.CosNotifyChannelAdmin.EventChannel;
import org.omg.CosNotifyChannelAdmin.EventChannelHolder;
import org.omg.CosNotifyChannelAdmin.ProxySupplier;
import org.omg.CosNotifyChannelAdmin.StructuredProxyPushSupplier;
import org.omg.CosNotifyChannelAdmin.StructuredProxyPushSupplierHelper;
import org.omg.CosNotifyComm.StructuredPushConsumer;
import org.omg.CosNotifyComm.StructuredPushConsumerPOATie;
 
// Import POA packages
import org.omg.PortableServer.POA;
import org.omg.PortableServer.POAHelper;
import org.omg.PortableServer.POAPackage.ServantAlreadyActive;
import org.omg.PortableServer.POAPackage.WrongPolicy;
 
// Import TMF packages
import org.tmforum.mtnm.emsSession.EmsSession_I;
import org.tmforum.mtnm.emsSession.EmsSession_IHolder;
import org.tmforum.mtnm.emsSession.EmsSession_IPackage.managerNames_THolder;
import org.tmforum.mtnm.emsSessionFactory.EmsSessionFactory_I;
import org.tmforum.mtnm.emsSessionFactory.EmsSessionFactory_IHelper;
import org.tmforum.mtnm.nmsSession.NmsSession_I;
import org.tmforum.mtnm.nmsSession.NmsSession_IPOATie;
public static void main(String[] args)
{
 
try {
// Optional: set up ORB properties
// Properties sys_properties = System.getProperties();
// For Orbix 6.2 one may want to define the system properties
// sys_properties.put("org.omg.CORBA.ORBClass",
"com.iona.corba.art.artimpl.ORBImpl");
// sys_properties.put("org.omg.CORBA.ORBSingletonClass", "com.iona.corba.art.artimpl.ORBSingleton");
 
// Step 1: Initialize the ORB and obtain ROOT POA reference
// Note: ORB_init will process any -ORB arguments
// be called before any other argument processing.
//
global_orb = ORB.init(args, null);
org.omg.CORBA.Object root_poa = global_orb.resolve_initial_references("RootPOA");
POA rpoa = POAHelper.narrow(root_poa);
POA poa = rpoa.create_POA("myPolicy",null, new Policy[0]);
poa.the_POAManager().activate();
orb = ORB.init(args, null);
}
catch (SystemException ex) {
// Exception handling
}
}

C.2.2.2 ネーミング サービスへの参照の取得

// Get Nameservice reference
NamingContext nsRootContext = null;
try {
// Step 2: Get reference to the name service
// Option 1: Resolve initial reference (RIR)
// org.omg.CORBA.Object obj = global_orb.resolve_initial_references("NameService");
// or
// Option 2: corbaloc URL
String objRef = "corbaloc:iiop:gatewayserver.cisco.com:14005/NameServiceGWC";
// NOTE: Please replace "gatewayserver.cisco.com" with the name of the server on which CORBA Naming service is running
org.omg.CORBA.Object obj = global_orb.string_to_object(objRef);
 
// Narrow to root naming context
NamingContextExt root_context = NamingContextExtHelper.narrow(obj);
 
}
catch (org.omg.CORBA.ORBPackage.InvalidName inEx) {
// Exception handling
}

C.2.2.3 EMSSessionFactory への参照の取得

「ネーミング サービスへの参照の取得」の例に従い、ネーミング サービスへの参照を取得します。

NameComponent name = new NameComponent[6];
name[0] = new NameComponent("TMF_MTNM", "Class");
name[1] = new NameComponent("Cisco Systems", "Vendor");
name[2] = new NameComponent("Cisco Transport Manager", "EMSInstance");
name[3] = new NameComponent(version, "Version"); //where version = “7_1” for CTM R7.1
name[4] = new NameComponent(ctm_sys_id, "EMS"); // ctm_sys_id = "CTM"
name[5] = new NameComponent("SessionFactory", "EmsSessionFactory");
try {
org.omg.CORBA.Object emsSessionI = root_context.resolve(name);
}
catch (InvalidName inEx) {
// Exception handling
}
catch (NotFound nfEx) {
// Exception handling
}

C.2.2.4 NmsSession_IOperations の実装

import org.tmforum.mtnm.session.*;
import org.tmforum.mtnm.nmsSession.*;
 
public class SessionImpl implements NmsSession_IOperations {
 
Session_I myAssociatedSession = null;
public SessionImpl() {
super();
// TODO Auto-generated constructor stub
}
public void setAssociatedSession(Session_I emsSession) {
myAssociatedSession = emsSession;
}
public Session_I getAssoicatedSession (){ return myAssociatedSession;}
 
public void eventLossOccurred(String startTime, String notificationId) {
// TODO Auto-generated method stub
 
}
public void eventLossCleared(String endTime) {
// TODO Auto-generated method stub
 
}
 
public void historyPMDataCompleted(String fileName) {
// TODO Auto-generated method stub
 
}
 
public void historyPMDataFailed(String errorReason) {
// TODO Auto-generated method stub
 
}
public Session_I associatedSession() {
// TODO Auto-generated method stub
return null;
}
 
public void ping() {
// TODO Auto-generated method stub
 
}
 
public void endSession() {
// TODO Auto-generated method stub
 
}
 
}
}

C.2.2.5 ログインと EmsSession の取得

CTM GateWay/CORBA から操作を実行するには、クライアントがログインするときに CTM クライアントで作成したユーザ名とパスワードを使用する必要があります。「CTM GateWay/CORBA の OSS クライアント プロファイルの作成」を参照してください。

EmsSession_I m_emsSession = null;
SessionImpl mySessionImpl = new SessionImpl();
try {
EmsSessionFactory_I ems_ref = EmsSessionFactory_IHelper.narrow(emsSessionI);
EmsSession_IHolder emsSessionHldr = new EmsSession_IHolder();
NmsSession_IPOATie tieobj = new NmsSession_IPOATie(mySessionImpl, poa);
poa.activate_object(tieobj);
NmsSession_I nmsSession_ref = tieobj._this();
if (ems_ref != null) {
ems_ref.getEmsSession(user, password, nmsSession_ref, emsSessionHldr);
m_emsSession = emsSessionHldr.value;
}
} catch (Exception ex) {
// System.out.println("Could not narrow");
ex.printStackTrace();
}

C.2.2.6 マネージャ リストの取得

managerNames_THolder names = new managerNames_THolder();
m_emsSession.getSupportedManagers(names);
managers = names.value;
for (i = 0; i < managers.length; i++ )
{
System.out.print("Manager ");
System.out.print(i);
System.out.println(" " + managers[i]);
}

C.2.2.7 EMS Manager での getEMS 操作

EMS_T m_ems;
EMS_THolder m_emsHolder = new EMS_THolder();
try {
Common_IHolder mgrHolder = new Common_IHolder();
m_emsSession.getManager("EMS", mgrHolder);
EMSMgr_I emsMgr = EMSMgr_IHelper.narrow(mgrHolder.value);
emsMgr.getEMS(m_emsHolder);
}
catch (ProcessingFailureException pfe) {
System.out.println("Processing Exception" + pfe.getMessage());
pfe.printStackTrace();
}
m_ems = m_emsHolder.value;
System.out.println("Native EMS Name" + m_ems.nativeEMSName);

C.2.2.8 EventChannel への参照の取得

EventChannel notifChannel;
EventChannelHolder chanHolder = new EventChannelHolder();
try {
...
emsSession.getEventChannel(chanHolder);
}
catch (Exception ex){
// handle exceptions
}
notifChannel = chanHolder.value;

C.2.2.9 ConsumerAdmin への参照の取得

//retrieve default consumer admin
try {
ConsumerAdmin cadmin = notifChannel.get_consumeradmin(0);
}
catch (AdminNotFound anfSe) {
// Exception handling
}

C.2.2.10 ProxyPushSupplier の取得

IntHolder id = new IntHolder();
try {
ProxySupplier baseSupplier =
cadmin.obtain_notification_push_supplier(
ClientType.STRUCTURED_EVENT, id);
structuredProxyPushSupplier =
StructuredProxyPushSupplierHelper.narrow(baseSupplier);
}
catch (AdminLimitExceeded aleEx) {
// Exception handling
}

C.2.2.11 StructuredPushConsumer の実装

class StructuredPushConsumerImpl extends _StructuredPushConsumerImplBase
{
StructuredPushConsumerImpl() {
super();
System.out.println("StructuredPushConsumerImpl created.");
}
public void disconnect_structured_push_consumer() {
System.out.println("Disconnect structured push consumer.:");
}
public void push_structured_event(StructuredEvent notification) {
System.out.println("Received notification.");
}
public void offer_change(EventType[] added,
EventType[] removed)
throws InvalidEventType
{
System.out.println("Offer changed.");
}
}

C.2.2.12 StructuredPushConsumerImpl の接続

try {
StructuredPushConsumerImpl structProxyPushConsumer = new StructuredPushConsumerImpl();
StructuredPushConsumerPOATie structuredPushConsumerTieObj = new StructuredPushConsumerPOATie (structProxyPushConsumer, poa);
poa.activate_object(structuredPushConsumerTieObj);
StructuredPushConsumer pushCon = structuredPushConsumerTieObj._this();
structuredProxyPushSupplier.connect_structured_push_consumer(pushCon);
global_orb.run();
}
catch (ServantAlreadyActive sae) {
// Exception handling
}
catch (WrongPolicy wrongPolicyEx) {
// Exception handling
}

C.2.3  クライアントの実行

「ネーミング サービスへの参照の取得」のOption 2 のメソッドを使用しても初期ネーミング コンテキストが解決されない場合は、Orbix 6.2、Visibroker、JacORB のうちいずれかに作成した CORBA クライアントに、次の JVM フラグを使用する必要があります。

Orbix 6.2:

-ORBInitRef NameService=corbaloc:iiop:1.2@<host name>:<port>/NameServiceGWC

Visibroker:

-DORBInitRef NameService=corbaloc::<host name>:<port>/NameServiceGWC or
-DORBInitRef NameService=corbaname::<host name>:<port>/NameServiceGWC

JacORB:

-DORBInitRef.NameService=corbaname::<host name>:<port>/NameServiceGWC