[openrtm-users 01306] Re: OpenRTM-aist-Python-1.0.0の_narrow処理について
池添明宏
ikezoe @ sec.co.jp
2010年 6月 17日 (木) 14:09:13 JST
栗原様
セックの池添です。
お世話になっております。
早速のご回答、ありがとうございます。
> ただ、IORをstring_to_object()にてCORBAオブジェクトへ変換した
> 場合は、_narrowしなくてもCORBA呼び出しが可能な場合もあるようです。
>
> 以下URLの「Narrowing object references」を参照下さい。
なるほど、repository idの持たせ方によって呼び出しの可否が
変わることがあるのですね。
確かにOpenRTM.NET側でオブジェクトを格納するときに、
repository idが異なるものになっておりました。
> 修正しましたら、再度ご連絡させて頂きます。
お手数をおかけしますが、よろしくお願いいたします。
以上
(2010/06/17 13:45), kurihara shinji wrote:
> 株式会社セック 池添様
>
> お世話になっております。
> 栗原です。
>
> ご連絡頂き、誠に有難うございます。
>
>> CORBAのプログラミング作法的に _narrow せずにCORBAメソッドを
>> 呼び出しても問題ないものなのでしょうか?
> いえ、基本的には_narrowする必要がございます。
> ただ、IORをstring_to_object()にてCORBAオブジェクトへ変換した
> 場合は、_narrowしなくてもCORBA呼び出しが可能な場合もあるようです。
>
> 以下URLの「Narrowing object references」を参照下さい。
> http://ports.gnu-darwin.org/devel/py-omniorb/work/omniORBpy-3.1/doc/omniORBpy.pdf
>
> ただし、今回の場合は、単純に_narrowし忘れでして、たまたまC++,
> Java,Python間では問題になっていなかっただけの事ですので、
> _narrowするように修正致します。
>
> 修正しましたら、再度ご連絡させて頂きます。
>
>
> ご迷惑をお掛け致しまして申し訳ございません。
> 宜しくお願い致します。
>
>
>
> On Thu, 17 Jun 2010 11:30:32 +0900
> 池添明宏<ikezoe @ sec.co.jp> wrote:
>
>> セックの池添です。
>> # 連投、申し訳ありません。
>>
>> 私はOpenRTM.NETというRTミドルウェア実装を開発しているのですが、
>> OpenRTM-aist-Python-1.0.0-RELEASEとのデータポートの連携に
>> おいて問題が発生しております。
>>
>> OpenRTM-aist-Python-1.0.0-RELEASEのOutPortと、OpenRTM.NETのInPort
>> を接続しデータを送信すると、接続が切れてしまいます。
>> InPortCorbaCdrConsumer.pyのputメソッドの実装は下記のようになって
>> いるのですが、self._ptr()を_narrowしていないため、self._ptr().put()
>> の呼び出しに失敗してしまいます。
>>
>> def put(self, data):
>> self._rtcout.RTC_PARANOID("put()")
>>
>> try:
>> if self._ptr():
>> return self.convertReturnCode(self._ptr().put(data))
>> return self.CONNECTION_LOST
>> except:
>> self._rtcout.RTC_ERROR(sys.exc_info()[0])
>> return self.CONNECTION_LOST
>>
>> return self.UNKNOWN_ERROR
>>
>>
>> これを下記のように _narrow するように変更すれば、OpenRTM.NETとの
>> 連携が可能になります。
>> (この変更を加えても、C++版、Python版との連携に問題はありません)
>>
>> def put(self, data):
>> self._rtcout.RTC_PARANOID("put()")
>>
>> try:
>> if self._ptr():
>> ptr = self._ptr()
>> inportcdr = ptr._narrow(OpenRTM__POA.InPortCdr)
>> return self.convertReturnCode(inportcdr.put(data))
>> return self.CONNECTION_LOST
>> except:
>> self._rtcout.RTC_ERROR(sys.exc_info()[0])
>> return self.CONNECTION_LOST
>>
>> return self.UNKNOWN_ERROR
>>
>>
>> CORBAのプログラミング作法的に _narrow せずにCORBAメソッドを
>> 呼び出しても問題ないものなのでしょうか?
>> OpenRTM.NETの実装の方に問題があるのかもしれませんので、
>> ご見解をお聞かせください。
>>
>> ちなみに、C++版では_narrow、 Java版ではcastTypeをして型を定めているので、
>> Python版のような問題は発生しません。
>>
>> よろしくお願いいたします。
>>
>> 以上
>>
>> --
>> ----------------------------------------------
>> 株式会社セック 開発本部 第四開発部
>> TEL: 03-5458-7743 FAX: 03-5458-7726
>> 池添 明宏 E-mail: ikezoe @ sec.co.jp
>> ----------------------------------------------
>>
>> ======================================================================
>> この電子メールの内容および添付されている情報は、機密情報であると同時に、
>> 宛先として意図した特定の受信者のみに送信いたしております。当方の誤送信
>> 等により、心当たりのない方が受信された場合は、大変お手数ですが、受信さ
>> れましたメール内容は削除していただきますようお願いいたします。
>> ======================================================================
>>
>
>
--
----------------------------------------------
株式会社セック 開発本部 第四開発部
TEL: 03-5458-7743 FAX: 03-5458-7726
池添 明宏 E-mail: ikezoe @ sec.co.jp
----------------------------------------------
======================================================================
この電子メールの内容および添付されている情報は、機密情報であると同時に、
宛先として意図した特定の受信者のみに送信いたしております。当方の誤送信
等により、心当たりのない方が受信された場合は、大変お手数ですが、受信さ
れましたメール内容は削除していただきますようお願いいたします。
======================================================================
openrtm-users メーリングリストの案内