[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 メーリングリストの案内