プロジェクト

全般

プロフィール

バグ #1499

Python用のコード生成で使用されるomniORBpyのバージョン

kuriharaほぼ14年前に追加. ほぼ14年前に更新.

ステータス:
終了
優先度:
通常
担当者:
対象バージョン:
-
開始日:
2010/05/18
期日:
進捗率:

100%

予定工数:

説明

サービスポートを持つRTCのPython用のコード生成を行う場合、_GlobalIDL/__init__.py、_GlobalIDL__POA/__init__.pyの記述内容がomniORBpy-2系用になっている。

以下は、_GlobalIDL/__init__.pyの内容

# DO NOT EDIT THIS FILE!
#
# Python module _GlobalIDL generated by omniidl

# ** 1. Stub files contributing to this module
import MyService_idl

# ** 2. Sub-modules

# ** 3. End

自分の環境(omniORBpy-3.4)にて再度同じIDLファイルをomniidlにてIDLコンパイルした場合は、__init__.pyは下記のようになる。

# DO NOT EDIT THIS FILE!
#
# Python module _GlobalIDL__POA generated by omniidl

import omniORB
omniORB.updateModule("_GlobalIDL__POA")

# ** 1. Stub files contributing to this module
import MyService_idl

# ** 2. Sub-modules

# ** 3. End

(RTCBにて生成時に、omniORBpy-2.7のidlコンパイラが使用されている???)

omniORBpy-2系の__init__.pyでは、"MyService_idl"だけをimportするのに対し、omniORBpy-3系の__init__.pyでは、"omniORB.updateModule("_GlobalIDL__POA")というのが追加されているため、omniORBpy-3系がインストールされている環境では、RTCBで生成されたコードを実行するとエラーとなる。

[環境]
  OS: WindowsXP
  Eclipse: 3.4.2
  Java: 1.6.0_17
  RTSE,RTCB: dailybuild r114

関連するチケット

関連している RTC Builder - 機能 #1525: [Python] IDLコンパイルが必要なRTCの場合、IDLコンパイルを行うためのbat、およびシェルスクリプトを生成するようにする。終了2010-05-24

履歴

#1 taほぼ14年前に更新

  • ステータス新規 から 担当 に変更
  • 担当者ta にセット
  • 進捗率0 から 10 に変更

RTCBでは,omniORBpyのidlコンパイラで生成したコード情報を基に,独自のテンプレートを作成し,使用しています.
生成コード全てに,
 import omniORB
 omniORB.updateModule("_GlobalIDL__POA")
を追加する形で修正すればよろしいでしょうか?

#2 kuriharaほぼ14年前に更新

omniORB.updateModule()が必要かどうかは、RTCを実行する環境のomniORBpyのバージョンに依存します。

omniORBpy-2系(2.7等)の場合、omniORB.updateModule()があると実行時にエラーになりますし、
逆に、omniORBpy-3系(3.0,3.1,3.4等)の場合は、omniORB.updateModule()がなければ実行時エラーとなります。

なお、_GlobalIDL__POAというキーワードについては、IDLコンパイルを行う対象のIDLファイル内で、module名が例えば、SimpleServiceと定義されている場合は、SimpleService,SimpleService__POAとなりますし、moduleが定義されていなければ_GlobalIDL,_GlobalIDL__POAとなります。

また、_GlobalIDL,_GlobalIDL_POAというフォルダも作成されておりますが、これも、モジュールが定義されている場合は、SimpleService,SimpleService__POAというフォルダが作成される必要があります。

#3 taほぼ14年前に更新

IDLファイル内のmodule名につきましては,RTCBの中でパースを行っておりますので取得可能です.
キーワードおよびフォルダの名称につきましては,こちらの情報を基に出力するように修正させて頂きます.

omniORB.updateModule()が必要かどうかは、RTCを実行する環境のomniORBpyのバージョンに依存します。

こちらのお話につきましては,どのような仕様と考えればよろしいでしょうか?

#4 kuriharaほぼ14年前に更新

スタブ・スケルトン(今回の場合、SimpleService,SimpleService__POA,MyService_idl.py)はRTCBでは生成せずに、RTCのユーザーがidlコンパイルを行うという事になりました。
IDLで定義したインターフェースの実装クラス(MyService_idl_example.py)はこれまで同様、RTCBにて生成するようにお願い致します。

#5 taほぼ14年前に更新

  • ステータス担当 から 解決 に変更
  • 進捗率10 から 100 に変更

修正させて頂きました

#6 kuriharaほぼ14年前に更新

  • ステータス解決 から 終了 に変更

変更されている事を確認しました。( r120 )
このチケットは、クローズします。

他の形式にエクスポート: Atom PDF