dbflute / dbflute-core

DBFlute core libraries for Java8
http://dbflute.seasar.org/
23 stars 18 forks source link

DBFlute Inquiry: 2024/01/18 from X (Twitter) #198

Closed jflute closed 4 months ago

jflute commented 5 months ago

問い合わせ、ぜひこちらに書いてください。 公開されているので業務情報は伏せた形で投稿をお願いします。

kkhys2 commented 5 months ago

Issue を開いていただき、ありがとうございます。 以下、質問内容です。

【実現したいこと】 バージョン 1.2.6 から 1.2.7 へのアップグレード

【利用環境】

【現象の説明】 DBFlute のバージョンを 1.2.6 から 1.2.7 にあげようと以下の作業を行いました。

  1. manage.sh を実行し、94(upgrade)を選択
  2. クラスの自動生成スクリプトを実行(jdbc.sh && generate.sh
  3. アプリケーションを再起動してコンパイル

その後、以下のエラーが発生しました(サービス名等は伏せています)。

[error] .../dbflute/allcommon/DBFluteConfig.java:13:1: パッケージorg.dbflute.bhv.core.context.logmaskは存在しません
[error] org.dbflute.bhv.core.context.logmask.BehaviorLogMaskProvider
[error] .../dbflute/allcommon/DBFluteConfig.java:85:1: シンボルを見つけられません
[error]   シンボル:   クラス BehaviorLogMaskProvider
[error]   場所: クラス [...].dbflute.allcommon.DBFluteConfig
[error] BehaviorLogMaskProvider
[error] .../dbflute/allcommon/DBFluteConfig.java:553:1: シンボルを見つけられません
[error]   シンボル:   クラス BehaviorLogMaskProvider
[error]   場所: クラス [...].dbflute.allcommon.DBFluteConfig
[error] BehaviorLogMaskProvider
[error] .../dbflute/allcommon/DBFluteConfig.java:557:1: シンボルを見つけられません
[error]   シンボル:   クラス BehaviorLogMaskProvider
[error]   場所: クラス [...].dbflute.allcommon.DBFluteConfig
[error] BehaviorLogMaskProvider
[error] .../dbflute/allcommon/DBFluteInitializer.java:4:1: シンボルを見つけられません
[error]   シンボル:   クラス PrologueHook
[error]   場所: パッケージ org.dbflute.hook
[error] org.dbflute.hook.PrologueHook
[error] .../dbflute/allcommon/DBFluteInitializer.java:27:1: シンボルを見つけられません
[error]   シンボル:   クラス PrologueHook
[error]   場所: クラス [...].dbflute.allcommon.DBFluteInitializer
[error] PrologueHook
[error] .../dbflute/allcommon/DBFluteInitializer.java:47:1: シンボルを見つけられません
[error]   シンボル:   クラス PrologueHook
[error]   場所: クラス [...].dbflute.allcommon.DBFluteInitializer
[error] PrologueHook
[error] .../dbflute/allcommon/DBFluteConfig.java:129:1: シンボルを見つけられません
[error]   シンボル:   メソッド unlock()
[error]   場所: クラス org.dbflute.FunCustodial
[error] FunCustodial.unlock
[error] .../dbflute/allcommon/DBFluteConfig.java:130:1: シンボルを見つけられません
[error]   シンボル:   メソッド setNonSpecifiedColumnAccessWarningOnly(boolean)
[error]   場所: クラス org.dbflute.FunCustodial
[error] FunCustodial.setNonSpecifiedColumnAccessWarningOnly
[error] .../dbflute/allcommon/DBFluteConfig.java:131:1: シンボルを見つけられません
[error]   シンボル:   メソッド lock()
[error]   場所: クラス org.dbflute.FunCustodial
[error] FunCustodial.lock
[error] .../dbflute/allcommon/ImplementedSqlClauseCreator.java:165:1: シンボルを見つけられません
[error]   シンボル:   メソッド enableThatsBadTimingWarningOnly()
[error]   場所: タイプorg.dbflute.cbean.sqlclause.SqlClauseの変数 sqlClause
[error] sqlClause.enableThatsBadTimingWarningOnly
[error] .../dbflute/allcommon/ImplementedSqlClauseCreator.java:168:1: シンボルを見つけられません
[error]   シンボル:   メソッド enableOrScopeQueryPurposeCheckWarningOnly()
[error]   場所: タイプorg.dbflute.cbean.sqlclause.SqlClauseの変数 sqlClause
[error] sqlClause.enableOrScopeQueryPurposeCheckWarningOnly
[error] .../dbflute/allcommon/ImplementedSqlClauseCreator.java:196:1: シンボルを見つけられません
[error]   シンボル:   メソッド enableInvalidQueryAllowedWarning()
[error]   場所: タイプorg.dbflute.cbean.sqlclause.SqlClauseの変数 sqlClause
[error] sqlClause.enableInvalidQueryAllowedWarning
[error] .../dbflute/allcommon/ImplementedSqlClauseCreator.java:198:1: シンボルを見つけられません
[error]   シンボル:   メソッド disableInvalidQueryAllowedWarning()
[error]   場所: タイプorg.dbflute.cbean.sqlclause.SqlClauseの変数 sqlClause
[error] sqlClause.disableInvalidQueryAllowedWarning
[error] (Compile / compileIncremental) javac returned non-zero exit code

【考察】

エラー文を見る限りでは BehaviorLogMaskProviderPrologueHookgenerate.sh 実行時に生成されていないことが原因のようです。 これらが生成されればコンパイルエラーは解消すると考えています。 いずれもアプリケーション内では今まで使用していないため 1.2.7 へのアップグレード時には何らかの設定が必要なのでしょうか。

お忙しい中恐れ入りますが、ご教示いただけますと幸いです。 よろしくお願いいたします。

jflute commented 5 months ago

@kkhys2 コメントありがとうございます! ログを貼り付けて頂き助かります。ログと丁寧な説明でなんとなくわかりました。

DBFluteのアップグレードの方法ですが...

// DBFluteのアップグレード - アップグレード方法 | DBFlute https://dbflute.seasar.org/ja/environment/upgrade/index.html#way

そして、DBFluteランタイムを最新にしましょう。例えば、Mavenで依存ライブラリを管理しているなら、(手動で) pom.xml を修正します。(修正後のMavenへの反映はアプリのやり方次第で)

DBFluteランタイムも一緒に最新にする必要があります。

DBFlute Engineで自動生成されたコードは、DBFlute Runtimeのクラスを参照しています。 現場情報に依存しないクラスは自動生成する必要がないので、jarファイルとして提供されています。

// DBFluteのインフラ図 https://dbflute.seasar.org/data/model/environment/dbflute-infrastructure-map.png

1.2.7ではBehaviorLogMaskProviderやPrologueHookが追加されました。 DBFlute Runtimeが1.2.6のままではそれらが存在しないのでコンパイルエラーになっているのだと思います。

(恐らく)MavenやGradleでライブラリのバージョンが管理されているかと思いますので、 そちらの方でDBFlute Runtimeを1.2.7にアップグレードをお願いします。 (でも、Play Framework だとビルドツールが違うかも!?)

kkhys2 commented 5 months ago

@jflute ご返信ありがとうございます!

DBFluteランタイムも一緒に最新にする必要があります。

まさにこれが原因でした。 ドキュメントにも書いてあるにも関わらず初歩的なミスでお時間を取らせてしまい、申し訳ありません。。

ビルドツールは SBT を使用していますが、以下のように書き換えることでコンパイルが通るようになりました。

"org.dbflute" % "dbflute-runtime" % "1.2.6",

↓

"org.dbflute" % "dbflute-runtime" % "1.2.7",

ご丁寧に対応していただき、ありがとうございました。 今後ともよろしくお願いいたします。

jflute commented 5 months ago

@kkhys2 おお、良かったです。 なるほど、SBTでしたか。確かにPlayだとそれですね。

ドキュメントにも書いてあるにも関わらず初歩的なミスでお時間を取らせてしまい、申し訳ありません。。

いやいや、こういうのも聞いて頂いた方がこちらとしても、ドキュメントの分かりづらさとか、 みなさんのどんな構成で使われているのか?などなどとても参考になるのです。

こういったネット上のOSSのコミュニティで問い合わせをするっていうスキル(慣れ)にも繋がりますから、 まだまだそういったことは気にせず問い合わせください(^^。

DBFlute話はいくらでも聞きたいですから、X (Twitter) でまた話しかけてください〜