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

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


菅様

安藤です

試してみていただきありがとうございます。
addComponent でコンポーネントリストの m_comps に即座に
追加されないのは,コンポーネントのコールバック実行中に,
コンポーネントリストが更新されるのを避けたかったからです。

でも,ECが回っていないときには即座にコンポーネントリストが
更新されてもいいような気もしますね。ちょっと考えさせてください。



----
経済産業省 産業機械課 情報化推進係長
博士(工学) 安藤 慶昭
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月13日 15:22 Yuki Suga <ysuga @ ysuga.net>:
> 安藤先生:
> 菅です.お世話になります.
>
> いただいたコードで動作しました.OSX10.9,Xcode5.1,omniORB4.1.6で試しました.
>
> 一点,お聞きしたいのですが,
> 現状で,ExecutionContextBase::addCompnentをすると,
> ExecutionContextWorker内のm_addedCompsにRTObjectStateMachineが格納されて,m_compsには入りません.
> 一度,tickが呼ばれて,ExecutionContextWorker::invokeWorkerが呼ばれない限りは,
> ExecutionContextWorker::m_compsメンバに移動されないので,
> activateComponentを送っても,findComponentで失敗します.
> これは仕様ですか?あまり直感的じゃないのですが・・・
>
> できれば,
>
> RTObject_ptr comp = ....;
> EC_ptr ec = Manager::instance::createContext(ec_id);
> ec.addComponent(comp);
> ec.activateComponent(comp);
>
> としたいところでしたが・・・
>
> ではでは
>
>
>
> 2014年6月13日 0:14 Ando Noriaki <n-ando @ aist.go.jp>:
>> 菅さん
>>
>> 安藤です
>>
>> とりあえず下記のように変更しました。テストしてません。
>> すみませんがそちらの環境で試していただけると助かります。
>> よろしくお願いいたします。
>>
>>
>> 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
>> _______________________________________________
>> openrtm-devel mailing list
>> openrtm-devel @ openrtm.org
>> http://www.openrtm.org/mailman/listinfo/openrtm-devel
>
>
>
> --
> ///////////////////////////////////////////////////////////////////
> // Yuki Suga, Ph.D.
> // URL: http://www.ysuga.net/?lang=en
> // E-mail: ysuga @ ysuga.net
> ///////////////////////////////////////////////////////////////////
> _______________________________________________
> openrtm-devel mailing list
> openrtm-devel @ openrtm.org
> http://www.openrtm.org/mailman/listinfo/openrtm-devel


More information about the openrtm-devel mailing list