[openrtm-devel:00380] Re: Manager::getPOAからのPOA::reference_to_servantでWrongAdapterエラーが出てるのですが・・・

Ando Noriaki n-ando @ aist.go.jp
2014年 6月 13日 (金) 00:14:13 JST


菅さん

安藤です

とりあえず下記のように変更しました。テストしてません。
すみませんがそちらの環境で試していただけると助かります。
よろしくお願いいたします。


Index: RTObjectStateMachine.cpp
===================================================================
--- RTObjectStateMachine.cpp (リビジョン 2557)
+++ RTObjectStateMachine.cpp (作業コピー)
@@ -161,8 +161,19 @@
     if (CORBA::is_nil(m_caVar)) { return; }
     m_ca = true;
     PortableServer::POA_ptr poa = RTC::Manager::instance().getPOA();
-    m_rtobjPtr =
-      dynamic_cast<RTC::RTObject_impl*>(poa->reference_to_servant(comp));
+    try
+      {
+        m_rtobjPtr =
+          dynamic_cast<RTC::RTObject_impl*>(poa->reference_to_servant(comp));
+      }
+    catch (CORBA::SystemException& ex)
+      {
+        m_rtobjPtr = NULL;
+      }
+    catch (...)
+      {
+        m_rtobjPtr = NULL;
+      }
   }

   void RTObjectStateMachine::



2014年6月13日 0:07 Ando Noriaki <n-ando @ aist.go.jp>:
> 安藤です
>
> poa->reference_to_servant(comp) ってException出るんですね?
> 単にNULLが帰ってくるのだと思っていました。単純にcatchし忘れですねこれ。
> ちなみに,m_rtobjPtr はNULLでも大丈夫なようになっています。
>
> ----
> 経済産業省 産業機械課 情報化推進係長
> 博士(工学) 安藤 慶昭
> TEL: 029-861-5981 (携帯) TEL: 03-3501-1691(産機課代表)
> TEL: 03-3501-1512(経産省代表)→ 72545(個人PHS)
> E-MAIL: ando-noriaki @ meti.go.jp
>
> Noriaki Ando, Ph.D. Assistant Director
> Industrial Machinery Division, Manufacturing Industries Bureau
> Ministry of Economy, Trade and Industry
> E-MAIL: ando-noriaki @ meti.go.jp
>
>
> 2014年6月12日 22:40  <ysuga @ ysuga.net>:
>> お世話になります.菅です.
>> CORBAの初歩的な質問かもしれませんが,どなたか教えてください.
>> v_repというシミュレータ内でManagerを立て,RTCを起動し,外からシミュレータ全体をサービスポートで制御するプラグインを開発をしています.
>> そのサービスポートで,さらに外部プロセスのRTCのURIを投げると,その外部RTCに対して,シミュレータ内でSynchExtTriggerECを生成し,addComponentをするようにしています.
>> 結果としてECが2つ,RTCに取り付く形になっちゃいますが,こうすると,何気なく起動したRTCを同期させることが出来ると考えています.
>> ・・・が,上手く行きません.外部のRTCはJava版およびC++版のRTCですが同様の失敗です.シミュレータはC++版です.
>> 上手く行かない症状は, 0.addComponentの返り値が2
>> (BAD_PARAMETER?)になる.
>> 1.participantsのECがSystemEditorで上手く表示されない.rateなどがnullと表示されてしまう.
>> 2.addComponentした直後のactivate_componentが失敗する.
>> C++のtrunkのコードを追っていくと,ECから外部のRTCのRTObject_ptrに対してaddComponent()をすると,RTObjectのattach_context()の呼び出し後に,
>> RTObjectStateMachineを生成して,そのコンストラクタの中で,setComponentAction()メソッド内で,
>> Manager::getPOA()で得たアダプタでreference_to_servantをやっているようですが,この部分で失敗しているようです.
>> ログを見てみましたが,この辺のログ出力があまりないのです・・・が,おおよそこの辺で失敗して,CORBA::Exceptionを送出しているというのは分かりました.
>> この部分のコードだけ取り出して実験してみたところ,reference_to_servantの部分でCORBA::WrongAdapterExceptionを送出してしまいます.
>> そもそもオブジェクトをactivateしたアダプタじゃないと,reference_to_servantできないと思うのですが,
>> 僕の使い方が悪いのでしょうか?
>> どなたか詳しい方,回避方法など教えていただけませんか?
>>
>> _______________________________________________
>> openrtm-devel mailing list
>> openrtm-devel @ openrtm.org
>> http://www.openrtm.org/mailman/listinfo/openrtm-devel


More information about the openrtm-devel mailing list