区分値機能の拡張、How to

閲覧: 243 回
最初の未読メッセージにスキップ

awaawa

未読、
2011/07/03 11:08:102011/07/03
To: DBFluteユーザの集い
jfluteさん

awaawaです。

区分値機能についてです。
区分値機能はDBの区分値を表すためのものだと思うのですが、
DBの区分値でもあり、外部インターフェース用の区分値でもある場合があると思います。

外部インターフェース用の区分値としての要素が大きい場合、
できれば、DBFluteに依存しない形で区分値(Enum)を定義したいと考えています。(使い回しの観点から)
その上で、DBFluteで、その区分値(Enum)を利用できる仕組み(拡張機能)があるとうれしいのですが、
できないでしょうか。

または、こうしたケースの How to があれば、教えていただけるとありがたいです。
ex.
DBFluteで、区分値を定義する。
DBFluteに依存しない形で、区分値(Enum)を定義する。
その両方の区分値をマッピングするクラスを定義する。

kubo

未読、
2011/07/03 18:25:032011/07/03
To: dbf...@googlegroups.com
jfluteです。

> 外部インターフェース用の区分値としての要素が大きい場合、
> できれば、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 からこのグループにアクセスしてください。
>
>

kubo

未読、
2011/07/03 18:53:172011/07/03
To: dbf...@googlegroups.com
jfluteです。

> simpleCDefDefinitionMap.dfprop みたいなの作って、
> パッケージ名とか指定したら、シンプルな CDef が
> 自動生成されるとか。

で、どさくさに紛れて、DB関係ないCDefも
そのdfpropの中で指定できるようにしちゃって...
(単なるENUM自動生成ツールに)

2011/7/4 kubo <dbf...@gmail.com>:

awaawa

未読、
2011/07/04 14:27:512011/07/04
To: DBFluteユーザの集い
awaawaです。

すいません、返信遅れました。

> 外部インターフェース用の区分値として利用するプログラムで、
> DBFlute ランタイムの jar が必要になってしまう、って感じかな!?
そのとおりです。

