2013-01-24 29 views
1

我想在C++在Ubuntu 12.04運行CORBA的例子問題運行:我生成一個日誌文件開始用C++在Ubuntu CORBA服務器,CORBA :: SystemException的

啓動服務器之前
$ ./Server 
'IOR:010000001600000049444c3a446174612f53657276696365413a312e3000000001000000000000006800000001010200100000003139322e3136382e3135392e31323900b1aa00000e000000fe4ba4015100001a19000000000000000200000000000000080000000100000000545441010000001c00000001000000010001000100000001000105090101000100000009010100' 
Caught CORBA::SystemException. 

omniNames -start 2812 -logdir ~/Desktop -errlog ~/Desktop/omniNamesError.txt 

這給了我一個文件〜/桌面/ omniNamesError.txt如下:

Thu Jan 24 22:54:34 2013: 

Starting omniNames for the first time. 
Wrote initial log file. 
Read log file successfully. 
Root context is IOR:010000002b00000049444c3a6f6d672e6f72672f436f734e616d696e672f4e616d696e67436f6e746578744578743a312e30000001000000000000007400000001010200100000003139322e3136382e3135392e31333000fd0a00000b0000004e616d6553657276696365000300000000000000080000000100000000545441010000001c0000000100000001000100010000000100010509010100010000000901010003545441080000009aad015101004982 
Checkpointing Phase 1: Prepare. 
Checkpointing Phase 2: Commit. 
Checkpointing completed. 

接着我加在文件:

InitRef = NameService=IOR:000100010000000100010509010100010000000901010003545\ 
441080000005ea5015101002002010000002b00000049444c3a6f6d672e6f72672f436f734e61\ 
6d696e672f4e616d696e67436f6e746578744578743a312e30000001000000000000007400000\ 
001010200100000003139322e3136382e3135392e31333000fd0a00000b0000004e616d655365\ 
7276696365000300000000000000080000000100000000545441010000001c000000010000000\ 
1000100010000000100010509010100010000000901010003545441080000009aad0151010049\ 
82 

我還設置環境變量::

$ export OMNIORB_CONFIG=/etc/omniORB.cfg 

一切,因爲它從所生成的文件

/etc/omniORB.cfg 

線寫在教程,文件編譯後(2修改: 我說:的#include在CRequestServiceA.cpp 和我改變$(CC)$(CPPFLAGS)$(含)DataSK.cc$(CC)$(CPPFLAGS)$(含)DataSK .cc & & mv DataSK.o Data.o in MakeServer)但我仍然有錯誤,正如我所說的。

請幫我這個問題,我是從許多CORBA C++教程,並沒有影響

+0

您是從源代碼構建omniORB還是安裝Ubuntu軟件包?如果您是從源代碼構建的,那麼您構建的是哪個版本? –

+0

我從Ubuntu軟件包安裝它。已安裝版本的omniORB我有4.1.6-1 –

回答

1

在您的配置文件的反斜線學習可能會造成問題。爲了避免將冗長的IOR(會改變)粘貼到你的配置文件中,嘗試在你的配置文件中設置你的InitRef如下(假設你在與你的測試程序相同的機器上運行名稱服務)。或者你可以嘗試將IOR粘貼爲一行(不要將行分解或添加反斜槓)。

或者你可以運行服務器是這樣的:

$ ./Server -ORBInitRef NameService=corbaname::localhost 

或者

$ ./Server -ORBInitRef NameService=IOR:010000002b00000049444c3a6f6d672e6f72672f436f734e616d696e672f4e616d696e67436f6e746578744578743a312e30000001000000000000007400000001010200100000003139322e3136382e3135392e31333000fd0a00000b0000004e616d6553657276696365000300000000000000080000000100000000545441010000001c0000000100000001000100010000000100010509010100010000000901010003545441080000009aad015101004982 

如果你使用IOR字符串,請意識到這幾乎肯定會改變每次運行命名服務時間,所以請確保您使用的是最新的。

有關更多信息,請參閱omniORB documentation。看到你的留言後

編輯:

本教程可能是陳舊過時的。嘗試改變這一行:

CORBA::Object_var obj1=orb->resolve_initial_references("OmniNameService"); 

這個

CORBA::Object_var obj1=orb->resolve_initial_references("NameService"); 

您還可以希望通過在omniORB documentation回聲示例工作。

+0

非常感謝您的回答,我嘗試了所有您選擇的替代方案,但不幸的是我仍然有一個錯誤。 我可以添加異常拋出: _ CosNaming :: NamingContext_var nc = CosNaming :: NamingContext :: _ narrow(obj1.in()); _ –

+0

@GrzegorzBazior,我已經更新了我的答案。 –

+0

非常感謝您的回答!我改變你告訴: _CORBA :: Object_var OBJ1 = orb->的resolve_initial_references( 「OmniNameService」); _ 到: _CORBA :: Object_var OBJ1 = orb->的resolve_initial_references( 「名稱服務」); _ 兩個** Server.cpp **和** CRequestServiceA.cpp **文件,現在它可以工作。謝謝你的幫助! –

-1

我想我解決這個問題:我改變OmniNameServiceNameService,並在我的omniORB.cfg文件補充說:

InitRef = NameService=IOR:00010.... 

(IOR的名字來自omniNamesError.txt出來),然後運行這樣的服務器:

./Server corbaloc:rir:/NameService