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