> CDefとのマッパーも作って。
> (ENUMだからマッパーは要らないかな..
確かに、DBFlute に依存しない ENUM の toString を Override すれば、
「return _codeValueMap.get(code.toString().toLowerCase());」
で問題ないですね。
マッパーで ENUM 同士のマッピングを厳密にして、
コードセーフ(マッピング間違い防止)が実現できたらと思ったのですが、
そこまで厳密でなくても、いいような気がしてきました。

整理すると、DBFlute に依存しない ENUM を作る手間を
単に面倒くさがっているだけですね。。。

> (単なるENUM自動生成ツールに)
まさにこれですね!
あったらうれしいですが、DBFlute のスコープとしてはどうなんでしょう。

そもそも、java の Enum 自体がもうちょっとイケてたら、いいんですけどね。

On 7月4日, 午前7:53, kubo <dbfl...@gmail.com> wrote:
> jfluteです。
>
> > simpleCDefDefinitionMap.dfprop みたいなの作って、
> > パッケージ名とか指定したら、シンプルな CDef が
> > 自動生成されるとか。
>
> で、どさくさに紛れて、DB関係ないCDefも
> そのdfpropの中で指定できるようにしちゃって...
> (単なるENUM自動生成ツールに)
>
> 2011/7/4 kubo <dbfl...@gmail.com>:
>
>
>
>
>
>
>
> > jfluteです。
>
> >> 外部インターフェース用の区分値としての要素が大きい場合、
> >> できれば、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 <p1us3inus2...@gmail.com>:

kubo

未読、
2011/07/05 3:26:342011/07/05
To: dbf...@googlegroups.com
jfluteです。

ひとまず、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>:

awaawa

未読、
2011/07/06 14:40:572011/07/06
To: DBFluteユーザの集い
awaawaです。

返信遅れてすいません。早急な対応ありがとうございます。

先ほど確認できました。
SimpleCDef、SimpleDTO、めちゃくちゃ便利です!!!
SimpleDTOの機能は何となくは知っていたのですが、
自動生成したのは今回が初だったので。

使ってみて、いくつか質問と要望があります。
【1】出力先の指定方法について
basicInfoMap.dfpropで
generateOutputDirectory = ../src/dbflute/【db名】/java
と設定していて、別のフォルダにソースを自動生成したい場合、
simpleCDefOutputDirectory = ../../../../src/main/java
と設定する必要があるのですが、
他にパスを簡単に設定する方法あるでしょうか。
(なければこの方法でいきます。)

【2】SimpleDTOに区分値のメソッドを
SimpleCDef、SimpleDTOの両機能を有効にしていて、
classificationDeployment = true
と設定すると、
SimpleDTOに区分値のメソッドが追加されるってどうでしょうか。
オーバースペック過ぎですかね?
もし、対応してもらえる場合、【3】の内容が若干絡んでくるかと思います。

【3】Entityのclassifyメソッド
Entityのclassifyメソッドをそろそろ(1.0.0までに)
消してもいいのではないかと思うのですが、いかがでしょうか。
setメソッドがそろそろ浸透していると思うので。

参考:以前この件が話されていたjfluteさんのブログのコメント
http://d.hatena.ne.jp/jflute/20100316#c1270005727
> 2011/7/5 awaawa <p1us3inus2...@gmail.com>:

kubo

未読、
2011/07/07 6:56:352011/07/07
To: dbf...@googlegroups.com
jfluteです。

> 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>:

Yuichi Kaneko

未読、
2011/07/08 3:24:412011/07/08
To: dbf...@googlegroups.com
Kanekoです。
 
classifyを消されるのは、とても困ってしまいます。。。。
確かに、setが使われることも多くはなってきたのでしょうが、
自分が絡んだPJでは、classifyを浸透させてきてたので、
なくなってしまうと、一気に大量のコンパイルエラーが。。。。
 
(ASP展開の自社プロダクト(もう転職しちゃったから、いまは、自社じゃないですが。。。)
なので、普通にDBFluteのバージョンあげてます。
初期リリース時は、0.6.3だったんですけどね。。。。)
 
コンパイルエラーだけで済む話であれば、まあ、
力技で何とでもできそうな感じはするので、
何とでもなりそうなのかも。
 
いったん、deprecatedにして、移行を促すという方法もありかと。。。
思ったのですが、一気にコンパイルエラーが出てくれたほうが、
修正がもれないなということに思い至る。。。。
 
2011年7月7日3:40 awaawa <p1us3i...@gmail.com>:
 --
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
金子 雄一  Yuichi Kaneko
E-mail : yuichi...@gmail.com
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆

西山はじめ

未読、
2011/07/08 4:00:212011/07/08
To: dbf...@googlegroups.com
hajimeniです。

消えるのではなく、設定ファイルのデフォルトを変更するって話だったのでは?

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>:

kubo

未読、
2011/07/08 7:19:352011/07/08
To: dbf...@googlegroups.com
jfluteです。

> 消えるのではなく、設定ファイルのデフォルトを変更するって話だったのでは?

YES

> DBFluteの移行情報の
> 「DBFlute-0.9.8.7 から 0.9.8.8 への移行」のリンクが
>
> migrate0986to0987.html

うわぉ、ありがとう。
直しておきましたー。

2011/7/8 西山はじめ <hajim...@gmail.com>:

awaawa

未読、
2011/07/09 11:29:112011/07/09
To: DBFluteユーザの集い
awaawaです。

> 意外に需要があるようなので、そろそろ隠し機能から
> 脱却するかなぁ...
自分も需要あると思います。
いい機能なので、脱却に1票です。

> ちなみに参考までに、どんな構成で利用するつもりなの?
具体的にはまだです(汗)
考え中です。。。

【1】
確認できました。ありがとうございます。

【2】
確認しました。
ただコンパイルエラーが出てしまいました。ご確認お願いします。
1. BsXxxDtroで、Cdef、InternalUtilのクラス解決エラー
 →import宣言を追加
2. 1.の修正後で、AppCDef.XxxからCDef.Xxxの変換エラー
 →isXxxのメソッド内のCDefをAppCDefに修正。(&1.で追加したCDefのimprot宣言を削除)

【3】
確認できました。ありがとうございます。

On 7月8日, 午後8:19, kubo <dbfl...@gmail.com> wrote:
> jfluteです。
>
> > 消えるのではなく、設定ファイルのデフォルトを変更するって話だったのでは?
>
> YES
>
> > DBFluteの移行情報の
> > 「DBFlute-0.9.8.7 から 0.9.8.8 への移行」のリンクが
>
> > migrate0986to0987.html
>
> うわぉ、ありがとう。
> 直しておきましたー。
>
> 2011/7/8 西山はじめ <hajimeni...@gmail.com>:
>
>
>
>
>
>
>
> > hajimeniです。
>
> > 消えるのではなく、設定ファイルのデフォルトを変更するって話だったのでは?
>
> > littleAdjustmentMap.dfprop の isMakeEntityOldStyleClassify
> > で生成制御できるから、classify→setへの移行のタイミングを見計らえばいいのかなと。
>
> >http://dbflute.sandbox.seasar.org/ja/environment/upgrade/migration/mi...
>
> > 今までもなくなるメソッドは、littleAdjustmentMapでデフォルトをfalse→メソッドを消すって流れでしたし。
>
> > TO:jfluteさん
>
> > DBFluteの移行情報の
> > 「DBFlute-0.9.8.7 から 0.9.8.8 への移行」のリンクが
>
> > migrate0986to0987.html
>
> > になっちゃってます。
>
> > --
> > 西山はじめ
>
> > 2011年7月8日16:24 Yuichi Kaneko <yuichikan...@gmail.com>:
> >> Kanekoです。
>
> >> classifyを消されるのは、とても困ってしまいます。。。。
> >> 確かに、setが使われることも多くはなってきたのでしょうが、
> >> 自分が絡んだPJでは、classifyを浸透させてきてたので、
> >> なくなってしまうと、一気に大量のコンパイルエラーが。。。。
>
> >> (ASP展開の自社プロダクト(もう転職しちゃったから、いまは、自社じゃないですが。。。)
> >> なので、普通にDBFluteのバージョンあげてます。
> >> 初期リリース時は、0.6.3だったんですけどね。。。。)
>
> >> コンパイルエラーだけで済む話であれば、まあ、
> >> 力技で何とでもできそうな感じはするので、
> >> 何とでもなりそうなのかも。
>
> >> いったん、deprecatedにして、移行を促すという方法もありかと。。。
> >> 思ったのですが、一気にコンパイルエラーが出てくれたほうが、
> >> 修正がもれないなということに思い至る。。。。
>
> >> 2011年7月7日3:40 awaawa <p1us3inus2...@gmail.com>:
> ...
>
> もっと読む ≫

kubo

未読、
2011/07/09 20:24:302011/07/09
To: dbf...@googlegroups.com
jfluteです。

確認ありがとう。

> 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>:

Masanobu Shimura

未読、
2011/07/09 20:55:022011/07/09
To: dbf...@googlegroups.com
久保さん

simpleDTOの使い方はどの辺に書いてありますか?
JSONに変換で困って S2DXOで Linked HashMapに変換しているのですが、これが使えるか検討したいと思っています。

急ぎませんがよろしくお願いいたします。

志村

kubo

未読、
2011/07/09 21:50:582011/07/09
To: dbf...@googlegroups.com
jfluteです。

志村さん、こんにちは

書いてないので、
dbflute-flexserver-example を参考にしてください。
FLEX で一案件(+ どうやらもう一案件)、JSONで一案件、
実際にSimpleDTOが利用された実績を聞いています。

JSON対応するのに、simpleDtoDefinitnioMap.dfprop の
fieldInitCharType や isFieldNonPrefix を対応して
利用してもらったって経緯があります。
JSONライブラリがフィールドに直接値をセットする
仕様だったので。。。

※そのとき使ってたJSONライブラリって何だっけかなぁ...

2011/7/10 Masanobu Shimura <mikes...@gmail.com>:

awaawa

未読、
2011/07/10 1:42:022011/07/10
To: DBFluteユーザの集い
awaawaです。

RC1 確認しました。ばっちりでした!

ちなみに、今作っているシステムで JSON を使っています。
JSON ライブラリは、JSONIC です。

On 7月10日, 午前10:50, kubo <dbfl...@gmail.com> wrote:
> jfluteです。
>
> 志村さん、こんにちは
>
> 書いてないので、
> dbflute-flexserver-example を参考にしてください。
> FLEX で一案件(+ どうやらもう一案件)、JSONで一案件、
> 実際にSimpleDTOが利用された実績を聞いています。
>
> JSON対応するのに、simpleDtoDefinitnioMap.dfprop の
> fieldInitCharType や isFieldNonPrefix を対応して
> 利用してもらったって経緯があります。
> JSONライブラリがフィールドに直接値をセットする
> 仕様だったので。。。
>
> ※そのとき使ってたJSONライブラリって何だっけかなぁ...
>
> 2011/7/10 Masanobu Shimura <mikeshim...@gmail.com>:

kubo

未読、
2011/07/10 2:02:352011/07/10
To: dbf...@googlegroups.com
jfluteです。

awaawaさん、ありがとう。

今ドキュメント作成中で、こっちでもちゃんとテストを
作ろうとしたら、
「区分値メソッドがある場合にネイティブ型のSetterを削除するオプション」
が有効になっている場合に、DtoMapper で普通にコンパイルエラーに
なるのを発見してどうしようかレインボーのハーブティー飲みながら
途方に暮れているところです。
(たまたま dbflute-guice-example で作ってたので気付いた)

DTOの方はSimpleって言ってるくらいだから、
ネイティブ型のSetterを削除しなくてもいいかな。
Setterがなかったら連携するフレームワーク
が困ることもあるわけだし。

さて、どうしようかな...

2011/7/10 awaawa <p1us3i...@gmail.com>:

awaawa

未読、
2011/07/10 2:35:482011/07/10
To: DBFluteユーザの集い
awaawaです。

なるほど、複数の設定が影響し合って、
コンパイルエラーになるケースがありますねー

自分の方でも同じような(?)ケースが。

はじめ、simpleCDefTargetList = list:{ } ではなく、
適当にいくつかの区分値を定義していました。

その後、 isClassificationDeployment の実装確認のため、
再度自動生成したら、
simpleCDefTargetList で定義していない区分値は、
AppCDefで作成されないので、
SimpleDto でコンパイルエラーになってしまいました。

なので、simpleCDefTargetList = list:{ } に直しました。

isClassificationDeployment を使う場合は、
simpleCDefTargetList を個別に設定するのは、若干運用コストがかかりますね。
(おそらく、simpleCDefTargetList = list:{ } の設定が推奨って感じですね。)

On 7月10日, 午後3:02, kubo <dbfl...@gmail.com> wrote:
> jfluteです。
>
> awaawaさん、ありがとう。
>
> 今ドキュメント作成中で、こっちでもちゃんとテストを
> 作ろうとしたら、
> 「区分値メソッドがある場合にネイティブ型のSetterを削除するオプション」
> が有効になっている場合に、DtoMapper で普通にコンパイルエラーに
> なるのを発見してどうしようかレインボーのハーブティー飲みながら
> 途方に暮れているところです。
> (たまたま dbflute-guice-example で作ってたので気付いた)
>
> DTOの方はSimpleって言ってるくらいだから、
> ネイティブ型のSetterを削除しなくてもいいかな。
> Setterがなかったら連携するフレームワーク
> が困ることもあるわけだし。
>
> さて、どうしようかな...
>
> 2011/7/10 awaawa <p1us3inus2...@gmail.com>:

kubo

未読、
2011/07/10 2:53:152011/07/10
To: dbf...@googlegroups.com
jfluteです。

> simpleCDefTargetList で定義していない区分値は、
> AppCDefで作成されないので、
> SimpleDto でコンパイルエラーになってしまいました。

まあ、それは仕様でOKでしょう。
Deploymentするってことは全部の区分値が必要なわけなので。

Setter の問題はクリアして、今度は、
ApplicationOutsideSql に対応するCustomizeEntityに対応するDtoを
どこに出力するか、うーん難しくなってきたねぇ...

2011/7/10 awaawa <p1us3i...@gmail.com>:

kubo

未読、
2011/07/10 4:32:242011/07/10
To: dbf...@googlegroups.com
jfluteです。

> 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>:

Masanobu Shimura

未読、
2011/07/10 4:37:332011/07/10
To: dbf...@googlegroups.com
久保さん

早速の返信有難う御座いました。
試してみます。
なお私も JSONICを使っています。

志村

2011年7月10日10:50 kubo <dbf...@mail.com>:

kubo

未読、
2011/07/10 4:41:352011/07/10
To: dbf...@googlegroups.com
jfluteです。

志村さん

> 試してみます。

よろしくお願いします。
DBFlute-0.9.8.8-RC1 でお願いします。

> なお私も JSONICを使っています。

なるほど、了解です。
ほんの少し試してみた限りでは、特にインスタンス変数の名前を
調整しなくても JSONIC で encode, decode できました。
-> dbflute-guice-example の WxSimpleDtoJsonTest にて

※あのときは別のライブラリを使ってたのかな...!?

kubo

未読、
2011/07/10 8:49:512011/07/10
To: dbf...@googlegroups.com
jfluteです。

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)
...

