DBFluteバージョンアップの質問

214 views
Skip to first unread message

姜夏枫

unread,
Sep 18, 2023, 3:39:23 AM9/18/23
to DBFluteユーザの集い
JDKバージョンアップ(Java1.7→OpenJDK17)に伴い、DBFlute 1.0.3から最新版 DBFlute-1.2.6にマイグレーションしたいですが、今は変更のリスクと修正ボリュームを見積中です、何か注意事項、リスクが あれば教えてもらえますでしょうか。
或いは、 DBFlute 1.0.3からどのバージョンにマイグレーションして、ごアドバイスがあれば、ぜひよろしくお願いいたします。(^^)/

kubo

unread,
Sep 18, 2023, 12:05:20 PM9/18/23
to dbf...@googlegroups.com
jfluteです。姜さん、こんばんは。

DBFluteのバージョンアップの検討ありがとうございます(^^)/。


まず、基本的な前提からお話させてください。

DBFluteには「Java6版」と「Java8版」があります。

Java6でコンパイルされたjarファイルが提供されているのが「Java6版」
Java8でコンパイルされたjarファイルが提供されているのが「Java8版」

となります。

Java6版は、Java6以上で動作します。たぶんJava17でも動くと思います。
Java8版は、Java8以上で動作します。Java17でも実績があります。


バージョンでいうとこういう対応になります。

Java6版 :: 1.0.x
Java8版 :: 1.1.x (以上)

なので、いまそちらで利用されている DBFlute 1.0.3 は、Java6版になります。
DBFlute-1.2.6 は、Java8版となります。

つまり、1.0.3から1.2.6にアップグレードするということは、
「Java6版からJava8版への移行」ということになります。


Java6版とJava8版は、単にコンパイルバージョンが違うというだけでないです。
Java8版は、Java8で導入された機能をたくさん利用して提供されています。
例えば、Lambda式とかOptionalとかLocalDateとか、それを前提にした改善が行われています。

ゆえに、Java6版とJava8版は、実装方法に違いがあるなど、厳密には互換性を維持していません。
普通に1.0.3から1.2.6にアップグレードすると...
自動生成の時点ですでたくさんのコンパイルエラーが発生するかと思います。

ただ、Java8版には、「Java6版と同じようなインターフェースでJava8版を利用」
するための互換オプションが用意されています。
以下のページが、Java6版からJava8版に移行するためドキュメントとなります。

// 移行 1.0.x to 1.1
http://dbflute.seasar.org/ja/environment/upgrade/migration/migrate10xto11x.html

なので、1.2.6にアップグレードするのであれば、上記の移行ドキュメントをじっくり読んで、
手順を実施していくということになります。

ただ、けっこう大変ではあります。DBFluteに詳しい人が現場に一人いないと厳しいとは思います。


ということなので、個人的には「Java6版のままJava17の環境で動かす」という方が現実的かもしれないとは思います。
DBFluteをアップグレードするのであれば「Java6版の最新」(1.0.5N) にアップグレードする方が良いかなと。

もちろん、現場のみなさんが「最新のDBFluteの恩恵を得たい」というのであれば、
「移行 1.0.x to 1.1」を実施する価値はあると思います。(そのときはjfluteができる限りフォローします^^)
互換オプションを入れたとしても、最新のDBFluteの方が機能的にも内部的にも大きく改善されていますので。

ただ、もし「Java17にアップすることがメインであって、DBFluteは別に変わらなくて良い」というのであれば、
無理にJava8版にする必要もあまりないのかなとは思います。
Java17でJava6版も動くと思うので (ちょっと厳密には試してないのですが...)


