[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 メーリングリストの案内