awaawa

未読、
2011/07/10 9:02:452011/07/10
To: DBFluteユーザの集い
awaawaです。

動作確認、少々お待ちください。

OutOfMemoryError の件ですが、
最大深度の設定をすれば、大丈夫です。
http://jsonic.sourceforge.jp/index.html#maxdepth

kubo

未読、
2011/07/10 9:56:502011/07/10
To: dbf...@googlegroups.com
jfluteです。

ありがとう。なるほど、うまく動いた。
でも、JSONIC使うときって、みんな new して
最大深度を設定するものかなぁ...
(ちょっと面倒な面があるね)

LoadReferrerで取得した子テーブルは、
同時に基点テーブルへの参照も持つようにしていて、
DtoMapperでそれも忠実に引き継ぐのだけど、
SimpleDtoに関しては転送用ということで、
「別のライブラリに解析されることを前提とする」
ということで、相互参照させない方が良さそうに思える。

まあ、そもそもDBFlute側のEntityでは、
親テーブルは基点(子)テーブルへの相互参照は持たず、
LoadReferrerの子テーブルは基点(子)テーブルは持つ、
という若干中途半端な感じになっているだけど...
つまり、相互参照の必要性って業務的にはほとんどないと
言えるので、少なくともSimpleDtoでは選べるようにするか...

