SVNリポジトリからdbflute-teeda-example を落としてきて、tomcatのjarファイルの参照先を直しただけで実行し
http://localhost:8080/dbflute-teeda-example/view/member/edit.html
会員一覧→会員編集画面を開いて更新ボタンを押すと例外で落ちました。
java.lang.IllegalStateException: The AccessContext was not found on thread!
com.example.dbflute.teeda.dbflute.allcommon.AccessContext.getAccessUserOnThread(AccessContext.java:75)
com.example.dbflute.teeda.dbflute.allcommon.ImplementedCommonColumnAutoSetupper.handleCommonColumnOfUpdateIfNeeds(ImplementedCommonColumnAutoSetupper.java:83)
com.example.dbflute.teeda.dbflute.allcommon.bhv.AbstractBehaviorWritable.setupCommonColumnOfUpdateIfNeeds(AbstractBehaviorWritable.java:706)
com.example.dbflute.teeda.dbflute.allcommon.bhv.AbstractBehaviorWritable.frameworkFilterEntityOfUpdate(AbstractBehaviorWritable.java:696)
com.example.dbflute.teeda.dbflute.allcommon.bhv.AbstractBehaviorWritable.processBeforeUpdate(AbstractBehaviorWritable.java:583)
com.example.dbflute.teeda.dbflute.bsbhv.BsMemberBhv.delegateUpdateNonstrict(BsMemberBhv.java:628)
com.example.dbflute.teeda.dbflute.bsbhv.BsMemberBhv$12.callbackDelegateUpdateNonstrict(BsMemberBhv.java:427)
com.example.dbflute.teeda.dbflute.bsbhv.BsMemberBhv$12.callbackDelegateUpdateNonstrict(BsMemberBhv.java:1)
com.example.dbflute.teeda.dbflute.allcommon.bhv.AbstractBehaviorWritable.helpUpdateNonstrictInternally(AbstractBehaviorWritable.java:191)
com.example.dbflute.teeda.dbflute.bsbhv.BsMemberBhv.updateNonstrict(BsMemberBhv.java:426)
com.example.dbflute.teeda.web.member.EditPage.doUpdate(EditPage.java:124)
AccessContext は 共通カラムに設定するユーザ名や更新日付を入れておくメモリですよね。
必要なコードがサンプルに足りてないのかな。
スタンドアロンのサンプルプログラムMemberBhvTestでは、テストの前準備として
下記のメソッドを呼び出して初期化していました。
/** 共通カラムの値をセット */
private void setupAccessContext() {
AccessContext context;
boolean isNew = false;
if (AccessContext.isExistAccessContextOnThread())
context = AccessContext.getAccessContextOnThread();
else {
context = new AccessContext();
isNew = true;
}
context.setAccessTimestamp(new Timestamp(new Date().getTime()));
context.setAccessUser("admin");
context.setAccessProcess("MemberBhvTest");
if (isNew)
AccessContext.setAccessContextOnThread(context);
}
public void before() {
setupAccessContext();
}
public void after() {
AccessContext.clearAccessContextOnThread();
}
teedaを使う時は、上の処理をどこに仕掛ければいいのでしょうか?(DIを使う?)
それとエンティティクラス(Memberとか)をhtmlのプロパティにそのまま使うのはやめた方がいいですか?
やっぱりdtoを用意して詰め替えた方がいいのでしょうか。
ajaxからjson経由で取りに来ることも後々ありそうなのでdtoを作る方で検討していますが、
POJOだから詰め替え要らないかも?と少し夢を見ていたので未練が…笑
Elenさん、こんばんは
すいません、反応できなくて。
自己解決の通りです。AOPで設定して初期化する感じです。
ちなみにdbflute-teeda-exampleは、あえて古いバージョンの
DBFluteを使っているのでご注意ください。
> それとエンティティクラス(Memberとか)をhtmlのプロパティにそのまま使うのはやめた方がいいですか?
> やっぱりdtoを用意して詰め替えた方がいいのでしょうか。
少なくとも、フレームワークがなんだろうが、コンパイルされない領域で、
直接Entityのプロパティを参照すると、カラム名の変更やカラム削除したときに、
コンパイルエラーで検出できなくなるので、そのデメリットを背負う必要があります。
何に重点を置くかによるわけですが、DBFluteの特徴を減らす要因ではあるので、
自分は面倒でもDTOをしっかり作って詰め替えるのを周りには奨めています。
Teedaだと...ExampleだとPageクラス自体がDTOになってるような...
(ちょっとあまりに久しぶりでどうなってたかなぁと思い出してる最中です)
2012/3/30 Elen <e.crim...@gmail.com>:
> --
> このメールは Google グループのグループ「DBFluteユーザの集い」の登録者に送られています。
> このディスカッションをウェブ上で閲覧するには、https://groups.google.com/d/msg/dbflute/-/FeCiL6GD3hEJ
> にアクセスしてください。
>
> このグループに投稿するには、dbf...@googlegroups.com にメールを送信してください。
> このグループから退会するには、dbflute+u...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/dbflute?hl=ja からこのグループにアクセスしてください。
アドバイスありがとうございます。
> ちなみにdbflute-teeda-exampleは、あえて古いバージョンの
> DBFluteを使っているのでご注意ください。
これは、最新のteedaと最新のdbfluteの相性が悪いと云う意味ではないですよね?
> Teedaだと...ExampleだとPageクラス自体がDTOになってるような...
そうですね。なってました。
teedaも始めたてですが、フォームの入力を受け取る変数と、for
each用のループ変数と、出力専用のメッセージ系変数などが、クラスのフィールドにごっちゃになってるのが、ちょっと分かり難いなーと感じています。コメント書くの大事ですね。
strutsを使っていた時はそれぞれクラスに分割して、cond.memberNameとかloop.memberとかネスト参照させていました。
>> ちなみにdbflute-teeda-exampleは、あえて古いバージョンの
>> DBFluteを使っているのでご注意ください。
>
>
> これは、最新のteedaと最新のdbfluteの相性が悪いと云う意味ではないですよね?
おっと、誤解を与えるような表現してしまった申し訳ありません。
DBFluteはWEB層に対して何もアプローチしてませんので、全然関係ないです。
単に、古いバージョンのDBFluteの環境も残しておかないとということで、
TeedaのExampleでそのようにしているだけです。
> each用のループ変数と、出力専用のメッセージ系変数などが、クラスのフィールドにごっちゃになってるのが、ちょっと分かり難いなーと感じています。コメント書くの大事ですね。
そうなんです。なので、プログラマには最初しっかり
説明しないと混乱してしまいます。
コメント書いてメソッドをしっかりカテゴリ分けして
いくようにした方がいいですね。
2012/3/31 Elendira Crimsonnail <e.crim...@gmail.com>:
>>> このグループに投稿するには、dbflute@googlegroups.com にメールを送信してください。
>>> このグループから退会するには、dbflute+unsub...@googlegroups.com にメールを送信してください。
>>> 詳細については、http://groups.google.com/group/dbflute?hl=ja からこのグループにアクセスしてください。
>>
>> --
>> このメールは Google グループのグループ「DBFluteユーザの集い」の登録者に送られています。
>> このグループに投稿するには、dbflute@googlegroups.com にメールを送信してください。
>> このグループから退会するには、dbflute+unsub...@googlegroups.com にメールを送信してください。
>> 詳細については、http://groups.google.com/group/dbflute?hl=ja からこのグループにアクセスしてください。
>>
>
> --
> このメールは Google グループのグループ「DBFluteユーザの集い」の登録者に送られています。
> このグループに投稿するには、dbflute@googlegroups.com にメールを送信してください。
> このグループから退会するには、dbflute+unsub...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/dbflute?hl=ja からこのグループにアクセスしてください。
>
> dbflute-teeda-exampleを最新のteedaと最新のdbfluteで動かしてみた所、
> WARNメッセージが出てしまいました。
> 何か仕様が変わったのか?チェックが厳格になったのか?
Seasarのチェックというか、ログ通知が厳格になってるようですね。
ホットデプロイ対象のクラスが他のクラスローダーに読まれて
ホットデプロイの対象じゃなくなったらWARNが出るようです。
ルートパッケージ配下にクラスを置くとホットデプロイ対象になるので、
それで自動生成クラスまでが対象になってログに出てしまうようです。
自動生成クラスがホットデプロイ対象である必要はほとんどないので、
convention.dicon でDBFluteの自動生成クラスのパッケージを
ホットデプロイ対象から外してあげると良いです。
NamingConventionImpl.addIgnorePackageName()を使えば指定できます。
実業務だと、DBFluteの自動生成クラスって、Eclipse上の別プロジェクト
にして、プロジェクト参照(実行時はjar参照)にして複数のプロジェクトから
再利用できるようにすることが多いので、問題にはなりませんが。
2012/4/10 Elen <e.crim...@gmail.com>:
>> >>> このグループに投稿するには、dbf...@googlegroups.com にメールを送信してください。
>> >>> このグループから退会するには、dbflute+u...@googlegroups.com にメールを送信してください。
>> >>> 詳細については、http://groups.google.com/group/dbflute?hl=ja
>> >>> からこのグループにアクセスしてください。
>> >>
>> >> --
>> >> このメールは Google グループのグループ「DBFluteユーザの集い」の登録者に送られています。
>> >> このグループに投稿するには、dbf...@googlegroups.com にメールを送信してください。
>> >> このグループから退会するには、dbflute+u...@googlegroups.com にメールを送信してください。
>> >> 詳細については、http://groups.google.com/group/dbflute?hl=ja
>> >> からこのグループにアクセスしてください。
>> >>
>> >
>> > --
>> > このメールは Google グループのグループ「DBFluteユーザの集い」の登録者に送られています。
>> > このグループに投稿するには、dbf...@googlegroups.com にメールを送信してください。
>> > このグループから退会するには、dbflute+u...@googlegroups.com にメールを送信してください。
>> > 詳細については、http://groups.google.com/group/dbflute?hl=ja
>> > からこのグループにアクセスしてください。
>> >
>
> --
> このメールは Google グループのグループ「DBFluteユーザの集い」の登録者に送られています。
> このディスカッションをウェブ上で閲覧するには、https://groups.google.com/d/msg/dbflute/-/LuGDPOOtykAJ
> にアクセスしてください。
>
> このグループに投稿するには、dbf...@googlegroups.com にメールを送信してください。
> このグループから退会するには、dbflute+u...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/dbflute?hl=ja からこのグループにアクセスしてください。
> 自動生成クラスがホットデプロイ対象である必要はほとんどないので、
> convention.dicon でDBFluteの自動生成クラスのパッケージを
> ホットデプロイ対象から外してあげると良いです。
> NamingConventionImpl.addIgnorePackageName()を使えば指定できます。
こちらの方法で警告が消えました。
> 実業務だと、DBFluteの自動生成クラスって、Eclipse上の別プロジェクト
> にして、プロジェクト参照(実行時はjar参照)にして複数のプロジェクトから
> 再利用できるようにすることが多いので、問題にはなりませんが。
なるほど普通は別けるのですね。
その場合、DBFluteの自動生成側プロジェクトはDolteng Project(Application Type: Standalone)で作成して、
クラスファイル全部とdbflute.diconをjarで固めて参照先WEB-INF/libにコピーでしょうか。
試してみます。
2012年4月10日15:10 kubo <dbf...@gmail.com>:
> なるほど普通は別けるのですね。
いやまぁ、アプリが一つだけならそうしなくてもOKですよ。
ただ、よくあるのは、ユーザサイトと管理サイトとバッチとって
分かれるので、そういうときは自動生成クラスをJARにして再利用と。
> その場合、DBFluteの自動生成側プロジェクトはDolteng Project(Application Type: Standalone)で作成して、
> クラスファイル全部とdbflute.diconをjarで固めて参照先WEB-INF/libにコピーでしょうか。
> 試してみます。
そんな感じですね。
(まあ、自分は最近すっかり Dolteng 使う機会がないですが...)
Mavenやプラグインとかを使うともっとスマートに管理できるかと。
ただ、Maven自体が色々とややこしいので大変ですが。
2012/4/10 Elen <e.crim...@gmail.com>: