These are chat archives for scalikejdbc/ja

7th
May 2016
Kazuhiro Sera
@seratch
May 07 2016 01:55
2.4.0 出すとして play-support のバージョニングが悩ましい。 https://github.com/scalikejdbc/scalikejdbc-play-support
  • scalikejdbc-play-initializer 2.5.1 -> scalikejdbc 2.4.x + play 2.5.x
  • scalikejdbc_2.3-play-initializer 2.5.1 -> scalikejdbc 2.3.x + play 2.5.x
かな。そこまでする必要ない気もするが..
Noriaki Horiuchi
@NoriakiHoriuchi
May 07 2016 03:43

こんにちは。バージョンアップのお話中に失礼します、
Twitterで相談に乗っていただいておりまして、引き続きこちらでご相談させてもらえればと思います

https://twitter.com/NoriakiHoriuchi/status/728773849567760384
(冒頭、紛らわしい書き方をしてしまってすみません)
MySQLのテーブルからscalikejdbcGenでコードを生成しようとしているのですが、DBサーバに接続できず詰んでいます。設定は以下のような感じです

scalikejdbc.properties

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/app?useSSL=false
jdbc.username=root
jdbc.password=pass
スタックトレースは以下のような感じです
$ sbt "scalikejdbcGen access_logs AccessLog"
[info] Loading project definition from /Users/noriaki/dev/app/project
[info] Set current project to app (in build file:/Users/noriaki/dev/app/)
java.sql.SQLNonTransientConnectionException: Could not create connection to database server.
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:676)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:663)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:653)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:638)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:606)
    at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:1857)
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:1673)
    at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:656)
    at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:349)
    at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:221)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:247)
    at org.apache.commons.dbcp2.DriverManagerConnectionFactory.createConnection(DriverManagerConnectionFactory.java:77)
    at org.apache.commons.dbcp2.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:256)
    at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:868)
    at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:435)
    at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363)
    at org.apache.commons.dbcp2.PoolingDataSource.getConnection(PoolingDataSource.java:134)
    at scalikejdbc.Commons2ConnectionPool.borrow(Commons2ConnectionPool.scala:46)
    at scalikejdbc.DB$.readOnlyWithConnection(DB.scala:188)
    at scalikejdbc.mapper.Model.table(Model.scala:44)
    at scalikejdbc.mapper.SbtPlugin$.scalikejdbc$mapper$SbtPlugin$$generator(SbtPlugin.scala:165)
    at scalikejdbc.mapper.SbtPlugin$$anonfun$2$$anonfun$apply$3.apply(SbtPlugin.scala:198)
    at scalikejdbc.mapper.SbtPlugin$$anonfun$2$$anonfun$apply$3.apply(SbtPlugin.scala:195)
    at scalikejdbc.mapper.SbtPlugin$$anonfun$4$$anonfun$apply$5$$anonfun$apply$6.apply(SbtPlugin.scala:207)
    at scalikejdbc.mapper.SbtPlugin$$anonfun$4$$anonfun$apply$5$$anonfun$apply$6.apply(SbtPlugin.scala:205)
    at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
    at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40)
    at sbt.std.Transform$$anon$4.work(System.scala:63)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:228)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:228)
    at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
    at sbt.Execute.work(Execute.scala:237)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:228)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:228)
    at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
    at sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
ふたつめです
Caused by: java.lang.NullPointerException
    at java.util.Properties$LineReader.readLine(Properties.java:434)
    at java.util.Properties.load0(Properties.java:353)
    at java.util.Properties.load(Properties.java:341)
    at com.mysql.cj.jdbc.util.TimeUtil.loadTimeZoneMappings(TimeUtil.java:163)
    at com.mysql.cj.jdbc.util.TimeUtil.getCanonicalTimezone(TimeUtil.java:109)
    at com.mysql.cj.mysqla.MysqlaSession.configureTimezone(MysqlaSession.java:308)
    at com.mysql.cj.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:2474)
    at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:1817)
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:1673)
    at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:656)
    at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:349)
    at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:221)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:247)
    at org.apache.commons.dbcp2.DriverManagerConnectionFactory.createConnection(DriverManagerConnectionFactory.java:77)
    at org.apache.commons.dbcp2.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:256)
    at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:868)
    at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:435)
    at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363)
    at org.apache.commons.dbcp2.PoolingDataSource.getConnection(PoolingDataSource.java:134)
    at scalikejdbc.Commons2ConnectionPool.borrow(Commons2ConnectionPool.scala:46)
    at scalikejdbc.DB$.readOnlyWithConnection(DB.scala:188)
    at scalikejdbc.mapper.Model.table(Model.scala:44)
    at scalikejdbc.mapper.SbtPlugin$.scalikejdbc$mapper$SbtPlugin$$generator(SbtPlugin.scala:165)
    at scalikejdbc.mapper.SbtPlugin$$anonfun$2$$anonfun$apply$3.apply(SbtPlugin.scala:198)
    at scalikejdbc.mapper.SbtPlugin$$anonfun$2$$anonfun$apply$3.apply(SbtPlugin.scala:195)
    at scalikejdbc.mapper.SbtPlugin$$anonfun$4$$anonfun$apply$5$$anonfun$apply$6.apply(SbtPlugin.scala:207)
    at scalikejdbc.mapper.SbtPlugin$$anonfun$4$$anonfun$apply$5$$anonfun$apply$6.apply(SbtPlugin.scala:205)
    at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
    at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40)
    at sbt.std.Transform$$anon$4.work(System.scala:63)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:228)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:228)
    at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
    at sbt.Execute.work(Execute.scala:237)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:228)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:228)
    at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
    at sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
