麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Java > 正文

BCB中Corba Name Service使用方法

2019-09-06 23:33:40
字體:
來源:轉載
供稿:網友

                    由于在嘗試用BCB 4訪問NameService時,遇到了一些奇奇怪怪的問題,而Visibroker所帶的例子卻可以用bcc32正常編譯運行,俺決定從頭做一個程序看看問題出在哪里。折騰了一夜,結論是做服務器還是不用Corba Server wizard好。(我還是不明白為什么?)

1、File| New, Multitier,Corba IDL File:

interface Order{

string Name();

};

存為order.idl

2、File|New, Consol Wizard,生成一個無vcl支持的consol應用。

3、Project|Add to project,選上剛寫的order.idl,Project | Compile之。

4、File|New, Miltitier, Corba Object Implementation,IDL選剛寫的order.idl,Interface選Order,為簡明起見,其它的名字就不改了。確定,自動生成OrderServer.cpp。

5、在OrderServer.cpp中找到char* OrderImpl::Name(),在其函數體中寫:
return "Hi, I am Test CorbaServer";

6、File | Save All,Unit1.cpp存為tcnServer.cpp,Project存為tcnServer.bpr。然后Make之。一個簡單的Corba Server就做好了。

7、測試運行一下,然后在MS-Dos方式下運行osfind.exe(應該在path里,否則到$(VBroker)in里找),這時會顯示一系列的corba信息:

C:>osfind

osfind: Found one agent at port 14000
    HOST: YANGWU

osfind: Found 1 OADs in your domain
HOST: YANGWU

osfind: Following are the list of Implementations registered with OADs.
    HOST: YANGWU

        REPOSITORY ID: IDL:CorbaTester/DBServer2Factory:1.0
            OBJECT NAME: DBServer2

osfind: Following are the list of Implementations started manually.
HOST: YANGWU

        REPOSITORY ID: IDL:Order:1.0
            OBJECT NAME: OrderObject

        REPOSITORY ID: IDL:visigenic.com/Activation/OAD:1.0
            OBJECT NAME: 61.132.58.166


8、確定無誤后,回到IDE中,打開tcnServer.CPP,在#include的最后部分加上:
#include "CosNaming_c.hh"
然后,Project | Add To Project,將$(VBroker)libame_br.lib加到工程中,這時tcnServer.CPP的頂部分出現USELIB("......vbrokerlibame_br.lib"); 一行代碼。其中的path與你的Visibroker安裝目錄及工程的保存位置都有關,以你的BCB生成的代碼為準。

9、boa->obj_is_ready(&order_OrderObject);一句(如無意外應為26行),在這一行和下邊的注釋// Wait for incoming requests之間加上以下代碼段,完成NamingContext建立、Name建立、Name綁定的工作:
//獲取由命令行參數傳入的NameComponent
const char* id = argv[1];
const char* kind = argv[2];
//取得默認的NamingContext對象
CosNaming::NamingContext_var context = CosNaming::NamingContext::_bind();
//生成一個Name對象
CosNaming::Name name;
//設定Name中只包含1個{id,kind}的NameComponet
name.length(1); name[0].id = id; name[0].kind = kind;
//將該名字綁定給程序中建立的對象實例order_OrderObject
context->bind(name, &order_OrderObject);
//在consol上輸出已經綁定的名字。
cout << "The object is bound: "" << name[0].id << "" "" << name[0].kind << """ << endl;

10、File | Save All,Project | Make之。

11、測試運行:進入MS-DOS方式,
start nameextf MyTester test.log //啟動NamingContext Factory
start tcnServer MyName MyKind //啟動服務器,指定其名字為{MyName, MyKind}
再用osfind查看就會發現最后的REPOSITORY里OBJECT NAME里出現了一個OrderObject。

D:Program FilesBorlandCBuilder4Projectscn>osfind

osfind: Found one agent at port 14000
/tHOST: YANGWU

osfind: Found 1 OADs in your domain
/tHOST: YANGWU

osfind: Following are the list of Implementations registered with OADs.
/tHOST: YANGWU

/t/tREPOSITORY ID: IDL:CorbaTester/DBServer2Factory:1.0
/t/t/tOBJECT NAME: DBServer2

osfind: Following are the list of Implementations started manually.
/tHOST: YANGWU

/t/tREPOSITORY ID: IDL:omg.org/CosNaming/NamingContext:1.0
/t/t/tOBJECT NAME: Tester/1

/t/tREPOSITORY ID: IDL:omg.org/CosNaming/ExtendedNamingContextFactory:1.0
/t/t/tOBJECT NAME: Tester

/t/tREPOSITORY ID: IDL:visigenic.com/Activation/OAD:1.0
/t/t/tOBJECT NAME: 61.132.58.166

/t/tREPOSITORY ID: IDL:Order:1.0
/t/t/tOBJECT NAME: OrderObject

--------------------------------------------------------------------------------

下邊就做個Client來試試訪問。

1、File | New,Consol Wizard,做一個不支持VCL的consol應用。

2、Project| Add To Project,將選前邊做server時寫的order.idl加進來。

