Generate実行時のエラー対処法について

697 views
Skip to first unread message

末吉博

unread,
Feb 28, 2019, 2:22:43 AM2/28/19
to DBFluteユーザの集い
初めまして。末吉と申します。
訳あって、DBfluteに挑戦しています。
クライアントはWindows10、Java1.8。データベースサーバはPostgresql10.6(AWS RDS)です。
現在のところJDBCタスクの実行に成功して、generateタスクを試みているところですがエラーが発生しています。

Mavenの使い方がわからないので手動でdbfluteをセットしました。
それで問題がでている可能性もあるかもしれませんが、
おそらくdfpropのどこかの設定が不適切なのだと思っています。

どこをチェックしたほうが良いかヒントをいただけないでしょうか。
よろしくお願いします。



エラーメッセージ(一部)

2019-02-28 15:30:10,589 [main] INFO  (DfIncludeQueryInitializer#initializeIncludeQuery():61) - ========/
2019-02-28 15:30:10,612 [main] INFO  (Database#info():2802) - public void parseAllCommon() {
2019-02-28 15:30:10,615 [main] INFO  (Database#info():2802) -     parse('DBCurrent');
2019-02-28 15:30:10,629 [main] INFO  (Database#info():2802) -     parse('DBFluteConfig');
2019-02-28 15:30:10,651 [main] INFO  (Database#info():2802) -     parse('DBFluteInitializer');
2019-02-28 15:30:10,657 [main] INFO  (Database#info():2802) -     parse('DBMetaInstanceHandler');
2019-02-28 15:30:10,741 [main] INFO  (Database#info():2802) -     parse('EntityDefinedCommonColumn');
2019-02-28 15:30:10,761 [main] WARN  (TypeMap#doFindJavaNativeByJdbcType():553) - _jdbcTypeToJavaNativeMap doesn't contain the type as key: key==VARCHAR map={FLOAT=java.math.BigDecimal, BLOB=byte[], ARRAY=String, BINARY=byte[], CHAR=String, DECIMAL=$$AutoMapping$$, TIMESTAMP=java.time.LocalDateTime, DOUBLE=java.math.BigDecimal, UUID=java.util.UUID, TINYINT=Integer, INTEGER=Integer, NUMERIC=$$AutoMapping$$, LONGVARCHAR=String, CLOB=String, BIGINT=Long, TIME=java.time.LocalTime, BIT=Boolean, BOOLEAN=Boolean, OTHER=Object, DATE=java.time.LocalDate, SMALLINT=Integer, VARCHAR=String, REAL=java.math.BigDecimal, VARBINARY=byte[], LONGVARBINARY=byte[]}
2019-02-28 15:30:10,766 [main] WARN  (Database#convertJavaNativeByJdbcType():2705) - TypeMap.findJavaNativeTypeString(jdbcType, null, null) threw the exception: jdbcType==VARCHAR
java.lang.IllegalStateException: _jdbcTypeToJavaNativeMap doesn't contain the type as key: key==VARCHAR map={FLOAT=java.math.BigDecimal, BLOB=byte[], ARRAY=String, BINARY=byte[], CHAR=String, DECIMAL=$$AutoMapping$$, TIMESTAMP=java.time.LocalDateTime, DOUBLE=java.math.BigDecimal, UUID=java.util.UUID, TINYINT=Integer, INTEGER=Integer, NUMERIC=$$AutoMapping$$, LONGVARCHAR=String, CLOB=String, BIGINT=Long, TIME=java.time.LocalTime, BIT=Boolean, BOOLEAN=Boolean, OTHER=Object, DATE=java.time.LocalDate, SMALLINT=Integer, VARCHAR=String, REAL=java.math.BigDecimal, VARBINARY=byte[], LONGVARBINARY=byte[]}
at org.apache.torque.engine.database.model.TypeMap.doFindJavaNativeByJdbcType(TypeMap.java:554)
at org.apache.torque.engine.database.model.TypeMap.findJavaNativeByJdbcType(TypeMap.java:507)

  中略



2019-02-28 15:30:10,837 [main] ERROR (DfDBFluteTaskUtil#logException():150) - Look! Read the message below.
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Failed to execute DBFlute Task 'Generate'.

[Advice]
Check the exception messages and the stack traces.
* * * * * * * * * */
java.lang.IllegalStateException: Exception thrown by generator.parse(): control=om/ControlGenerateJava.vm
at org.dbflute.task.bs.DfAbstractTexenTask.fireVelocityProcess(DfAbstractTexenTask.java:262)
at org.apache.torque.task.TorqueDataModelTask.doExecute(TorqueDataModelTask.java:141)

  中略


Caused by: org.dbflute.exception.DfTemplateParsingException: Look! Read the message below.
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Failed to parse the input template.

[Input Template]
om/java/allcommon/EntityDefinedCommonColumn.vm (UTF-8)
* * * * * * * * * */
at org.dbflute.friends.velocity.DfFlutistGenerator.throwTemplateParsingException(DfFlutistGenerator.java:280)
at org.dbflute.friends.velocity.DfFlutistGenerator.parse(DfFlutistGenerator.java:229)

  中略


Caused by: java.lang.IllegalStateException: _jdbcTypeToJavaNativeMap doesn't contain the type as key: key==VARCHAR map={FLOAT=java.math.BigDecimal, BLOB=byte[], ARRAY=String, BINARY=byte[], CHAR=String, DECIMAL=$$AutoMapping$$, TIMESTAMP=java.time.LocalDateTime, DOUBLE=java.math.BigDecimal, UUID=java.util.UUID, TINYINT=Integer, INTEGER=Integer, NUMERIC=$$AutoMapping$$, LONGVARCHAR=String, CLOB=String, BIGINT=Long, TIME=java.time.LocalTime, BIT=Boolean, BOOLEAN=Boolean, OTHER=Object, DATE=java.time.LocalDate, SMALLINT=Integer, VARCHAR=String, REAL=java.math.BigDecimal, VARBINARY=byte[], LONGVARBINARY=byte[]}
at org.apache.torque.engine.database.model.TypeMap.doFindJavaNativeByJdbcType(TypeMap.java:554)
at org.apache.torque.engine.database.model.TypeMap.findJavaNativeByJdbcType(TypeMap.java:507)
at org.apache.torque.engine.database.model.Database.convertJavaNativeByJdbcType(Database.java:2703)

  中略

BUILD FAILED
C:\Users\末吉博\Desktop\pleiades\workspace\his_dao_postgre\mydbflute\dbflute-1.1.9\build-torque.xml:167: The following error occurred while executing this line:
C:\Users\末吉博\Desktop\pleiades\workspace\his_dao_postgre\mydbflute\dbflute-1.1.9\build-torque.xml:184: org.dbflute.exception.DfDBFluteTaskFailureException:
/* * * * * * * * * * * * * * * * * * * * * * * * *
Failed to execute the DBFlute task: Generate
Look at the log: console or dbflute.log
* * * * * * * * * */

kubo

unread,
Feb 28, 2019, 2:32:44 AM2/28/19
to DBFluteユーザの集い
jfluteです

末吉さん、こんにちは、初めまして。

> 訳あって、DBfluteに挑戦しています。
挑戦ありがとうございます!

> Mavenの使い方がわからないので手動でdbfluteをセットしました。
> それで問題がでている可能性もあるかもしれませんが、
> おそらくdfpropのどこかの設定が不適切なのだと思っています。
状況説明ありがとうございます。
なるほど、手動でセットアップされたのですね。

JDBCタスクは動いているのであれば、
かなり基本的な設定は問題ないようには思いますが...

> _jdbcTypeToJavaNativeMap doesn't contain the type as key: key==VARCHAR map={FLOAT=java.math.BigDecimal,

というわりと内部に近い例外が発生しているので、
推測の通りどこかdfpropの設定の不備と推測できますね。


<< try1 >>
Docタスクは実行できますでしょうか?
(クラスの自動生成限定のエラーなのか、
ドキュメントも含めた自動生成自体のエラーなのかの切り分けのために)

<< try2 >>
データ型の解決でエラーになっているようなので...

o basicInfoMap.dfprop
o databaseInfoMap.dfprop

にて、DBMSの種別 (databaseなど) に食い違いがないか確認してみてください。
例えば、basicInfoの方のdatabaseと、databaseInfoの方で違うDBMSになっていないかとか。
業務情報が入らないように内容を貼り付けて頂ければ、こちらでも確認できます。



ちなみに、もうセットアップ済みではありますが、Mavenは使わず、
DBFlute Intro というツールでGUIでセットアップもすることができます。
http://dbflute.seasar.org/ja/manual/function/generator/intro/index.html

末吉博

unread,
Feb 28, 2019, 4:14:02 AM2/28/19
to DBFluteユーザの集い
末吉です。

迅速な返信、ありがとうございます。
びっくりしました。


<< try1 >>
Docタスクは実行できますでしょうか?
(クラスの自動生成限定のエラーなのか、
ドキュメントも含めた自動生成自体のエラーなのかの切り分けのために)


DoCタスクはBUILD SUCCESSFULと表示されました。
output/docの下にhistory-his_dao_postgre.htmlとschrma-his_dao_postgre.htmlが生成されているのを確認しました(PropertiesHTMLは生成されていません)。

src/main/java/his_dao_postgre配下のallcommonフォルダ、bsbhvフォルダ、bsentityフォルダ、cbeanフォルダ、exbhvフォルダ、exentityフォルダにjavaのプログラムが生成されていました。
試しにbsbhv配下のプログラムを見てみると見おぼえのあるテーブル名やカラム名がありました。
クラスの自動生成も成功しているかもしれません。


<< try2 >>
データ型の解決でエラーになっているようなので...

o basicInfoMap.dfprop
o databaseInfoMap.dfprop

にて、DBMSの種別 (databaseなど) に食い違いがないか確認してみてください。
例えば、basicInfoの方のdatabaseと、databaseInfoの方で違うDBMSになっていないかとか。
業務情報が入らないように内容を貼り付けて頂ければ、こちらでも確認できます。



私が気づく範囲ではpostgreSQLになっているようです。
basicinfoMap.dfporpとdatabaseInfoMap.dfpropを添付します。
見ていただけたら、大変ありがたいです。

 

ちなみに、もうセットアップ済みではありますが、Mavenは使わず、
DBFlute Intro というツールでGUIでセットアップもすることができます。
http://dbflute.seasar.org/ja/manual/function/generator/intro/index.html

情報提供、ありがとうごいます。
そろそろDBFluteを入れなおしてみようかと思い始めていたので助かります。
(入れなおさないで済めば、もちろんそれが良いのですが) 

以上、よろしくお願いします。
basicInfoMap.dfprop
databaseInfoMap.dfprop

kubo

unread,
Feb 28, 2019, 4:50:16 AM2/28/19
to DBFluteユーザの集い
jfluteです


> DoCタスクはBUILD SUCCESSFULと表示されました。

ありがとうございます。ドキュメントは正常というのであれば、
Javaに絡んだところで落ちてるということですね。

> basicinfoMap.dfporpとdatabaseInfoMap.dfpropを添付します。
> 見ていただけたら、大変ありがたいです。

dfprop見させていただきました。
問題なさそうですね...そこが原因ではなさそうです。ふむぅ。


> src/main/java/his_dao_postgre配下のallcommonフォルダ、bsbhvフォルダ、bsentityフォルダ、cbeanフォルダ、exbhvフォルダ、exentityフォルダにjavaのプログラムが生成されていました。
> 試しにbsbhv配下のプログラムを見てみると見おぼえのあるテーブル名やカラム名がありました。
> クラスの自動生成も成功しているかもしれません。

ここちょっと不思議なのは、
「Caused by: java.lang.IllegalStateException: _jdbcTypeToJavaNativeMap
doesn't contain the type as key」で...

いや、書き途中に、ちょっとわかりました。

「2019-02-28 15:30:10,837 [main] ERROR
(DfDBFluteTaskUtil#logException():150) - Look! Read the message
below.」
の直前のログが中略されていますが、実際にエラーが発生してタスクが中断したのは、
「テーブル対応のクラスの自動生成処理をある程度行った後」になりますかね、きっと。

parse('EntityDefinedCommonColumn');の直後でも出ていましたが、
そっちはWARNレベルのログだから続行していますね。

で、CommonColumnのところでwarnになっているということなので、
commonColumnMap.dfprop も確認して頂けますでしょうか?



ちなみに、PostgreSQLで正常に動いているテストプロジェクトもあります。
https://github.com/dbflute-test/dbflute-test-dbms-postgresql

kubo

unread,
Feb 28, 2019, 5:03:51 AM2/28/19
to DBFluteユーザの集い
jfluteです

続きです。
引き続き commonColumnMap.dfprop があやしいですね。

例外メッセージ組み立てているプログラムはこうなっているのですが...

String msg = "_jdbcTypeToJavaNativeMap doesn't contain the type as key: ";
msg = msg + "key=" + jdbcType + " map=" + _jdbcTypeToJavaNativeMap;

頂いた実際のログのメッセージを見ると、こうなっています。

_jdbcTypeToJavaNativeMap doesn't contain the type as key:
key==VARCHAR map={FLOAT=java.math.Big...

map=の中にVARCHARが入っているので「doesn't contain」なわけないんだけどと思いきや...

"key=" + jdbcType

 ↓↓↓

key==VARCHAR

イコールがひとつ多い!?

「=VARCHAR」という値でMapを引きに行ってしまっているのかもしれません。
VARCHARっていう文字を指定するdfpropで言うと、
commonColumnMap.dfpropが挙げられますし。

末吉博

unread,
Feb 28, 2019, 7:18:54 PM2/28/19
to DBFluteユーザの集い
おはようございます。
末吉です。
解決しました!

commonColumnMap.dfpropは下のようになっていました。

-------------------------------------------------------------------------------------------------------------------------------------------------------------
map:{
    ; commonColumnMap = map:{
        ; REGISTER_DATETIME=TIMESTAMP ; REGISTER_USER=VARCHAR ; REGISTER_PROCESS=VARCHAR
        ; UPDATE_DATETIME=TIMESTAMP   ; UPDATE_USER=VARCHAR   ; UPDATE_PROCESS==VARCHAR

 ---------------------------------------------------------------------------------------------------------------------------------------------------------------

確かに=が1個多いです。

そこで、=を削除してgenerateしてみると、BUILD SUCCESSFULが表示されました。
まったく記憶にないのですが、この箇所のコメントアウトを外した際に、
私が間違えて=を一個追加していたようです。

これは自分では絶対に発見できませんでした。
迅速かつ的確なサポートに感謝祭です。
ありがとうございました。

kubo

unread,
Feb 28, 2019, 9:26:52 PM2/28/19
to DBFluteユーザの集い
jfluteです

末吉さん、おはようございます。

おお、解決して良かったです。
そして、例外メッセージにkeyの値を入れておいて良かったーという感じです(^^。


一方で、dfpropの記述ミスで発生する例外ということなので、
もうちょい例外メッセージも改善しました。(次のバージョンから反映されます)
フィードバックありがとうございます。

[df-generate] /* * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * *
[df-generate] TypeMap@_jdbcTypeToJavaNativeMap doesn't contain the type as key.
[df-generate]
[df-generate] [Advice]
[df-generate] Undefined JDBC type was specified.
[df-generate] Confirm your JDBC type settings in DBFlute property (dfprop file).
[df-generate] e.g. commonColumnMap.dfprop, databaseInfoMap.dfprop, ...
[df-generate]
[df-generate] [NotFound JDBC Type]
[df-generate] =VARCHAR
[df-generate]
[df-generate] [_jdbcTypeToJavaNativeMap]
[df-generate] defined types: 25
[df-generate] FLOAT = java.math.BigDecimal
[df-generate] BLOB = byte[]
[df-generate] ARRAY = String
[df-generate] BINARY = byte[]
[df-generate] CHAR = String
[df-generate] DECIMAL = $$AutoMapping$$
[df-generate] TIMESTAMP = java.time.LocalDateTime
[df-generate] DOUBLE = java.math.BigDecimal
[df-generate] UUID = java.util.UUID
[df-generate] TINYINT = Integer
[df-generate] INTEGER = Integer
[df-generate] NUMERIC = $$AutoMapping$$
[df-generate] LONGVARCHAR = String
[df-generate] CLOB = String
[df-generate] BIGINT = Long
[df-generate] TIME = java.time.LocalTime
[df-generate] BIT = Boolean
[df-generate] BOOLEAN = Boolean
[df-generate] OTHER = Object
[df-generate] DATE = java.time.LocalDate
[df-generate] SMALLINT = Integer
[df-generate] VARCHAR = String
[df-generate] REAL = java.math.BigDecimal
[df-generate] VARBINARY = byte[]
[df-generate] LONGVARBINARY = byte[]
[df-generate] * * * * * * * * * */
Reply all
Reply to author
Forward
0 new messages