實(shí)驗(yàn)13基于NGN平臺(tái)開發(fā)開戶、銷戶、停機(jī)、復(fù)機(jī)實(shí)驗(yàn)_第1頁
實(shí)驗(yàn)13基于NGN平臺(tái)開發(fā)開戶、銷戶、停機(jī)、復(fù)機(jī)實(shí)驗(yàn)_第2頁
實(shí)驗(yàn)13基于NGN平臺(tái)開發(fā)開戶、銷戶、停機(jī)、復(fù)機(jī)實(shí)驗(yàn)_第3頁
實(shí)驗(yàn)13基于NGN平臺(tái)開發(fā)開戶、銷戶、停機(jī)、復(fù)機(jī)實(shí)驗(yàn)_第4頁
實(shí)驗(yàn)13基于NGN平臺(tái)開發(fā)開戶、銷戶、停機(jī)、復(fù)機(jī)實(shí)驗(yàn)_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、e-Bridge 電信業(yè)務(wù)平臺(tái)實(shí)驗(yàn)指導(dǎo)書 開發(fā)類實(shí)驗(yàn)十三基于NGN平臺(tái)開發(fā)開戶、銷戶、停機(jī)、復(fù)機(jī)實(shí)驗(yàn)13.1 知識(shí)準(zhǔn)備1 對(duì)SoftX3000的了解和使用;對(duì)SoftX3000硬件設(shè)備要有一個(gè)簡(jiǎn)單的認(rèn)識(shí)了解,更主要的是對(duì)SoftX3000的業(yè)務(wù)知識(shí)及操作要有一個(gè)熟練的掌握,因?yàn)樵谧龌赟oftX3000平臺(tái)設(shè)備的電信開發(fā)實(shí)驗(yàn)過程當(dāng)中涉及了對(duì)SoftX3000業(yè)務(wù)知識(shí)的認(rèn)識(shí)。2 對(duì)中間件TLQ的配置使用;對(duì)中間件TLQ的了解與使用是為了方便在電信業(yè)務(wù)開發(fā)實(shí)驗(yàn)的過程中減少功能模塊間的相互通信,則選擇成熟的第三方工具來降低模塊間的因通信產(chǎn)生的異常概率,3 熟練應(yīng)用JAVA中的Socket通信。當(dāng)我們

2、在基于SoftX3000平臺(tái)設(shè)備上做電信業(yè)務(wù)開發(fā)的時(shí)候,需要對(duì)SoftX3000設(shè)備進(jìn)行命令操作,所以我們需要與設(shè)備進(jìn)行通信交互,以方便操作設(shè)備,所以在此我們要對(duì)與設(shè)備交互的Socket通信要會(huì)熟練的應(yīng)用。以上知識(shí)點(diǎn),可參閱SoftX3000軟交換使用手冊(cè)及TongLink安裝配置文檔.docJava知識(shí)基礎(chǔ)實(shí)驗(yàn)?zāi)康?3.2 訓(xùn)練目的 1、通過本實(shí)驗(yàn),讓學(xué)生了解基于電信業(yè)務(wù)平臺(tái)開發(fā)流程;2、讓學(xué)生了解SoftX3000(軟交換)開戶(銷戶,停機(jī),復(fù)機(jī))命令及簡(jiǎn)單操作;3、熟悉SDK包使用。實(shí)驗(yàn)內(nèi)容13.3 1313.3.1 硬件與軟件準(zhǔn)備1、搭建好MyEclipse開發(fā)環(huán)境的pc機(jī)器一臺(tái)和搭建