3、File | Save All,取名為tcnClientConsol.bpr(.cpp),存到server同一目錄里。(在其下建立一個client子目錄似乎也不錯)。

4、Edit | Use Corba Object,IDL File已經填好,如果不對手動改為order.idl,Interface選Order,Object Name寫OrderObject(做服務器時指定的)。其余不改,確定。

5、注意此時主程序中已經完成了orb和boa的初始化工作。注意,注釋掉boa->impl_ready();!

6、在主程序頭部加上#include "CosNaming.hh",并將$(VBroker)libame_br.lib加進Project。

7、在main()的那個try的最后,加上如下代碼:
const char* id=argv[1];
const char* kind=argv[2];
CosNaming::NamingContext_var context=CosNaming::NamingContext::_bind();
CosNaming::Name name;
name.length(1); name[0].id=id;name[0].kind=kind;
CORBA::Object_var obj=context->resolve(name);
Order_var order=Order::_narrow(obj);
cout<< "test result: "<<order->Name()<< endl;

8、啟動服務器并綁定名字給它,然后運行客戶程序。要說明的是如下幾點:首先我們在服務器中沒有注銷名字的動作,所以用綁定過的名字再來啟動服務器就會提示已經綁定過的提示并自動退出,所以每次要用不同的名字來啟動服務器,或每次都將test.log刪掉后從頭做。其次如果test.log不清除,那只要有一個服務器的實例在運行,就可以使用定義過的任何一個名字來取得服務器對象引用。第三測試過程可以不退出nameextf這個factory,省掉操作,而如果不刪除test.log的話,重啟nameextf后,它會自動恢復到上次退出時的狀態,即所有的名字仍可使用。最后,如果進行名字綁定的那個對象實例在內存中,那么使用該名字訪問該對象速度最快,用其它名字則要慢很多(3~5秒)。


--------------------------------------------------------------------------------

做一個漂亮的Windows客戶

1、File | New,Multitier,Corba Client,GUI型,IDL選order.idl。

2、Edit | Use Corba Object,Interface選Order,ObjectName填OrderObject。

3、File | Save All,Project存為tcnClient.bpr,unit1.cpp存為OrderClient.cpp

4、Form1上放一個Edit1,一個Button1,Button1的OnClick代碼為:
Edit1->Text=AnsiString(order->Name());

5、這時一個簡單的CORBA CLIENT做好了,試一下Project | Make,Run。

6、在Form1上再放兩個Edit(2,3),其Text分別為"MyName","MyKind",放兩個Lable,注明這兩個Edit分別代表"name[0].id","name[0].kind"。

7、在Form1上放個Button,Button2的OnClick代碼為:

try {
  Edit1->Text="正在查找名為:{"+Edit2->Text+","+Edit3->Text+"}的對象";
  CosNaming::NamingContext_var context = CosNaming::NamingContext::_bind(); //取根名字空間
  CosNaming::Name name;
  char id[32],kind[32];
  strcpy(id ,Edit2->Text.c_str());
  strcpy(kind ,Edit3->Text.c_str());
  name.length(1);
  name[0].id = id;
  name[0].kind = kind; //以上將Edit2,Edit3的內容組成一個名字,存在name中。
  CORBA::Object_var object = context->resolve(name); //求解這個名字,得到對CORBA對象的引用
  Order_var test = Order::_narrow(object);
  if(!CORBA::is_nil(test)) {Edit1->Text=AnsiString(test->Name()); }
  else Edit1->Text="訪問失敗!";
}
catch(const CORBA::Exception& e)
{
  ShowMessage(e._description.name());
  exit(1);
}


--------------------------------------------------------------------------------

樣本工程源碼(內含consol Server、WinGUI Server、consol Client、WinGUI Client)
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 91九色福利| 曰韩一二三区 | 一区二区三视频 | 成人午夜一区 | 成人毛片免费看 | 亚洲午夜天堂吃瓜在线 | 国产毛片毛片 | 毛片在线免费播放 | 中文字幕亚洲一区二区三区 | 日本黄色免费观看视频 | 国产噜噜噜 | 国产第一页精品 | 蜜桃精品视频 | 精品三区视频 | 成人区精品一区二区婷婷 | 亚洲国产综合在线观看 | 一区二区三区四区视频在线观看 | 久久久久久久久国产 | 黄视频网站免费 | 午夜视频成人 | 成人精品视频在线 | 免费黄色短视频网站 | 99精品视频在线观看免费播放 | 国产91久久久久久 | 中文字幕天堂在线 | 88xx成人永久免费观看 | 爱高潮www亚洲精品 欧美黄色一级片视频 | 色天使中文字幕 | 羞羞视频入口 | 特级毛片免费视频 | 国产一级αv片免费观看 | 国产成人高清成人av片在线看 | 黄色一级片在线观看 | 日本成人午夜视频 | 国产精品av久久久久久网址 | 国产成人在线综合 | 久久久久久久久久性 | 亚洲影视中文字幕 | 欧美一级毛片特黄黄 | 性插视频 | 午夜视频在线观 |