[Seasar-user:6670] Re: [Teeda]ネイティブメソッド呼び出しについて

Motoba [E-MAIL ADDRESS DELETED]
2007年 3月 13日 (火) 16:24:51 JST


米林様

お世話になっております。元場です。

> PageクラスをHOTに認識しつつJNI呼び出しも
> 正常に行うには、JNIのライブラリをロードする
> クラスをdiconファイルに定義して下さい。

私の環境でも問題なく動作することが確認できました。
素早いご回答大変助かります。ありがとうございます。

> -----Original Message-----
> From: [E-MAIL ADDRESS DELETED] 
> [mailto:[E-MAIL ADDRESS DELETED]] On Behalf Of 
> [E-MAIL ADDRESS DELETED]
> Sent: Tuesday, March 13, 2007 3:51 PM
> To: [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:6669] Re:[Teeda]ネイティブメソッド呼び出しについ
>> 
> 
> 元場さん
> 米林です。
> 
> PageクラスはHOTで動作しているので
> リクエストごとにHotClassLoaderという
> クラスローダーを作って処理されています。
> ですので、異なるクラスローダでJNIのライブラリが
> ロードされる為、例外が発生していると思われます。
> 
> PageクラスをHOTに認識しつつJNI呼び出しも
> 正常に行うには、JNIのライブラリをロードする
> クラスをdiconファイルに定義して下さい。
> # diconファイルに定義したコンポーネントのクラスは
> # HOTの対象では無い為
> 
> Filterをはずさずに動作する方法は以下の通りです。
> 
> TestクラスでJNI処理を行う
> ----------------------------------
> package examples;
> public class Test {
>  static {
>   System.loadLibrary("Test");
>  }
>  public native String jniMethod();
>  public Test(){
>  }
>  public String hoge(){
>   return jniMethod();
>  }
> ----------------------------------
> 
> これを、diconファイル(例はapp.dicon)に登録
> <component name="test" class="examples.Test" instance="singleton"/>
> 
> Add2ActionではDIしてもらい利用するだけ
> --------------------------------------
>  private Test test;
>  public void setTest(Test test){
>   this.test = test;
>  }
>  public String doCalculate() {
>   int result = add2Page.getArg1() + add2Page.getArg2();
>   add2Page.setResult(result);
>   System.out.println("#####"+test.hoge()+"#####");
>   return null;
>  }
> --------------------------------------
> 
> 手元では独自に作成したTest.dllで試し
> 正常動作を確認しました。
> 
> よろしくお願いします。
> 
> From: "Motoba" <[E-MAIL ADDRESS DELETED]>
> Sent: Tuesday, March 13, 2007 1:43 PM
> 
> 米林様
> 
> お世話になっております。元場です。
> 
> 該当のソースファイルを送付致します。
> jniMethod初回だけ正常に動作して、2回目以降は UnsatisfiedLin
> kError が発生する。というパターンもありました。
> また、ロードするタイミングを変えることで初回から失敗したり、
> 初回だけ成功したりとしていました。
> どのパターンにしろ2回連続で成功したことはありませんでした。
> (頼りない情報で申し訳ございません・・・)
> 
> > -----Original Message-----
> > From: [E-MAIL ADDRESS DELETED] 
> > [mailto:[E-MAIL ADDRESS DELETED]] On Behalf Of 
> > [E-MAIL ADDRESS DELETED]
> > Sent: Tuesday, March 13, 2007 11:40 AM
> > To: [E-MAIL ADDRESS DELETED]
> > Subject: [Seasar-user:6665] Re:[Teeda]ネイティブメソッド呼び出しにつ
>> > て
> >
> >
> > 米林です。
> >
> > ライブラリのロード箇所を見せて頂けますか?
> > おそらく複数回ライブラリをロードしているのが
> > 原因と思われます。
> >
> > よろしくお願いします。
> >
> > From: "Motoba" <[E-MAIL ADDRESS DELETED]>
> > Sent: Tuesday, March 13, 2007 9:09 AM
> >
> > > いつもお世話になっております。元場と申します。
> > >
> > > Teeda1.0.5の example で ネイティブメソッドを呼び出したいので
> > > すがイマイチうまくいきません。
> > >
> > > 具体的には Add2Action.java に
> > > public native String jniMethod();
> > > というネイティブメソッドを用意して、添付ファイルのdllのネイ
> > > ティブメソッドを呼び出そうとしています。
> > >
> > > が、UnsatisfiedLinkError が発生してしまいネイティブメソッド
> > > の呼び出しでエラーとなってしまいます。
> > > dllのロードのタイミングやロードするクラスを何パターンか試し
> > > たのですが、ネイティブメソッド呼び出しには成功しませんでし
> > > た。
> > > エラーの内容やログから、HotdeployClassLoader で dll がロード
> > > されたり、WebappClassLoader で dll がロードされているようだ
> > > ったので、hotdeployfilter をはずすことで問題なく動作すること
> > > が確認できました。
> > > hotdeploy は考えていないので、hotdeployfilter をはずすことは
> > > 問題ないのですが、何故 hotdeployfilter が設定されているとネ
> > > イティブメソッドが呼び出せないかがイマイチ分かりません。
> > >
> > > 何かご存知の方がいらっしゃいましたらご教授頂けると助かります
> 
> ---
> 米林 正明
> [E-MAIL ADDRESS DELETED]
> 
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED] 
https://ml.seasar.org/mailman/listinfo/seasar-user





Seasar-user メーリングリストの案内