These are chat archives for scalikejdbc/ja

19th
Nov 2014
Masatoshi Shimada
@smdmts
Nov 19 2014 02:14

こちらで報告するのが良いのか微妙なのですが、
Play2+HikariCP+ScalikeJDBCの構成で下記のような事象があったのでご報告させていただきます。

・事象
Play2シャットダウン時にConnectionPool.close()よりUnsupportedOperationExceptionの発行される。
そのためHikariDataSource.close()が呼ばれずCPのシャットダウンが実行されない。

ConnectionPoolFactoryRepositoryに組み込まれていない外部のCPを利用した場合に発生する模様。

・原因
ScalikeJDBCのPlay2プラグインがConnectionPool.closeAll()をコールした際に、
DataSourceConnectionPoolがDataSource.close()をコールしておらず基底クラスで例外が投げれるため。
#今回の場合はHikariDataSourceとなります。

なおjavax.sql.DataSource.javaにはclose()が定義されていないため、
外部のDataSourceの実装に必ずしもclose()が存在するとは限らないので、
ConnectionPool.scalaの実装が上記のようになっていることを承知してます。

そこでGlobal.scalaのonStopで、
DataSourceを検索してcloseメソッドを持っていた場合にcloseするようにしてみたという状況です。
※終了時にUnsupportedOperationExceptionのワーニングは出ています。

お手数ですがご確認いただけますと幸いです。

KAWACHI Takashi
@tkawachi
Nov 19 2014 02:23
class HikariPlayPlugin(implicit app: Application) extends PlayPlugin(app) をつくって onStop() を override するのはどうだろう
Kazuhiro Sera
@seratch
Nov 19 2014 09:58
HikariCP はちょっと独特なので https://github.com/edulify/play-hikaricp.edulify.com を使ってもらって scalikejdbc-play-dbplugin-adapter で連携した方が幸せになれそう。
Masatoshi Shimada
@smdmts
Nov 19 2014 11:40

実は上記の構成だったのですが、改めてplay-hikaricpの実装を確認してみました。
こちらのプラグインの中でonStop時にCPがshutdownされていたようです。

調査の発端はPlay2終了時に不審な例外がでることから始まったのですが、実際にはshutdownされているけれど、scalikejdbc.DataSourceConnectionPoolがcloseを実装していないのでワーニングが出るだけという状況だったようです。

ご回答ありがとうございました!