<div dir="ltr">MLの皆さん:<div>お世話になります.SSRの菅です.</div><div><br></div><div>自レスです.</div><div><br></div><div>やはり原因としてはローダーの部分で,InPortクラスのコンストラクタでもローダーがうまく動作していないせいで,独自データ型をJarファイルのダイナミックなロードと組み合わせて使えません.</div><div><br></div><div>% ちなみにtrunkのコードだと,2013年5月ごろに指摘したjarのロードの部分が治っていないです.</div><div><br></div><div>自分でアドホックにクラスをいじってInPort側だけロードできるものを作りました.</div><div>添付のMyDataTest.zi_を.zipに変えて展開すると,jarを含んだテスト用コードが展開されます.MyDataTest.jarはbinフォルダに格納されています.</div><div><br></div><div>Test.batで従来のRTMでの動作</div><div>Test_modified.batでこちらで修正したRTMでの動作です.</div><div>システムエディタで見ると,起動したRTCのポートのデータ型が従来のものだと空欄になるのがわかると思います.</div><div><br></div><div>直す部分は少ないのですが,自分で修正したコードはManagerに新しいpublishメソッドforName(String)を追加しているので,なんとなく・・・気持ち悪いかも・・・です.</div><div><br></div><div>添付の*.diffファイルに変更点があります.</div><div><br></div><div>とりあえず,テストできるものを作ったので共有します.</div><div>ではでは</div><div><br></div><div><br></div><div><br></div><br><div class="gmail_quote"><div dir="ltr">2015年10月28日(水) 11:51 Yuki Suga <<a href="mailto:ysuga@ysuga.net">ysuga@ysuga.net</a>>:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">MLの皆さん:<div>お世話になります.SUGAR SWEET ROBOTICSの菅です.</div><div><br></div><div>Java版のRTMを使っていますが,独自データ型を使う場合にバグがあります.</div><div><br></div><div>1. IDLで独自データ型を定義する</div><div>2. classをjarアーカイブにする</div><div>3. rtcdでロードする</div><div><br></div><div>このようにすると,独自データ型をスタブを発見できずに,</div><div>データ型無しの状態になってしまいます.ログを見ると,InPortクラスで,</div><div>ClassNotFoundExceptionがキャッチされているのがわかります.</div><div><br></div><div>問題は,InPortクラスで,</div><div>InPort.javaの120行目付近のコード</div><div>=========</div><div><div>       Class cl = value.v.getClass();</div><div>        String str = cl.getName();</div><div>        try {</div><div>            Class holder = Class.forName(str+"Holder",</div><div>                                         true,</div><div>                                         this.getClass().getClassLoader());</div><div>            m_streamable = (Streamable)holder.newInstance();</div><div>            m_field = m_streamable.getClass().getField("value");</div><div>        } </div><div>       /// この後にClassNotFoundExceptionがキャッチされる(菅)</div></div><div>=========</div><div>というところでポートのデータ型をロードしているのですが,</div><div>getClassLoaderだと,デフォルトのクラスローダだけを参照しているので,</div><div>jarファイル内にしか無い独自データ型だとうまくロードすることができません.</div><div><br></div><div>ローダーはManager側 (ModuleManager.javaあたり?) なので,</div><div>こちらと連携するのかと思います.</div><div><br></div><div>アドホックな対応としては,クラスのJarファイルをクラスパスに加えてしまうことです.</div><div>理想としては,rtc.conf側のみで対応できれば良いと思っています.</div><div><br></div><div>コードをちょろっと変える程度ではないので,報告まで,としておきます.</div><div><br></div><div>ではでは</div><div><br></div><div><br></div></div></blockquote></div></div>