[error] (compile:scalikejdbcGen) java.sql.SQLNonTransientConnectionException: Could not create connection to database server.
[error] Total time: 1 s, completed May 7, 2016 12:30:15 PM
お忙しいところすみませんが、どうかお力添えをお願いいたします
Noriaki Horiuchi
@NoriakiHoriuchi
May 07 2016 03:51
Slick CodeGenをためしてみると、生成自体は成功するので、scalikejdbcGenの方で設定をミスっている気がしています
Kazuhiro Sera
@seratch
May 07 2016 04:00
com.mysql.cj.jdbc.Driver って version 6 のやつか。
まだ試してなかったです。
Noriaki Horiuchi
@NoriakiHoriuchi
May 07 2016 04:07
あっ、build.sbtだけ戻していて、plugins.sbtとscalikejdbc.propertiesを戻したつもりになっていました…
全部 5.1.38 に戻したら生成されました。ありがとうございます!
Kazuhiro Sera
@seratch
May 07 2016 04:07
6 は何かが compatible じゃないのか気になるので調べてます
Kazuhiro Sera
@seratch
May 07 2016 04:15
Caused by: com.mysql.cj.core.exceptions.InvalidConnectionAttributeException: The server time zone value 'JST' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
5.x の server につないでみてるからかもしれないが、事象は再現しますね。これ、なんか properties ファイルがある前提なんじゃないのかな。

再現手順は

libraryDependencies ++= Seq(
  "org.scalikejdbc" %% "scalikejdbc"          % "2.4.0.RC2",
  "mysql"           %  "mysql-connector-java" % "6.0.2",
  "ch.qos.logback"  %  "logback-classic"      % "1.1.3"
)

を build.sbt としておいておいて sbt console 起動して以下を実行:

import scalikejdbc._
Class.forName("com.mysql.cj.jdbc.Driver")
ConnectionPool.singleton("jdbc:mysql://localhost:3306/database?useSSL=false", "user", "pass")
implicit val s = AutoSession
sql"select * from table_name".toMap.list.apply()
mysql server 6 入れてまで検証する気にならなくなったので、興味ある人ぜひ..
あ、でも slick では 6 のドライバーで動いてた?本当ですか?? @NoriakiHoriuchi
Noriaki Horiuchi
@NoriakiHoriuchi
May 07 2016 04:18
はい、動きました。
そのエラーはSlickCodeGenのときにも見ましたね。そのときはserverTimezone=JSTをURLに追加して回避しました
Kazuhiro Sera
@seratch
May 07 2016 04:19
へぇ
serverTimezone=JSTをURLに追加
これで普通のクエリは投げられた。
Kazuhiro Sera
@seratch
May 07 2016 04:28
手元だと scalikejdbcGen は他のエラー(なんか information_schema 見に行ったりしている?)出てますが、接続の時点ではこけないですよ。
まあ、いいや。 server は 5 使ってるんだから driver も 5 使いましょう!ということで。
Noriaki Horiuchi
@NoriakiHoriuchi
May 07 2016 04:34
そうなんですね!ではさしあたり5使っておきます〜
Kazuhiro Sera
@seratch
May 07 2016 04:42

developer milestone とはいえ、一応動くべきなのか?

https://dev.mysql.com/doc/connector-j/6.0/en/connector-j-versions.html

http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22mysql%22%20AND%20a%3A%22mysql-connector-java%22

6.0.x って 6.0.2 しか maven central にあがってないようだけど大丈夫なのかな、これ。

これに時間をかけるのは今の所やめておこうかな...
kenji yoshida
@xuwei-k
May 07 2016 06:22
なるほど?(ちゃんと読んでない) http://stackoverflow.com/a/7610174
https://dev.mysql.com/downloads/connector/j/
development releases の方行くと "Connector/J 6.0.2 m1" とか書いてあってこれはどういう意味だ、スルーでいいのかとちょっと前に思ったのを思い出しました。
6.0.0-M1 じゃないのかと小一時間。
そのコメント書いたのだいぶ前だと思ってたけど 12 days ago だった。
Kazuhiro Sera
@seratch
May 07 2016 08:06
mysql connect/j 6 はともかくそろそろ 2.4.0 を出します。
Kazuhiro Sera
@seratch
May 07 2016 14:23
play のも出しました。
これはニーズがあれば対応することにします > scalikejdbc_2.3-play-initializer 2.5.1 -> scalikejdbc 2.3.x + play 2.5.x