2015-07-01 5 views
5

zugreifen kann ich tminglei/slick-pg v9.0.0 mit Slick 3.0.0 zu verwenden, ich versuche und bin immer ein IllegalAccessException:glatt 3.0.0 mit HikariCP Treiber nicht geladen - Illegal: AbstractHikariConfig kein Mitglied mit Modifikatoren „private“

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 ist der Standard-Verbindungspool in slick 3.0.0

ich den Fahrer Klasse wie viel definiert habe im 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 

Meine Datenbank Config ist ziemlich einfach [Auszug aus typsichere Konfiguration folgt]:

slick.dbs.default { 

    driver="com.github.tminglei.MyPostgresDriver$" 

    db { 
    driver="org.postgresql.Driver" 

    url="jdbc:postgresql://hostname:port/dbname" 
    user=user 
    password="pass" 
    } 
} 

Es scheint nicht, als ob es nicht funktionieren sollte, und doch ...

Soll ich meine Treiberklasse ändern irgendwie? Ist es etwas anderes?

Hinweis: wie in der Stacktrace zu sehen Ich bin mit

  1. Java 1.7.0_79
  2. Scala 2.11.7
  3. akka 2.3.11 (I die Config-Instanz für Slick teilen und akka)
  4. glatt 3.0.0
  5. HikariCP-java6 2.3.8
  6. tminglei der Slick-pg_core 0.9.0

Schließlich wenn durch den jdk Code bei Class.class Debuggen (dekompilierten Linie 143)

Constructor tmpConstructor1 = this.cachedConstructor; 

ich folgendes (toString'ed) Wert zu erhalten (wie dargestellt von IntelliJ):

private com.github.tminglei.MyPostgresDriver$() 

Könnte dies ein Hinweis auf das Problem sein? Wenn ja, wie sollte ich es beheben?


EDIT

ich die benutzerdefinierte Treiberkonfiguration mit dem Aktien PostgresDriver wie so ersetzt haben:

slick.dbs.default { 

    driver="slick.driver.PostgresDriver$" 

    db { 
    driver="org.postgresql.Driver" 

    url="jdbc:postgresql://hostname:port/dbname" 
    user=user 
    password="pass" 
    } 
} 

Der Fehler ist das gleiche:

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" 
+0

es so scheint, von einem privaten Konstruktor verursacht werden könnte ...? – brettw

+0

es scheint so, aber ich kann nicht herausfinden, wo ... wie Sie sich vorstellen können, ich bin ziemlich neu in Scala ... – Yaneeve

+0

@brettw hinzugefügt bearbeiten. Es scheint, als ob der Aktienfahrer nicht so gut funktioniert. – Yaneeve

Antwort

13

ICH hatte ein ähnliches Problem.

Ich denke, Sie verwenden Database.forConfig("slick.dbs.default"), aber Ihre Konfigurationsdatei ist in DatabaseConfig Format.

Stattdessen versuchen Sie es mit:

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

Danke! Hat den Job perfekt gemacht! Ich wäre am Ende meiner Weisheit gewesen, wenn nicht für Sie Antwort :) – Yaneeve