ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

SeasarコミュのNoClassDefFoundError

  • mixiチェック
  • このエントリーをはてなブックマークに追加
はじめまして。
質問いたします。

eclipse、Tomcat、s2DAOで開発しています。
下記のエラーが解決できず、困っています。
java.lang.NoClassDefFoundError: org/seasar/framework/container/factory/S2ContainerFactory
at dao.Test.aaaa(Test.java:23)

プログラムは下記のもので、
Javaプログラムとして動かす場合は問題ないのですが、
Tomcat上で動かすと、上記エラーが発生します。
なにか、良い知恵はないでしょうか?
public void aaaa() {
ユーザー情報 user = new ユーザー情報();
user.setユーザー名("aaaa");

S2Container container = S2ContainerFactory.create("dao/mfdao.dicon");
container.init();
try {
ユーザー情報Dao dao = (ユーザー情報Dao) container.getComponent(ユーザー情報Dao.class);
ユーザー情報 bean = dao.getUserInfo("aaa");
System.out.println(bean == null);
} finally {
container.destroy();
}
}

解決策を検索してるうちに下記のサイトを見つけましたが、
http://lists.sourceforge.jp/mailman/archives/seasar-user/2005-March/003418.html

ここに示されているサイトはあいにくとリンク切れ、非常に気になっています。
ヒントになりませんでしょうか?
http://www.sysdeo.com/eclipse/readmeDevLoader.html

コメント(8)

TOMCATで使用する場合は、S2SERVLETを使用して、Containerを作成します。
http://s2container.seasar.org/ja/DIContainer.html#S2ContainerServlet を参照してください
朝早くにご回答、ありがとうございます。
自己解決しました。

WEB-INF→LIBの中のファイルが多くなってきたので
LIBの中にフォルダを作って分けていたのが
原因らしいです。
すべてLIBの中に入れたら動くようになりました。
一応、全てのjarにパスを通していたのですが・・・。

これがなぜ問題になるのかは
これから調べようと思います。
とりあえず、解決したということだけご一報。
ご回答、ありがとうございました。m(__)m
すみません。気になる内容だったので、便乗質問させて下さい。

>mshimuraさん
>TOMCATで使用する場合は、S2SERVLETを使用して、Containerを
>作成します。
>http://s2container.seasar.org/ja/DIContainer.html#S2ContainerServlet
>を参照してください

私のところでは、このS2Servletを特に定義はしていませんが
Servlet上で、S2Containerは使用できています。リンクの説明
を見ると、Servletで使用する場合、web.xmlに設定をしておけ
ば、

SingletonS2ContainerFactory.init();

が不要になるということでしょうか?
(私はSingletonS2ContainerFactoryを使用しています)

その後は、S2Container container = SingletonS2ContainerFactory.getContainer();
でコンテナを取得ですね。
これだとあまり差を感じないのですが、S2Servletを使用した
場合のメリットは具体的にどのようなことがあるのでしょう
か?
※逆に使用しない場合の問題点でも結構です。個人的には
 「他のサーブレットよりもはやく起動されるよう」という
 記述があったので、このあたりで問題でもあるのかな?と
 思っています。
のぶさん。
毎回コンポーネントが必要なたびに、コンテナを作成していたらオーバーヘッドは大きいですよ。
S2ContainerServletを使えば、起動時に1回作成されるだけなので、ほとんどオーバーヘッドはありません。
それ以外にも、さまざまな理由により、S2ContainerServletを使う事をお勧めします。
>ひがやすをさん
>毎回コンポーネントが必要なたびに、コンテナを作成してい
>たらオーバーヘッドは大きいですよ。
>S2ContainerServletを使えば、起動時に1回作成されるだけな
>ので、ほとんどオーバーヘッドはありません。

"起動時に1回作成"というのは、Servlet1回アクセスする際に
1回作成ということですよね?

以下のような(1)、(2)の構成でで、

Servlet -> JavaClass
 (1)   (2)

それぞれ

SingletonS2ContainerFactory.init();
S2Container container = SingletonS2ContainerFactory.getContainer();

とした場合、(2)では(1)で生成したコンテナを利用する
為、コンテナは1つしかできないと思っている為、SingletonS2ContainerFactory
を使用すればオーバーヘッドは小さくできていると思って
いたのですが・・・。間違ってますか?
はじめて書込みします(たぶん)

>> のぶさん、

S2Servlet (0)

Servlet -> JavaClass
 (1)   (2)

(0)Tomcat起動時にS2Servlet(init?)が実行されてコンテナ生成
(1),(2)では(0)で生成されたコンテナを使用する。(確か)
ってことです。

なので、コンテナ生成が1度きりということになります。
>うえやんさん。

"Tomcat起動時"ですか!!それなら納得です。
自分で作ったサンプルがあるので、早速S2Servletを使用する
ように変更してみます。

ひがやすをさん、うえやんさん、ありがとうございました。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Seasar 更新情報

Seasarのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング