[openrtm-users 01305] Re: OpenRTM-aist-Python-1.0.0の_narrow処理について

kurihara shinji shinji.kurihara @ aist.go.jp
2010年 6月 17日 (木) 13:45:56 JST


株式会社セック 池添様

お世話になっております。
栗原です。

ご連絡頂き、誠に有難うございます。

> 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
> ----------------------------------------------
> 
> ======================================================================
> この電子メールの内容および添付されている情報は、機密情報であると同時に、
> 宛先として意図した特定の受信者のみに送信いたしております。当方の誤送信
> 等により、心当たりのない方が受信された場合は、大変お手数ですが、受信さ
> れましたメール内容は削除していただきますようお願いいたします。
> ======================================================================
> 


-- 
----------
栗原 眞二 <shinji.kurihara @ aist.go.jp>

独立行政法人産業技術総合研究所
  知能システム研究部門 統合知能研究グループ
  〒305-8568
  茨城県つくば市梅園1-1-1 中央第2

  TEL: 029-861-5956



openrtm-users メーリングリストの案内