[Seasar-user:19094] Re: S2Dao使用クラスをJRubyにて呼び出し
お 湯
[E-MAIL ADDRESS DELETED]
2010年 1月 5日 (火) 09:14:07 JST
お湯です。
大変失礼しました、改めて詳細について記載させて頂きます。
記述が見辛いですが(……)、宜しくお願いします。
エラー内容
public static void main(String[] args)のとき
C:\(略)\GetTest.rb:45: undefined method `main' for #<Java::Test::Main:0x1972e3a> (NoMethodError)
Main.javaのmainメソッドstaticを外したとき
test/Main.java:14:in `main'------Sample Main 開始------
: java.lang.NoClassDefFoundError: org/seasar/framework/container/factory/SingletonS2ContainerFactory (NativeException)
from C:\(略)\GetTest.rb:44
Rubyビルドパスにはkanriまで指定しています。
S2Daoに必要なjarファイルは、Javaプロジェクトのjarファイルと共に
lib配下に設定しました。
CLASSPATHは環境変数で設定しています(JRuby、javaのbinフォルダ)
ファイル構成
sample--kanri--jp--sample--sample_test--test--GetTest.rb
--lib--TestDao-1.0.jar
■GetTest.rb
require 'java'
require 'TestDao-1.0.jar'
include_class 'test.Main'
#Javaファイルにて設定した配列をGET
ma = Main.new
tests = ma.main(nil)
print "<html>\n"
print "<head><title>JAVA SAMPLE</title></head>\n"
print "<body><table>\n"
#Javaクラスから取得した値
print "<tr><td>#{tests}</td></tr>\n"
print "</table></body></html>\n"
Javaプロジェクトファイル構成
JavaSample--src--test--Main.java
Sample.java
SampleDao.java
SampleDao.dicon
--j2ee.dicon
jdbc.dicon
jta.dicon
■Main.java
package test;
import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.factory.SingletonS2ContainerFactory;
public class Main {
private static Sample[] smArray;
private static final String PATH = "test/SampleDao.dicon";
public static void main(String[] args) {
System.out.println("------Sample Main 開始------");
// 設定ファイルを読み込む.ここでこける
SingletonS2ContainerFactory.setConfigPath(PATH);
System.out.println("------設定ファイル pathセット完了------");
// 初期化する.
SingletonS2ContainerFactory.init();
// コンテナを取得する.
S2Container container = SingletonS2ContainerFactory.getContainer();
System.out.println("------コンテナ取得OK------");
SampleDao smDao = (SampleDao) container.getComponent(SampleDao.class);
//全件取得
smArray = smDao.selectAll();
System.out.println(smArray[0]);
System.out.println("------完了------");
container.destroy();
Main m = new Main();
m.sample(smArray);
}
//戻り値を設定
public Sample[] sample(Sample[] sArray){
smArray = sArray;
return smArray;
}
}
Java部分については、この辺りを参考にしました。
http://sham-memo.blogspot.com/2009/06/s2dao.html
しかし可能であるということは、そもそもコーディングを間違えているのかもしれません。
情報ありがとうございます。もう一度プログラムを見直して見ます。
----------------------------------------
> Date: Mon, 4 Jan 2010 23:23:44 +0900
> From: [E-MAIL ADDRESS DELETED]
> To: [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:19090] Re: S2Dao使用クラスをJRubyにて呼び出し
>
> 大中(せと)です。
>
> お 湯 さんは書きました:
>
>> S2Daoを使用する自作Javaクラスを使って、DBから取得した値をベタ打ちで表示するという
>> テスト用Rubyアプリケーションを作成しているのですが
>> JavaクラスのsetConfigPathにてエラーとなってしまい、処理が実行出来ずにいます。
>
> JRubyは詳しくないのですが、
> ・呼び出し元のRubyプログラムはどういうコーディングをしているのか
> ・どんなエラーなのか。スタックトレース等は出ていないか
> ・環境変数CLASSPATHはどう設定しているか
> ・S2Daoが必要とするjarファイルはどこに置いているか
>
> 等の情報がわからないと回答がつきにくいと思います。
>
>> JRubyからstaticメソッド(ここではsetConfigPath)を呼べない?のが原因かとも思いましたが、
>> どうにかこのまま使用する方法はないかと思い、質問させて頂いています。
>> それとも、S2DaoをJRubyで、ということがそもそも無謀なのでしょうか……。
>
> こちらで試したところ、S2Daoを使用するスタンドアロンアプリ
> +JRuby(macports)で呼び出しに成功したので、不可能という
> ことはないと思います。
>
> --
> 大中浩行(せとあずさ)
> [E-MAIL ADDRESS DELETED]
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
_________________________________________________________________
メール一括チェック!他の無料メールもプロバイダーメールも。
http://welovewindowslive.spaces.live.com/blog/cns!6029A5A1C44FA6D3!557.entry
Seasar-user メーリングリストの案内