バグ #1499
Python用のコード生成で使用されるomniORBpyのバージョン
100%
Description
サービスポートを持つ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
Related issues
History
#1 Updated by ta over 13 years ago
- Status changed from 新規 to 担当
- Assignee set to ta
- % Done changed from 0 to 10
RTCBでは,omniORBpyのidlコンパイラで生成したコード情報を基に,独自のテンプレートを作成し,使用しています.
生成コード全てに,
import omniORB
omniORB.updateModule("_GlobalIDL__POA")
を追加する形で修正すればよろしいでしょうか?
#2 Updated by kurihara over 13 years ago
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 Updated by ta over 13 years ago
IDLファイル内のmodule名につきましては,RTCBの中でパースを行っておりますので取得可能です.
キーワードおよびフォルダの名称につきましては,こちらの情報を基に出力するように修正させて頂きます.
omniORB.updateModule()が必要かどうかは、RTCを実行する環境のomniORBpyのバージョンに依存します。
こちらのお話につきましては,どのような仕様と考えればよろしいでしょうか?
#4 Updated by kurihara over 13 years ago
スタブ・スケルトン(今回の場合、SimpleService,SimpleService__POA,MyService_idl.py)はRTCBでは生成せずに、RTCのユーザーがidlコンパイルを行うという事になりました。
IDLで定義したインターフェースの実装クラス(MyService_idl_example.py)はこれまで同様、RTCBにて生成するようにお願い致します。
#5 Updated by ta over 13 years ago
- Status changed from 担当 to 解決
- % Done changed from 10 to 100
修正させて頂きました
#6 Updated by kurihara over 13 years ago
- Status changed from 解決 to 終了
変更されている事を確認しました。( r120 )
このチケットは、クローズします。