> 外部インターフェース用の区分値としての要素が大きい場合、
> できれば、DBFluteに依存しない形で区分値(Enum)を定義したいと考えています。(使い回しの観点から)
依存しないってのは、つまり、import文で DBFlute ランタイムの
クラスを参照しない CDef を作りたいって感じなのかな!?
現状の CDef だと具体的に発生する問題はどんなことがあるかな?
外部インターフェース用の区分値として利用するプログラムで、
DBFlute ランタイムの jar が必要になってしまう、って感じかな!?
> または、こうしたケースの How to があれば、教えていただけるとありがたいです。
> ex.
> DBFluteで、区分値を定義する。
> DBFluteに依存しない形で、区分値(Enum)を定義する。
> その両方の区分値をマッピングするクラスを定義する。
イメージとしては、FlexやJSONで利用する転送用のDTO、
SimpleDto のイメージかな。DBFlute依存しないENUMも作って、
CDefとのマッパーも作って。
(ENUMだからマッパーは要らないかな...)
simpleCDefDefinitionMap.dfprop みたいなの作って、
パッケージ名とか指定したら、シンプルな CDef が
自動生成されるとか。
2011/7/4 awaawa <p1us3i...@gmail.com>:
> --
> このメールは Google グループのグループ「DBFluteユーザの集い」の登録者に送られています。
> このグループに投稿するには、dbf...@googlegroups.com にメールを送信してください。
> このグループから退会するには、dbflute+u...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/dbflute?hl=ja からこのグループにアクセスしてください。
>
>
> simpleCDefDefinitionMap.dfprop みたいなの作って、
> パッケージ名とか指定したら、シンプルな CDef が
> 自動生成されるとか。
で、どさくさに紛れて、DB関係ないCDefも
そのdfpropの中で指定できるようにしちゃって...
(単なるENUM自動生成ツールに)
2011/7/4 kubo <dbf...@gmail.com>:
ひとまず、DBFlute依存せずに外部インターフェースでも
利用できるDB上の区分値クラス(実質的にCDefのコピー)、
これは SimpleDTO の概念と同じく需要がありそうなので、
対応します。SimpleCDef という機能名で。
SimpleDTOの一部の機能として実装しました。
ただ、SimpleDTOを自動生成しなくてもSimpleCDefだけで
自動生成ができるような仕組みになっています。
simpleDtoDefinitionMap.dfprop を作成して、
o simpleCDefOutputDirectory
o simpleCDefClass
o simpleCDefPackage
o simpleCDefTargetList
を設定すると自動生成されます。
dbflute-guice-example にて Example がありますので参考に。
DBFlute-0.9.8.8-00-SNAPSHOT に反映されています。
DBFluteランタイムは、0.9.8.7 のままでOKです。
それにしても 8.8 って、エリア88に影響されてか、
大事にしたいバージョンですね。
そして、DBの関係ない区分値ですが、
結局、DB上の区分値だろうが、そうでない区分値だろうが、
DBFluteで自動生成するんならDBFluteプロパティ(dfprop)に
定義して自動生成するって形には変わりないので、
今の classificationDefinitionMap で定義して、どこのカラムにも
Deployment (関連付け)されない区分値が、つまりはDBの関係ない
区分値と言えるのかなと。
2011/7/5 awaawa <p1us3i...@gmail.com>:
> SimpleCDef、SimpleDTO、めちゃくちゃ便利です!!!
> SimpleDTOの機能は何となくは知っていたのですが、
> 自動生成したのは今回が初だったので。
おおぅ、SimpleDTOは焦点に当たってなかったけど、
喜んでくれてなにより。
(一応、SimpleCDefだけでも利用できるようにしたけど)
意外に需要があるようなので、そろそろ隠し機能から
脱却するかなぁ...
ちなみに参考までに、どんな構成で利用するつもりなの?
> 【1】出力先の指定方法について
確かに、SimpleDTO は別のプロジェクトに出力したりとか
考えられるので、「~/」で始まるパスの場合は、
「DBFluteクライアントからのパス」という風にしました。
他のパス指定でも同じ仕様を適用してもいいかなと
思ったりもするけど、とりあえず実験的にSimpleDTOで。
> 【2】SimpleDTOに区分値のメソッドを
> SimpleCDef、SimpleDTOの両機能を有効にしていて、
論理的にはあってもいいなとやりながら思っていたので、
awaawaさんが業務で使ってくれるのであればやります。
isClassificationDeployment = true ってやると、
SimpleDTOでも区分値メソッドが生成されるようになります。
使ってね。
> 【3】Entityのclassifyメソッド
> Entityのclassifyメソッドをそろそろ(1.0.0までに)
そうしました。移行時の注意にも書きました。
もともとプロパティ一つで生成されたりされなかったりと
制御できるようにしてたので、単にデフォルト値を false に
しただけって感じです。
これらが DBFlute-0.9.8.8-02-SNAPSHOT に
反映されています。
2011/7/7 awaawa <p1us3i...@gmail.com>:
消えるのではなく、設定ファイルのデフォルトを変更するって話だったのでは?
littleAdjustmentMap.dfprop の isMakeEntityOldStyleClassify
で生成制御できるから、classify→setへの移行のタイミングを見計らえばいいのかなと。
http://dbflute.sandbox.seasar.org/ja/environment/upgrade/migration/migrate0987to0988.html
今までもなくなるメソッドは、littleAdjustmentMapでデフォルトをfalse→メソッドを消すって流れでしたし。
TO:jfluteさん
DBFluteの移行情報の
「DBFlute-0.9.8.7 から 0.9.8.8 への移行」のリンクが
migrate0986to0987.html
になっちゃってます。
--
西山はじめ
2011年7月8日16:24 Yuichi Kaneko <yuichi...@gmail.com>:
> 消えるのではなく、設定ファイルのデフォルトを変更するって話だったのでは?
YES
> DBFluteの移行情報の
> 「DBFlute-0.9.8.7 から 0.9.8.8 への移行」のリンクが
>
> migrate0986to0987.html
うわぉ、ありがとう。
直しておきましたー。
2011/7/8 西山はじめ <hajim...@gmail.com>:
確認ありがとう。
> 1. BsXxxDtroで、Cdef、InternalUtilのクラス解決エラー
> →import宣言を追加
> 2. 1.の修正後で、AppCDef.XxxからCDef.Xxxの変換エラー
> →isXxxのメソッド内のCDefをAppCDefに修正。(&1.で追加したCDefのimprot宣言を削除)
こちら、RC1 で修正しました。
Exampleがないので、完全にawaawaさんにお任せって
感じで申し訳ないけど、よろしくです。
ちなみにSimpleDTOは、Flex や JSON通信と
合わせるときに利用していました。
まあ、もうちょい実践で揉む必要があるかなぁ。
2011/7/10 awaawa <p1us3i...@gmail.com>:
志村さん、こんにちは
書いてないので、
dbflute-flexserver-example を参考にしてください。
FLEX で一案件(+ どうやらもう一案件)、JSONで一案件、
実際にSimpleDTOが利用された実績を聞いています。
JSON対応するのに、simpleDtoDefinitnioMap.dfprop の
fieldInitCharType や isFieldNonPrefix を対応して
利用してもらったって経緯があります。
JSONライブラリがフィールドに直接値をセットする
仕様だったので。。。
※そのとき使ってたJSONライブラリって何だっけかなぁ...
2011/7/10 Masanobu Shimura <mikes...@gmail.com>:
awaawaさん、ありがとう。
今ドキュメント作成中で、こっちでもちゃんとテストを
作ろうとしたら、
「区分値メソッドがある場合にネイティブ型のSetterを削除するオプション」
が有効になっている場合に、DtoMapper で普通にコンパイルエラーに
なるのを発見してどうしようかレインボーのハーブティー飲みながら
途方に暮れているところです。
(たまたま dbflute-guice-example で作ってたので気付いた)
DTOの方はSimpleって言ってるくらいだから、
ネイティブ型のSetterを削除しなくてもいいかな。
Setterがなかったら連携するフレームワーク
が困ることもあるわけだし。
さて、どうしようかな...
2011/7/10 awaawa <p1us3i...@gmail.com>:
> simpleCDefTargetList で定義していない区分値は、
> AppCDefで作成されないので、
> SimpleDto でコンパイルエラーになってしまいました。
まあ、それは仕様でOKでしょう。
Deploymentするってことは全部の区分値が必要なわけなので。
Setter の問題はクリアして、今度は、
ApplicationOutsideSql に対応するCustomizeEntityに対応するDtoを
どこに出力するか、うーん難しくなってきたねぇ...
2011/7/10 awaawa <p1us3i...@gmail.com>:
> Setter の問題はクリアして、今度は、
> ApplicationOutsideSql に対応するCustomizeEntityに対応するDtoを
> どこに出力するか、うーん難しくなってきたねぇ...
対応しました。ApplicationOutsideSqlのDtoだけは、
固定でそっちのプロジェクトに出力するようにしました。
あと、簡単ながらドキュメント書きました。
公開機能だけど、固定的なドキュメントを作成しない機能
という位置付けにしました。(まあ発展途上機能とでも言いますか)
// (転送用の)シンプルなDTO | DBFlute
http://dbflute.sandbox.seasar.org/ja/manual/function/genbafit/projectfit/simpledto/index.html
RC1上書きしています。
awaawaさん、申し訳ないけど、簡単でいいので
そっちでも動作確認してくれるかな?
2011/7/10 kubo <dbf...@gmail.com>:
志村さん
> 試してみます。
よろしくお願いします。
DBFlute-0.9.8.8-RC1 でお願いします。
> なお私も JSONICを使っています。
なるほど、了解です。
ほんの少し試してみた限りでは、特にインスタンス変数の名前を
調整しなくても JSONIC で encode, decode できました。
-> dbflute-guice-example の WxSimpleDtoJsonTest にて
※あのときは別のライブラリを使ってたのかな...!?
JSONIC利用者の方に、参考までに報告です。
LoadReferrerで子テーブルを保持したDTOを
JSONICで encode() すると、
「OutOfMemoryError: Java heap space」
とかになってしまいますね。
もしや、循環参照を辿ってしまっているのかも。
ただ、親テーブルの場合は正常に動作するので、
子テーブルを走査するときにだけ、子テーブルの親テーブル
で基点テーブル(自分)に戻ってきちゃって...とか!?
ひたすら、ここをぐるぐる回っちゃってる。
...
at net.arnx.jsonic.ListFormatter.format(Formatter.java:453)
at net.arnx.jsonic.JSON.format(JSON.java:842)
at net.arnx.jsonic.ObjectFormatter.format(Formatter.java:664)
at net.arnx.jsonic.JSON.format(JSON.java:842)
at net.arnx.jsonic.ObjectFormatter.format(Formatter.java:664)
at net.arnx.jsonic.ListFormatter.format(Formatter.java:453)
...
ありがとう。なるほど、うまく動いた。
でも、JSONIC使うときって、みんな new して
最大深度を設定するものかなぁ...
(ちょっと面倒な面があるね)
LoadReferrerで取得した子テーブルは、
同時に基点テーブルへの参照も持つようにしていて、
DtoMapperでそれも忠実に引き継ぐのだけど、
SimpleDtoに関しては転送用ということで、
「別のライブラリに解析されることを前提とする」
ということで、相互参照させない方が良さそうに思える。
まあ、そもそもDBFlute側のEntityでは、
親テーブルは基点(子)テーブルへの相互参照は持たず、
LoadReferrerの子テーブルは基点(子)テーブルは持つ、
という若干中途半端な感じになっているだけど...
つまり、相互参照の必要性って業務的にはほとんどないと
言えるので、少なくともSimpleDtoでは選べるようにするか...
2011/7/10 awaawa <p1us3i...@gmail.com>:
何度もRC1を上書きして申し訳ないけど、
> LoadReferrerで取得した子テーブルは、
> 同時に基点テーブルへの参照も持つようにしていて、
> DtoMapperでそれも忠実に引き継ぐのだけど、
> SimpleDtoに関しては転送用ということで、
> 「別のライブラリに解析されることを前提とする」
> ということで、相互参照させない方が良さそうに思える。
というようにしました。
気にせず、JSONICでLoadReferrerされたデータを
encode() できるようになりました。
(判定メソッドをオーバーライドすれば元の動きにもできる)
2011/7/10 kubo <dbf...@gmail.com>:
志村さん、ご確認ありがとうございます。
本当に助かります。
> ただ今やっている要件では、timestamp型の場合、そのままSirializeするのでは
> 無くて、yyyy-mm-dd hh;mm:ssのString型に変換したかったので、
なるほど、転送先でDate型で受け取るのではなく、
サーバー側でフォーマット済みにしてしまうと。
確かに、long値で渡されても...って感じですね。
なんか、このくらいはJSONICのオプションで
どうにかして欲しいなぁと思ってしまいますね...
json.setDateFormat("yyyy-MM-dd HH:mm:ss"); な感じで。
ぱっと見なさそうなので、
JSONHintアノテーションを使うしかないのかなと。
simpleDtoDefinitionMap.dfprop の中で、
jsonicDecorationMap = map:{
instanceOfDatePattern = yyyy-MM-dd HH:mm:ss
}
ってな感じに指定したら、JSONHintアノテーションで
yyyy-MM-dd HH:mm:ss が指定されるようにしてみますね。
(今日は休日お出かけなので、夜にでもやります)
志村さんのところの要件では、(時分秒のない)日付だけの
date型の場合のフォーマットはどうするのでしょうか?
(date と timestamp で違うフォーマットにしたいのかどうか)
2011/7/11 Masanobu Shimura <mikes...@gmail.com>:
志村さん、日付フォーマットの件対応しました。
RC1 を上書きしていますのでぜひご利用ください。
dbflute-guice-example の simpleDtoDefinitionMap.dfprop
を参考にしてください。
(ついでに dfprop 自体を少し整理しました)
一つ制限として、フォーマット定義に ";" セミコロンが利用できません。
ですが「yyyy-MM-dd HH:mm:ss」 という一般的な形式であれば、
特に問題ないかと思います。(コロンは大丈夫)
--
志村さん、ありがとうございます。
おかげ様で SimpleDto が進化しました。
> 現在使用している Javascriptの SmartClient との相性が大変向上しました。
なるほど、SmartClient との相性なのですね。
というか、JSONICの日付が long 値になる仕様で
相性のいいClient側ってあるのかなぁ!?って...
2011/7/12 Masanobu Shimura <mikes...@gmail.com>:
SimpleDtoって何者!?っていう人のために、
ドキュメントに概念図も付けました。
// SimpleDtoの概念図 | DBFlute
http://dbflute.sandbox.seasar.org/ja/manual/function/genbafit/projectfit/simpledto/index.html#concept
awaawaさん、確認ありがとう。
よかった。良い感じですね。
JSONICの情報提供もありがとう。
まあ、若干トリッキーではあるので、
DBFluteでフィットさせるオプションは
あってもそれはそれでいいという感じだね。
これでしばらく別の細かいタスクをこなせば、
正式リリースかなー
2011/7/15 awaawa <p1us3i...@gmail.com>: