Slick 3.0.0 with HikariCP driver not loaded - IllegalAccessException: AbstractHikariConfig cannot access a member with "private" modifiers

I try to use tminglei / slick-pg v9.0.0 with slick 3.0.0 and get an IllegalAccessException :

 akka.actor.ActorInitializationException: exception during creation at akka.actor.ActorInitializationException$.apply(Actor.scala:166) ~[akka-actor_2.11-2.3.11.jar:na] ... Caused by: java.lang.RuntimeException: driverClassName specified class 'com.github.tminglei.MyPostgresDriver$' could not be loaded at com.zaxxer.hikari.AbstractHikariConfig.setDriverClassName(AbstractHikariConfig.java:370) ~[HikariCP-java6-2.3.8.jar:na] at slick.jdbc.HikariCPJdbcDataSource$$anonfun$forConfig$18.apply(JdbcDataSource.scala:145) ~[slick_2.11-3.0.0.jar:na] at slick.jdbc.HikariCPJdbcDataSource$$anonfun$forConfig$18.apply(JdbcDataSource.scala:145) ~[slick_2.11-3.0.0.jar:na] at scala.Option.map(Option.scala:146) ~[scala-library-2.11.7.jar:na] at slick.jdbc.HikariCPJdbcDataSource$.forConfig(JdbcDataSource.scala:145) ~[slick_2.11-3.0.0.jar:na] at slick.jdbc.HikariCPJdbcDataSource$.forConfig(JdbcDataSource.scala:135) ~[slick_2.11-3.0.0.jar:na] at slick.jdbc.JdbcDataSource$.forConfig(JdbcDataSource.scala:35) ~[slick_2.11-3.0.0.jar:na] at slick.jdbc.JdbcBackend$DatabaseFactoryDef$class.forConfig(JdbcBackend.scala:223) ~[slick_2.11-3.0.0.jar:na] at slick.jdbc.JdbcBackend$$anon$3.forConfig(JdbcBackend.scala:33) ~[slick_2.11-3.0.0.jar:na] ... Caused by: java.lang.IllegalAccessException: Class com.zaxxer.hikari.AbstractHikariConfig can not access a member of class com.github.tminglei.MyPostgresDriver$ with modifiers "private" at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:109) ~[na:1.7.0_79] at java.lang.Class.newInstance(Class.java:373) ~[na:1.7.0_79] at com.zaxxer.hikari.AbstractHikariConfig.setDriverClassName(AbstractHikariConfig.java:366) ~[HikariCP-java6-2.3.8.jar:na] ... 43 common frames omitted 

HikariCP is the default connection pool in slick 3.0.0

I defined the driver class as in example :

 trait MyPostgresDriver extends ExPostgresDriver with PgArraySupport with PgEnumSupport with PgRangeSupport with PgHStoreSupport with PgSearchSupport{ override val api = new MyAPI {} ////// trait MyAPI extends API with ArrayImplicits with RangeImplicits with HStoreImplicits with SearchImplicits with SearchAssistants } object MyPostgresDriver extends MyPostgresDriver 

My database configuration is pretty simple [excerpt from configafe file follows]:

 slick.dbs.default { driver="com.github.tminglei.MyPostgresDriver$" db { driver="org.postgresql.Driver" url="jdbc:postgresql://hostname:port/dbname" user=user password="pass" } } 

It doesn't seem like it should work, and yet ...

Should I somehow change the driver class? Is this something else?

Note: as seen from stacktrace, I use

  • Java 1.7.0_79
  • Scala 2.11.7
  • akka 2.3.11 (I use the config instance for slick and akka)
  • slick 3.0.0
  • HikariCP-java6 2.3.8
  • tminglei slick-pg_core 0.9.0

Finally, when debugging through jdk code in Class.class (decompiled line 143)

  Constructor tmpConstructor1 = this.cachedConstructor; 

I get the following (toString'ed) value (as shown by intellij):

 private com.github.tminglei.MyPostgresDriver$() 

Could this be an indicator of the problem? If so, how can I fix it?


EDIT

I replaced the custom driver configuration with a PostgresDriver stock as follows:

 slick.dbs.default { driver="slick.driver.PostgresDriver$" db { driver="org.postgresql.Driver" url="jdbc:postgresql://hostname:port/dbname" user=user password="pass" } } 

The error is the same:

 akka.actor.ActorInitializationException: exception during creation ... Caused by: java.lang.RuntimeException: driverClassName specified class 'slick.driver.PostgresDriver$' could not be loaded ... Caused by: java.lang.IllegalAccessException: Class com.zaxxer.hikari.AbstractHikariConfig can not access a member of class slick.driver.PostgresDriver$ with modifiers "private" 
+5
source share
1 answer

I had a similar problem.

I think you are using Database.forConfig("slick.dbs.default") , but your configuration file is in DatabaseConfig format.

Instead, try using:

 val dbConfig: DatabaseConfig[PostgresDriver] = DatabaseConfig.forConfig("slick.dbs.default") val db = dbConfig.db 
+13
source

All Articles