という感じで、ひとまずアドバイスさせて頂きました。
もし、わからないことありましたら基礎的なことでも良いので気軽に質問してください(^^。

姜夏枫

unread,
Sep 20, 2023, 11:14:07 PM9/20/23
to DBFluteユーザの集い
Jfluteさん
早速のご回答ありがとうございます。

確かにおっしゃるとおり、Java6版はJava17でも動きます。
Java8版は、Java17にフレームワークのコンパイルは問題がありませんが、ツールで生成したJava Class中身が違います、
差異点が整理、調査中です。
ご提示いただいたマイグレーションガイドを拝見させていただきます。
その後で、詳しい質問をさせていただきます

以上、よろしくお願いいたします。

kubo

unread,
Sep 21, 2023, 12:37:58 AM9/21/23
to dbf...@googlegroups.com
jfluteです。

> Java8版は、Java17にフレームワークのコンパイルは問題がありませんが、ツールで生成したJava Class中身が違います、

Java17かどうか?というより...
Java8版はJava6版と自動生成するJava Class中身が変わったことにより、
コンパイルエラーになっているかと思います。

> ご提示いただいたマイグレーションガイドを拝見させていただきます。
> その後で、詳しい質問をさせていただきます

ぜひ、どうぞ(^^。

姜夏枫

unread,
Sep 28, 2023, 2:10:47 AM9/28/23
to DBFluteユーザの集い
jfluteさん
いつもお世話になっております。

新しい質問をさせていただきます。
下記の要件で、DBアクセスクラスソースをツールで自動生成時、エラーを発生しました。
DBFlute-1.2.6
②MySQL8.0.20
詳細原因をDEBUGして、最後にエラー発生箇所を特定
DfOutsideSqlAnalyzer.javaの executeQuery() メソッド、outsidesqlフォルダ下に、プロシージャ新規SQL(Create、Dropを利用)が実行時、エラーを発生。
企业微信截图_16958703742367.png
MySQLの他のバージョンをやってみて、結果が下記通り
①~5.1.31 success
②5.1.32、5.1.35、5.1.37、5.1.38、5.1.49 error
③8.0.34  error

原因分析
MySQLバージョンアップに伴い、JDBCの変更があるかもしれません、executeQueryサポートされません。

想定解決策
executeQuery→executeに変更、検証中
②他の解決方法があるかどうか、ご確認頂ければ幸いです。

kubo

unread,
Sep 28, 2023, 2:18:29 AM9/28/23
to dbf...@googlegroups.com
jfluteです。姜さん、こんにちは。

フィードバックありがとうございます。

例外メッセージとスタックトレースを見せていただけないでしょうか?
(会社固有の情報など、業務情報は伏せた状態で)

また、こちらでも再現させてみたいので、
具体的にどのようなSQLを実行されましたのでしょうか?
外だしSQLのファイルの中身を見せて頂けないでしょうか?
(こちらも同様に、業務情報は伏せた状態で)


DfOutsideSqlAnalyzerについて。

CustomizeEntityを定義している外だしSQLに関しては、executeQuery()を使います。
CustomizeEntityを定義しているということはselect文であることで。
なので、どのようなSQLになっているか?きになったところです。

mokkouyou

unread,
Sep 29, 2023, 12:49:58 AM9/29/23
to DBFluteユーザの集い
mokkouyouです。

結局のところ、dbfluteの更新ではなく、
DBバージョンアップにおける問題でしょうか?

FW含めてDBバージョンアップもやるとなると、
前提の知識無いと厳しいですよね。
そもそもバージョンアップ自体確実に互換性持たせたうえでやるとなると難しい。

ちなみに私も5.6からの更新を行った上で、mysql8.0.23で利用していますが、ドライバの問題は出ていないですね。
#もちろん新規特殊な構文があって、その場合新しいものじゃないとダメという可能性はありますが

その前提でちょっと気になる点を。
jfluteさんのおっしゃっているように、おそらく外出しSQLの問題だろうけど、
ログ見てね(もしくは見せてね)ってところなんですが、

単純なもの以外には、
mysqlのバージョンアップに伴う、新環境への必要な設定の漏れも可能性もあります。
思い当たるだけでも、pipes as concat設定が無いのにSQLでは||で結合使ってるとか。
lower_case_ignore_tableとか。

私も8系への更新の際は、このあたりmysqlバージョン間での設定を含めた相違がないかで苦労しました。
特に5.7への更新が要注意です。
5.6までは結構ゆるめのmysqlでしたが、5.7からは結構厳格なmysqlになりましたら、ゆる構文とかはじかれるもの多くなっています。

デフォルトが変わったとか照合関係とかね。
(・・・もともとなんで入っていた設定なのかよくわからないとか)

とりあえず、mysqlの5.1.31と32で結果に差があることから
構築していあるmysqlにおける設定問題じゃないのかな?と思いましたが、
いずれにせよこれも該当SQLを直接実行すればSQL自体エラーになるんじゃないでしょうか。
2wayで書かれていればですが。

5.1から更新するとなると、大変かとは思いますが、ファイトです!

2023年9月28日木曜日 15:18:29 UTC+9 jflute:
Reply all
Reply to author
Forward
0 new messages