2011/7/10 awaawa <p1us3i...@gmail.com>:

kubo

未読、
2011/07/10 11:27:182011/07/10
To: dbf...@googlegroups.com
jfluteです。

何度もRC1を上書きして申し訳ないけど、

> LoadReferrerで取得した子テーブルは、
> 同時に基点テーブルへの参照も持つようにしていて、
> DtoMapperでそれも忠実に引き継ぐのだけど、
> SimpleDtoに関しては転送用ということで、
> 「別のライブラリに解析されることを前提とする」
> ということで、相互参照させない方が良さそうに思える。

というようにしました。
気にせず、JSONICでLoadReferrerされたデータを
encode() できるようになりました。
(判定メソッドをオーバーライドすれば元の動きにもできる)

2011/7/10 kubo <dbf...@gmail.com>:

Masanobu Shimura

未読、
2011/07/10 20:07:522011/07/10
To: dbf...@googlegroups.com
久保さん

試してみました。
うまく行きました。

ただ今やっている要件では、timestamp型の場合、そのままSirializeするのでは
無くて、yyyy-mm-dd hh;mm:ssのString型に変換したかったので、
s2dxoで @TimestampPattern("yyyy-MM-dd HH:mm:ss")のAnnotationを
付けて Linked HashMapに変換するのがCoding的には良さそうです。