3、好Linux測(cè)試環(huán)境的pc機(jī)器一臺(tái) (可以使用虛擬機(jī)操作系統(tǒng)環(huán)境);2、電信業(yè)務(wù)開發(fā)平臺(tái)彩鈴平臺(tái)中已有的AIP_SMP模塊;AIP_SMP 模塊:AIP_SMP模塊為彩鈴平臺(tái)的配置管理模塊,此模塊中可以配置基本的用戶信息,并可以給電話號(hào)碼配置彩鈴鈴音信息。3、 第三方工具jar包(在工程中已添加)。13.3.2 數(shù)據(jù)準(zhǔn)備1、 增加工作站增加工作站的作用是為與SoftX3000(軟交換)建立通信的服務(wù)器開戶權(quán)限,以便服務(wù)器與SoftX3000(軟交換)設(shè)備連接進(jìn)行通信的時(shí)候方便有權(quán)限對(duì)SoftX3000(軟交換)設(shè)備進(jìn)行操作,如圖13-1、圖13-2所示: 圖13-1 增加工作站IP地址 圖13

4、-2 增加工作站權(quán)限通過SoftX3000(軟交換)維護(hù)終端登陸到SoftX3000(軟交換)服務(wù)器上去,然后如上圖操作給搭建有測(cè)試環(huán)境的pc電腦的IP地址添加權(quán)限;2、通過在帶SoftX3000(軟交換)維護(hù)軟件的PC,連接到SoftX3000(軟交換)交換機(jī)上去,在交換機(jī)上按下面流程增加數(shù)據(jù):增加呼叫源增加計(jì)費(fèi)情況修改計(jì)費(fèi)制式增加計(jì)費(fèi)情況索引增加本局呼叫字冠增加號(hào)段;3、準(zhǔn)備好SoftX3000軟交換機(jī)連接的服務(wù)IP地址,及向SoftX3000(軟交換)設(shè)備發(fā)送的開戶(銷戶,停機(jī),復(fù)機(jī))指令;4、準(zhǔn)備好彩鈴平臺(tái)中aip_smp模塊aip_uic模塊間交互的通信協(xié)議;5、在測(cè)試環(huán)境pc中建立

5、好aip_scp數(shù)據(jù)庫并初始化(請(qǐng)按照數(shù)據(jù)庫文件執(zhí)行操作)。13.4實(shí)驗(yàn)設(shè)備及實(shí)驗(yàn)網(wǎng)絡(luò)拓?fù)鋱D13-3(彩鈴平臺(tái)模塊間關(guān)系結(jié)構(gòu)圖) 在此實(shí)驗(yàn)過程中,我們需要開發(fā)的模塊功能為與頁面平臺(tái)交互,然后實(shí)現(xiàn)對(duì)SoftX3000軟交換機(jī)交互,達(dá)到對(duì)電話號(hào)碼在SoftX3000軟交換機(jī)上的開戶(銷戶,停機(jī),復(fù)機(jī))操作,我們?cè)趫D中將此模塊描繪為AIP_UIC模塊。實(shí)驗(yàn)步驟13.5圖13-4 彩鈴平臺(tái)aip_uic模塊消息流程圖 如圖13-4所示,aip_uic模塊在整體平臺(tái)架構(gòu)中所體系的功能,主要是實(shí)現(xiàn)了與aip_smp模塊進(jìn)行消息交互(主要是aip_smp模塊給aip_uic模塊發(fā)送開戶(銷戶,停機(jī),復(fù)機(jī))信

6、息),然后aip_uic模塊再與設(shè)備進(jìn)行交互,以達(dá)到實(shí)現(xiàn)電話號(hào)碼在SoftX3000交換機(jī)上的開戶(銷戶,停機(jī),復(fù)機(jī))功能。注:在實(shí)現(xiàn)aip_uic模塊與SoftX3000交換機(jī)的交互連接時(shí),我們可以通過socket來交互,可以為長(zhǎng)連接或者短連接,在實(shí)驗(yàn)過程中aip_uic模塊與SoftX3000交換機(jī)連接用的是短連接。短連接的好處在于需要的時(shí)候才進(jìn)行相互連接交互,不需要時(shí)則關(guān)閉,釋放資源,以免造成資源緊張。那么,我們打開開發(fā)工具,導(dǎo)入aip_uic工程,這工程是不完整的工程,需要編寫實(shí)現(xiàn)開戶、銷戶、停機(jī)以及復(fù)機(jī)等操作,我們要在此工程中要實(shí)現(xiàn)與aip_smp模塊的交互,并且還要能夠與SoftX

