Cisco的SCSM裡的SM(Subscriber Manager)提供兩類API:Blocking和Nonblocking,call Blocking的API等到它的return,表示它進行的交易全數完成才傳回,而且提一堆get開頭的查詢API。而涉及到Subscriber的增改刪,若使用Blocking API,通常要等SM內部commit完成才會把結果傳回,而Nonblocking API則可以把交易提出後,設置Listener等候SM傳回交易結果,這樣做的好處是系統可以往下處理不必枯等結果,是做Cisco都會建議使用Nonblocking API,而使用Blocking API則占了一個connection,所以萬一要使用Blocking API,Cisco也建議建置一個Pool來管理,避免connect又disconnect,甚至漏掉disconnect動作導致connection的浪費。
以下是使用Blocking API查詢用戶是否存在的Sample,需include smapi.jar:
import com.pcube.management.api.SMBlockingApi;
public class CiscoSM {
public static boolean subscriberExists(String subscriberId) {
SMBlockingApi smapi = new SMBlockingApi(); // Cisco官方建議, SM Api需在finally裡disconnect, 不管先前有無connect
boolean flag = false;
try {
smapi.setReplyTimeout(10000);
smapi.connect("127.0.0.1");
flag = smapi.subscriberExists(subscriberId);
System.out.println(subscriberId + " exists ? " + flag);
} catch (Exception e) {
e.printStackTrace();
} finally {
smapi.disconnect();
return flag;
}
}
public static void main(String[] args) throws Exception {
subscriberExists("0123456789");
}
}
P.S: smapi.jar尚會reference如後的jar檔: asn1rt.jar, jdmkrt.jar, log4j.jar, log4j.properties, xerces.jar, jce-jdk13-133.jar
SM的Subscriber name命名規則是ASCII code 32~126可列印字元,除了34 ("), 39 ('), and 96 (`)外,最多64個字元。domain在SM裡是一個領域概念,每個Subscriber只屬一個domain,這domain由單一的SM對SCE做更好的網路流量配置。目前SM預設一個domain,叫做"subscribers"。