Project

General

Profile

バグ #1499

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

Added by kurihara almost 14 years ago. Updated almost 14 years ago.

Status:
終了
Priority:
通常
Assignee:
Target version:
-
Start date:
05/18/2010
Due date:
% Done:

100%

Estimated time:

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

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

History

#1 Updated by ta almost 14 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 almost 14 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 almost 14 years ago

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

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

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

#4 Updated by kurihara almost 14 years ago

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

#5 Updated by ta almost 14 years ago

  • Status changed from 担当 to 解決
  • % Done changed from 10 to 100

修正させて頂きました

#6 Updated by kurihara almost 14 years ago

  • Status changed from 解決 to 終了

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

Also available in: Atom PDF