7、3000 (軟交換機(jī))設(shè)備進(jìn)行通信交互,以便達(dá)到我們能夠在aip_smp模塊頁面上實(shí)現(xiàn)對(duì)SoftX3000 (軟交換機(jī))設(shè)備的操作,在SoftX3000 (軟交換機(jī))設(shè)備上進(jìn)行電話號(hào)碼的開戶、銷戶、停機(jī)以及復(fù)機(jī)功能(aip_uic主要功能為獲取aip_smp的相關(guān)于對(duì)SoftX3000 (軟交換機(jī))操作的信息,然后將其進(jìn)行組裝成SoftX3000 (軟交換機(jī))識(shí)別的命令,從而達(dá)到能夠在SoftX3000 (軟交換機(jī))上對(duì)電話號(hào)碼進(jìn)行開戶、銷戶、停機(jī)以及復(fù)機(jī)的效果。 下面我們來實(shí)現(xiàn)aip_uic模塊的功能:package com.xunfang.aip.uic.agent;import msof

8、t.epay.util.LoadConfig;import msoft.epay.util.logging.Log;import msoft.epay.util.tp.ThreadPool;import msoft.epay.util.tp.ThreadProvider;import com.xunfang.aip.uic.config.XMLParse;import com.xunfang.aip.uic.handle.EsbHandle;import com.xunfang.aip.uic.handle.Handler;import com.xunfang.aip.uic.tool.Con

9、stant;public class UicMain public static void main(String args) /導(dǎo)入工具類LoadConfig.getConfig();System.out.println(aip_uic開始啟動(dòng),版本號(hào)_V );L(aip_uic開始啟動(dòng),版本號(hào)_V );/讀取配置文件信息XMLParse t = new XMLParse();t.initXML();/初始返回碼信息Constant.initSmpRecode();Constant.initBusinessMap();/初始化線程池ThreadPoo

10、l pool = ThreadProvider.getInstance().getThreadPool();/啟動(dòng)接收ESB消息處理線程Handler esb = new EsbHandle();esb.setThreadPool(pool);esb.start();/* * 初始化日志記錄器 */Runtime.getRuntime().addShutdownHook(new Thread()public void run()L(系統(tǒng)正在退出.););可以看出類為主函數(shù)類,且在主類中主要啟動(dòng)了一個(gè)線程類EsbHandle.java,這個(gè)類是我們用來獲取中間件TLQ隊(duì)列中aip_

11、smp模塊傳遞過來的消息的,如下為類EsbHandle.java中關(guān)鍵方法,用來接收中間件隊(duì)列消息使用的。省略/* * 啟動(dòng)業(yè)務(wù)處理 */public void deal() /調(diào)用中間件服務(wù)EsbService esb = ServiceFactory.getEsbService();trywhile(true)/循環(huán)接收信息Message message = esb.recive();/取消息if(message = null)/獲取獲取的消息為空,則暫停10msThread.sleep(10);continue;String tradeNo = message.getTradeNo().

12、trim();/獲取處理碼String seqno = message.getSeqNo();/獲取流水號(hào)L(獲取ESB信息: + message.toString();/String className = xml.getSonAttr(BUSINESS, TRADENO, tradeNo, class);String className = (String)Constant.dealBusiness.get(tradeNo);Class dealclass = Class.forName(className);/獲取處理類Business bus = (Business)de

13、alclass.newInstance();bus.setMessage(message);BusinessProcess procbus = new BusinessProcess(bus);threadPool.run(procbus);catch(Exception e)Log.error(接收ESB消息錯(cuò)誤, e);省略從上面的消息處理方法中,我們可以看出TLQ消息隊(duì)列獲取到aip_smp模塊發(fā)送的消息,獲得消息后,解析出消息處理碼并判斷出業(yè)務(wù)類型,然后再調(diào)用相應(yīng)的業(yè)務(wù)線程類來處理相應(yīng)的業(yè)務(wù)類型。在SoftX3000平臺(tái)上開發(fā)開戶,銷戶,停機(jī),復(fù)機(jī)此四類操作基本是一致的,區(qū)別在于命令的

14、不同以及銷戶、停機(jī)、復(fù)機(jī)三種操作都是基于開戶操作之后進(jìn)行,就是必須先要對(duì)電話號(hào)碼進(jìn)行開戶,即放號(hào)后,才可以對(duì)電話號(hào)碼進(jìn)行銷戶、停機(jī)、復(fù)機(jī)等操作。所以我們此次實(shí)驗(yàn)過程當(dāng)中,我們只實(shí)現(xiàn)了開戶操作,而其它三類操作大家可以在實(shí)驗(yàn)之外進(jìn)行完成。下面我們要實(shí)現(xiàn)的是電話號(hào)碼的開戶,實(shí)現(xiàn)一個(gè)開戶類,以達(dá)到能夠在SoftX3000軟交換機(jī)上進(jìn)行開戶操作。package com.xunfang.aip.uic.business.ngn;import java.util.HashMap;import msoft.epay.esb.Message;import msoft.epay.util.logging.Log;

15、import com.xunfang.aip.uic.business.Business;import com.xunfang.aip.uic.socket.ClientSocket;import com.xunfang.aip.uic.tool.Constant;public class AddBussiness implements Business/* * XML消息 */private Message message ;/* * socket客戶端 */private ClientSocket client=null;/* * NGNService對(duì)象 */private NGNSer

16、vice ngnService=null;/* * 業(yè)務(wù)流程 */public void deal() try ngnService=new NGNService(message);client = new ClientSocket(message);boolean isConnect = client.connect();/連接設(shè)備if(!isConnect)/連接失敗 ngnService.sendErrResponse(019, NGNService.NGN_RE_LOGIN_FAILED);return; HashMap login = ngnService.loginNgn(clie

17、nt);String flag = (String)login.get(flag);if(flag.equals(1)/登陸失敗ngnService.sendErrResponse(019, (String)login.get(ErrMsg);return;byte recv = null;String recode = null;/開戶消息1byte sendMsg0 = ngnService.getAddMsg0();/開戶消息2byte sendMsg1 = ngnService.getAddMsg1();int sendLen0 = client.send(sendMsg0);recv

18、 = client.receive(Constant.RETCODE_FLAG);recode = NGNService.getNgnRecode(recv);if(sendLen00 | recode=null | ( !recode.equals(7406) & !recode.equals(0) )/聯(lián)機(jī)設(shè)定未完成ngnService.sendNoContentMess( 020, 1);L(開戶返回碼: + recode);return;Thread.sleep(500);int sendLen1 = client.send(sendMsg1);recv = client

19、.receive(Constant.RETCODE_FLAG);recode = NGNService.getNgnRecode(recv);if(sendLen10 | recode=null | !recode.equals(0)ngnService.sendNoContentMess(020, 1);return;ngnService.sendNoContentMess(000, 1);catch(Exception e)Log.error(NGN開戶,解析包錯(cuò)誤, e);ngnService.sendNoContentMess(001, 1);finallyclient.socketC

20、lose();/* * 設(shè)置處理消息 */public void setMessage(Object msg) message = (Message)msg;在AddBussiness.java類中,我們實(shí)現(xiàn)了通過與aip_smp之間的協(xié)議解析與之相關(guān)的交互信息,也實(shí)現(xiàn)了與設(shè)備的通信連接和交互。我們?cè)谡{(diào)用與SoftX3000(軟交換機(jī))設(shè)備交互前,還需要先實(shí)現(xiàn)與SoftX3000(軟交換機(jī))設(shè)備的連接通信:package com.xunfang.aip.uic.socket;import java.io.DataInputStream;import java.io.DataOutputStre

21、am;import java.io.IOException;import .Socket;import .SocketException;import .UnknownHostException;import java.util.Map;import msoft.epay.esb.Message;import msoft.epay.util.logging.Log;public class ClientSocket /* * socket連接 */private Socket sockChannel=null;/* * timeOut超時(shí)時(shí)間 */private int timeOut= 20

22、 * 1000;/* * 是否連接 */private boolean isConnected;/* * 數(shù)據(jù)輸入流 */ private DataInputStream input; /* * 數(shù)據(jù)輸出流 */ private DataOutputStream output; /* * 主機(jī)地址 */ private String remote = ; /* * 端口號(hào) */ private int port = 17700;/* * 默認(rèn)構(gòu)造函數(shù) */public ClientSocket()private byte message = new byte6134;/* * 構(gòu)造函數(shù) * p

23、aram ip ip地址 * param port 端口號(hào) */public ClientSocket(String ip, int port)this.remote = ip;this.port = port;/* * 構(gòu)造函數(shù) * param context */public ClientSocket(Message message)/ 獲取消息內(nèi)容Map context = message.getContext();this.remote = (String)context.get(LoginAddr);this.port = Integer.parseInt(String)contex

24、t.get(LoginPort); /* * 連接主機(jī) * return */public boolean connect()boolean connected = false;try sockChannel = new Socket(remote, port);sockChannel.setReuseAddress(true);sockChannel.setSoTimeout(timeOut);if(sockChannel.isConnected()this.isConnected = true;/數(shù)據(jù)輸入流 input = new DataInputStream(sockChannel.g

25、etInputStream(); /數(shù)據(jù)輸出流 output = new DataOutputStream(sockChannel.getOutputStream(); connected = true;elseif(sockChannel!=null)sockChannel.close();sockChannel=null;this.isConnected = false;L(創(chuàng)建連接失敗:+remote+:+port); catch (UnknownHostException e) Log.error(連接主機(jī)失敗:+remote+:+port, e); catch (IOE

26、xception e) Log.error(連接主機(jī)失敗、創(chuàng)建輸入輸出流錯(cuò)誤: +remote+:+port, e);return connected;/* * 設(shè)置socket超時(shí)時(shí)間,單位(秒) * param time */public void setTimeOut(int time)if(sockChannel=null) return;try sockChannel.setSoTimeout(time*1000); catch (SocketException e) Log.error(GSMTelecom設(shè)置超時(shí)失??!, e);/* * 關(guān)閉輸入、輸出流、socket連接 */p

27、ublic void socketClose()try /L(關(guān)閉socket連接); if(input!=null) input.close(); if(output!=null) output.close(); if(sockChannel!=null) sockChannel.close(); catch(Exception ex) Log.error(關(guān)閉socket連接失敗, ex); /* * 發(fā)送數(shù)據(jù)信息 */ public int send(byte send) try if(send=null) return -1; output.write(send); ou

28、tput.flush(); L(發(fā)送消息:+new String(send); catch(Exception e) Log.error(發(fā)送數(shù)據(jù)錯(cuò)誤!, e); return -1; return send.length; /* * 接收數(shù)據(jù)信息 */public byte receive(String retCode)/最后返回?cái)?shù)組byte destMsg = null;/接收次數(shù)int recvTime=0;/每次實(shí)際接受的數(shù)據(jù)長(zhǎng)度int rn=0;try while(recvTime0)String temp=new String(message,0,rn);if(.eq

29、uals(retCode)|temp.indexOf(retCode)!=-1)break; recvTime+; Thread.sleep(500);if (rn 0) destMsg = new bytern;System.arraycopy(message, 0, destMsg, 0, rn);L(接收消息 + rn + : + new String(destMsg); catch (IOException e) Log.error(SOCKET接收數(shù)據(jù)異常!, e); catch (InterruptedException e) Log.error(SOCKET接收數(shù)據(jù)異常!, e);return destMsg;/* * 返回是否連接標(biāo)識(shí) * return */public boolean isConnected()return this.isConnected;ClientSocket.java實(shí)現(xiàn)了與設(shè)備的連接方法,向設(shè)備發(fā)送消息,并接收設(shè)備返回信息的方法。所以在AddBussiness.java類中,建立了一個(gè)與SoftX3000(軟交換機(jī))設(shè)備交互的連接,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論