此の様な特殊要件がなければ大変有効だと思います。

志村

2011年7月10日17:41 kubo <dbf...@gmail.com>:

kubo

未読、
2011/07/10 21:07:502011/07/10
To: dbf...@googlegroups.com
jfluteです。

志村さん、ご確認ありがとうございます。
本当に助かります。

> ただ今やっている要件では、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>:

Masanobu Shimura

未読、
2011/07/10 21:32:302011/07/10
To: dbf...@googlegroups.com
久保さん

早速の返信有難う御座いました。

日付の場合は yyyy-mm-ddを想定しています。
従って特に変更せず日付部分のみの使用で問題ありません。

現在は取り敢えず、 simpleDTOに変換後 S2dxoで変換してみました。
これでも、 Entityに含まれる不要な Meta Dataが無いので改善されました。

急ぎませんのでご提案の機能が出来れば更に便利になりますので
ご検討をお願いします。

志村

2011年7月11日10:07 kubo <dbf...@gmail.com>:

kubo

未読、
2011/07/11 9:45:042011/07/11
To: dbf...@googlegroups.com
jfluteです。

志村さん、日付フォーマットの件対応しました。
RC1 を上書きしていますのでぜひご利用ください。
dbflute-guice-example の simpleDtoDefinitionMap.dfprop
を参考にしてください。
(ついでに dfprop 自体を少し整理しました)

