![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
jdbcのDriverを一度登録してるのに "SQLException: No suitable driver found for ..." と言われる現象が発生して、明示的DriverManager.registerDriverを呼んで登録し直すと成功するんだけどなにこれ・・・
2013-06-22 18:40:30![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
https://t.co/ktFCaaUhOj Squeryl混ぜて使ったり、複数DBに接続したり色々やってて原因がよくわからないのだけど、その例外自体はscalikejdbcが依存してるapache dbcpがコネクション作ろうとするときに投げられてくる
2013-06-22 18:46:27![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
@xuwei_k なんでしょうね。Play2 のユニットテストで登録済のはずのドライバーが見えなくなる事象があって場当たり的に Class.forName してやり過ごしたことはありましたけど。
2013-06-22 18:48:29![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
@xuwei_k あ、これは scalikejdbc の PlayPlugin の FakeApp を使った unit test での話です。
2013-06-22 18:51:00![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
@xuwei_k んー、再現しないです。たしか自分もそれ起きたことあって調べてわかんなかったんですよね。でそのうち出なくなってうやむやに。バージョンはなんですか?
2013-06-22 19:22:21![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
@tototoshi versionあまり関係なさそうです。少なくともscalikejdbc1.6.0でも1.6.4でも発生した
2013-06-22 19:26:12![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
@xuwei_k https://t.co/qxzGGtd3OM こんなんで再現するかなあと思ったんですが、動いちゃった
2013-06-22 19:30:29![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
@xuwei_k 発生するコードが全然切り出せないので、とりあえずエラーログだけ晒しておく https://t.co/xuGoOEqVmz
2013-06-22 19:37:45![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
@seratch @tototoshi https://t.co/smxyqXOW1Y このaddもしくはsingletonを明示的に何度か呼んでる(複数DB接続のために、同じ名前だったり違う名前だったりするかも)んですけど、なにか呼び方でやっちゃまずいパターンとかあります?
2013-06-22 19:42:43![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
そういえばScalikejdbcのPlayPluginでonstopでderegisterDriverしたほういいんじゃないかなあと思ったりした。ここらへんわからないけどPlayのDBPluginはそうなってる。
2013-06-22 19:44:13![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
あ、そうか、scalikejdbcもapache-dbcpもderegisterDriver呼んでないけど、PlayがonStopで呼んでるから、もしかしてそれか・・・
2013-06-22 19:49:16![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
@xuwei_k @tototoshi 今外出中なので細かい話はできないですが、driver がいないこのエラーの場合はクラスローダーがらみとかそっち方面な気がします。再現パターンがわかるといいのですけどね。。
2013-06-22 19:53:12![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
@xuwei_k もしかして自前で cp への add とか呼んでますか?そしたらそれとの絡みで今回の挙動になるでしょうね。
2013-06-22 19:56:55![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
@tototoshi え?それで変わります?あ、ちなみに今発生してるのでは、evolutions使ってる(DBPlugin使ってる)けどscalikejdbcはPlayプラグインとしてではなく単にライブラリとして使ってます(自分で直接scalikejdbの設定のメソッド呼んでる)
2013-06-22 19:57:35![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
@tototoshi @seratch あれ、よくわかってないんですけど、PlayPlugin使ってるかどうかは直接関係ないような?scalikejdbcのPlayPluginはClass.forNameは呼んでるけど、registerDriverは直接呼んでないですよね?
2013-06-22 20:05:33![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
PlayのDBPluginがderegisterDriverを呼ぶから、それを呼んだ後(同じClassLoader上のコードだと?)Class.forName呼ぶことで再登録しようとしても意味ない(static initializerだから)から、という結論に達しつつあるのだけど
2013-06-22 20:23:36![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
http://t.co/1QOwHaxQL9 jdbc4からだったか。postgresqlは3のもでてるのね。丁寧なことに3のほうにはjava.sql.Driver入ってないや
2013-06-22 20:35:36