OpenRTM-aist MLの皆様: お世話になります.菅です.
Java版のrtcdの動作について気になっているので, メールを書きました.
rtc.confに適切な設定をしたrtcdを起動することで, 複数のRTCを簡単に起動できるのは皆さんご存知かと思います.
ポイントとしては, manager.is_master : YES manager.modules.load_path : モジュールがある場所 manager.modules.preload : モジュールのファイル名 manager.components.precreate : 自動的に起動するComponentの名前 と行った所だと思いますが, Javaだけ,挙動が大きく違うので,変更してはどうか,という提案です.
たとえば,カレントディレクトリでrtcdを起動する場合, ディレクトリ内に, - rtc - ConsoleOut.dll - ConsoleIn.dll - conf - rtc.conf のように配置されている場合, manager.modules.load_path : rtc manager.modules.preload : ConsoleIn.dll, ConsoleOut.dll manager.components.precreate : ConsoleIn, ConsoleOut のように設定するのが定石と考えていますが, 現状のJava版では,相対パスをパッケージ名と解釈するコードがあるように見えます.
jp/go/aist/rtm/RTC/ModuleManager.javaのload関数内です.
svnリポジトリ: http://svn.openrtm.org/OpenRTM-aist-Java/trunk/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/ModuleManager.java
230行目あたりが当該の箇所で,getModuleName関数は,jarファイル名を判別すると, ファイルまでのパスをクラスのパッケージパスと解釈して文字列を生成している ように見えますが,あんまり意味がよくわかりません.
そこで,添付のパッチのように,manager.modules.preloadに設定されたものが jarファイルの場合に,RTCのクラス名がデフォルトパッケージにある,という前提を元に, jarをURLClassLoaderで開き,クラス名からClass型オブジェクトを生成するようにしました.
かなりアドホックなやり方ですが・・・
ご意見を頂ければと思います.
それでは
-- /////////////////////////////////////////////////////////////////// // Yuki Suga, Ph.D. // URL: http://www.ysuga.net/?lang=en // E-mail: ysuga@ysuga.net ///////////////////////////////////////////////////////////////////
モーションエディタ/シミュレータ
動力学シミュレータ
統合開発プラットフォーム
産総研が提供するRTC集
東京オープンソースロボティクス協会
ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク
OpenRTM-aist MLの皆様:
お世話になります.菅です.
Java版のrtcdの動作について気になっているので,
メールを書きました.
rtc.confに適切な設定をしたrtcdを起動することで,
複数のRTCを簡単に起動できるのは皆さんご存知かと思います.
ポイントとしては,
manager.is_master : YES
manager.modules.load_path : モジュールがある場所
manager.modules.preload : モジュールのファイル名
manager.components.precreate : 自動的に起動するComponentの名前
と行った所だと思いますが,
Javaだけ,挙動が大きく違うので,変更してはどうか,という提案です.
たとえば,カレントディレクトリでrtcdを起動する場合,
ディレクトリ内に,
- rtc - ConsoleOut.dll
- ConsoleIn.dll
- conf - rtc.conf
のように配置されている場合,
manager.modules.load_path : rtc
manager.modules.preload : ConsoleIn.dll, ConsoleOut.dll
manager.components.precreate : ConsoleIn, ConsoleOut
のように設定するのが定石と考えていますが,
現状のJava版では,相対パスをパッケージ名と解釈するコードがあるように見えます.
jp/go/aist/rtm/RTC/ModuleManager.javaのload関数内です.
svnリポジトリ:
http://svn.openrtm.org/OpenRTM-aist-Java/trunk/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/ModuleManager.java
230行目あたりが当該の箇所で,getModuleName関数は,jarファイル名を判別すると,
ファイルまでのパスをクラスのパッケージパスと解釈して文字列を生成している
ように見えますが,あんまり意味がよくわかりません.
そこで,添付のパッチのように,manager.modules.preloadに設定されたものが
jarファイルの場合に,RTCのクラス名がデフォルトパッケージにある,という前提を元に,
jarをURLClassLoaderで開き,クラス名からClass型オブジェクトを生成するようにしました.
かなりアドホックなやり方ですが・・・
ご意見を頂ければと思います.
それでは
--
///////////////////////////////////////////////////////////////////
// Yuki Suga, Ph.D.
// URL: http://www.ysuga.net/?lang=en
// E-mail: ysuga@ysuga.net
///////////////////////////////////////////////////////////////////