一つ制限として、フォーマット定義に ";" セミコロンが利用できません。
ですが「yyyy-MM-dd HH:mm:ss」 という一般的な形式であれば、
特に問題ないかと思います。(コロンは大丈夫)

Masanobu Shimura

未読、
2011/07/11 17:57:012011/07/11
To: dbf...@googlegroups.com
久保さん

早速の対応有難う御座いました。
完璧です。
これで大変 JSONが使いやすくなりました。
現在使用している Javascriptの SmartClient との相性が大変向上しました。

志村

2011年7月11日22:45 kubo <dbf...@gmail.com>:

--

kubo

未読、
2011/07/11 20:29:172011/07/11
To: dbf...@googlegroups.com
jfluteです。

志村さん、ありがとうございます。
おかげ様で SimpleDto が進化しました。

> 現在使用している Javascriptの SmartClient との相性が大変向上しました。
なるほど、SmartClient との相性なのですね。
というか、JSONICの日付が long 値になる仕様で
相性のいいClient側ってあるのかなぁ!?って...

2011/7/12 Masanobu Shimura <mikes...@gmail.com>:

kubo

未読、
2011/07/12 5:15:262011/07/12
To: dbf...@googlegroups.com
jfluteです。

SimpleDtoって何者!?っていう人のために、
ドキュメントに概念図も付けました。

// SimpleDtoの概念図 | DBFlute
http://dbflute.sandbox.seasar.org/ja/manual/function/genbafit/projectfit/simpledto/index.html#concept

awaawa

未読、
2011/07/14 14:08:162011/07/14
To: DBFluteユーザの集い
awaawaです。

少々といったのに、報告がだいぶ遅くなりました。

確認できましたー
以下の組み合わせもバッチリでした。
・applicationOutsideSqlMap
・SimpleDto
・SimpleDef
・isClassificationDeployment

> でも、JSONIC使うときって、みんな new して
> 最大深度を設定するものかなぁ...
以下の方法があるようです。
# http://jsonic.sourceforge.jp/index.html#extends
# 継承して作成した自作クラスをJSON.prototypeにセットすることで、
# JSON.encodeやJSON.decodeの動作を置き換えることも可能

> json.setDateFormat("yyyy-MM-dd HH:mm:ss"); な感じで。
JSON.preformatをオーバーロードすれば、一元的にできます。
※おそらくアノテーションで定義した場合は、それが優先されるはずです。

> というか、JSONICの日付が long 値になる仕様で
> 相性のいいClient側ってあるのかなぁ!?って...
確かにそうなんですよね。
extjsも「1970 年 1 月 1 日 00:00:00 GMT からのミリ秒数」はサポートしてなくて、
最小単位が秒数なんですよね。。。
javascriptのライブラリではミリ秒は扱わないのが一般的なんですかね。
データの質としては細かい方がいいと思うので、ミリ秒数が自分はいいと思うのですが、
いかんせん、javascriptのライブラリが対応していないと、
結局カスタマイズコストがかかってしまうんですよね。。。

On 7月12日, 午後6:15, kubo <dbfl...@gmail.com> wrote:
> jfluteです。
>
> SimpleDtoって何者!?っていう人のために、
> ドキュメントに概念図も付けました。
>
> // SimpleDtoの概念図 | DBFlutehttp://dbflute.sandbox.seasar.org/ja/manual/function/genbafit/project...

kubo

未読、
2011/07/14 22:11:022011/07/14
To: dbf...@googlegroups.com
jfluteです。

awaawaさん、確認ありがとう。
よかった。良い感じですね。

JSONICの情報提供もありがとう。
まあ、若干トリッキーではあるので、
DBFluteでフィットさせるオプションは
あってもそれはそれでいいという感じだね。

これでしばらく別の細かいタスクをこなせば、
正式リリースかなー

2011/7/15 awaawa <p1us3i...@gmail.com>:

全員に返信
投稿者に返信
転送
新着メール 0 件