Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

SAStrutsでのDB接続について

はじめまして

現在SAStrutsを勉強しているのですが以下のところで詰まっております。

しーさーのサイトからサンプルパッケージを落としてDBアクセスを試みました。

サンプルのパッケージ配下(service)では正常に動作しました。
そこでもうひとつ任意のパッケージ(service2)なるものを作成するとNullPointorで異常終了します。
デバックすると
service配下では
public JdbcManager jdbcManager;
と変数を宣言するだけでオブジェクトができているが
service2配下ではnullとなってしまいます。

任意のパッケージでJdbcManagerを使用することはできないのでしょうか。
diconファイルとかに何かヒントがあるのでしょうか?
調べましたがdiconがよくわかりません・・・。

よろしくお願いいたします。



8

回答

15456

閲覧

8件の回答

評価

0

SAStrutsなんて触ったこともないけど。

>service配下では
>public JdbcManager jdbcManager;
>と変数を宣言するだけでオブジェクトができているが

まさかぁ。w

>service2配下ではnullとなってしまいます。

service配下で、どうやってJdbcManagerを取得してるのか、
調べるのがいいと思うよ。

評価

0

不良社員さん

お返事ありがとうございます。

ためしにservice2配下で
JdbcManager jdbcManager = new JdbcManagerImpl();
実装クラスをnewして
Employee dept = jdbcManager.from(Employee.class).id("1").getSingleResult();
を実行してみましたがそれまたNullポで落ちました。
newした時点ではオブジェクトとして出来上がっていたのに。。。

エラーは以下になります。
    at org.seasar.extension.jdbc.query.AutoSelectImpl.id(AutoSelectImpl.java:864)

それで864行目は
        final EntityMeta entityMeta = jdbcManager.getEntityMetaFactory()
                .getEntityMeta(baseClass);
ですがもうここまでくると何がなんだかわかりません。。。

評価

0

>jdbcManager.getEntityMetaFactory().getEntityMeta(baseClass);
これ分解してみなよ。

評価

0

ライブラリやフレームワークを使用する場合、
クラスのインスタンスを取得する方法は、
自分でnewするとは限らんよ。

評価

0

不良社員さん

確かに自分でnewしたときの例外とパッケージを変えた時の例外とでは違いがあるため自分でnewするのは間違いだと思います。

sastrutsは公式サイトからサンプルをダウンロードしたときのパッケージはaciton,dto,service,form,utilとなっております。

例えばDB接続のサンプルソースですと
actionからserviceの間でつなぎに言っております。
その際にactionクラスにてアノテーションを使用して
@Resource
public XXXXService xxxxService
と変数定義をして
List result = xxxxService.selectByAll();
とするとしーさーが自動的にDBの値を入れてくれます。

そこでパッケージ名をlogicに変更してactionクラスも
@Resource
public XXXXLogic xxxxLogic
と変数定義してロジックからserviceを呼出せるかやってみましたがactionクラスにてエラーが発生
エラー内容は自動設定に失敗しました。となりました。

つまりサンプルソース以外のパッケージを切るとしーさーがうまく動いてくれないみたいなのです。

なにか設定を追加すれば動くのか、それともsastrutsはこのパッケージ構成でしか機能しないのかの切り分けができていません。





 

評価

0

重ねて書くが、俺はSAStrutsなんて、触ったこともありません。

で、スレ主さんのやっていることは、
きちんと、SAStrutsの仕様に準じている、といえるのかな?

>つまりサンプルソース以外のパッケージを切るとしーさーがうまく動いてくれないみたいなのです。

>なにか設定を追加すれば動くのか、それともsastrutsはこのパッケージ構成でしか機能しないのかの切り分けができていません。

俺も、動いているサンプルから、類推でいじくるくらいのことはする。
後で後悔することもあるけどな。:-p

でもそれで動かなかったら、観念して仕様に当たるよ。

俺がエラソーにできるのもここまでかな。
がんばってください。

評価

0

スルーされてんな。
864行目でNullPointerExceptionが発生する可能性が、本当にjdbcManager==nullだけだと思ってるのか?
まあ、これが正解かは知らないがね。

評価

0

不良社員さん

自己解決いたしました。
し〜さ〜の仕様でした。
し〜さ〜にはdiconファイルという設定ファイルがありましてその設定ファイルに追加することで解決することができました。

ありがとうございました。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。