2015-07-01 5 views
5

Próbuję użyć tminglei/slick-pg v9.0.0 ze śliskiego 3.0.0 i otrzymuję IllegalAccessException:zręczny 3.0.0 z kierowcą HikariCP nie załadowane - IllegalAccessException: AbstractHikariConfig nie może uzyskać dostępu do członka z modyfikatorów „prywatny”

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 jest basen domyślne połączenie w zręczny 3.0.0

mam zdefiniowane klasy sterownika podobnie jak w 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 

Mój config bazy danych jest bardzo proste [fragment typesafe config następująco]:

slick.dbs.default { 

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

    db { 
    driver="org.postgresql.Driver" 

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

Nie wydaje się, jakby to nie powinno działać, a jednak ...

Czy mogę zmienić swoją klasę sterownika jakoś? Czy to coś innego?

Uwaga: jak widać w stacktrace Używam

  1. Java 1.7.0_79
  2. Scala 2.11.7
  3. Akka 2.3.11 (dzielę instancję config do wycieku i Akce)
  4. zręczny 3.0.0
  5. HikariCP-java6 2.3.8
  6. tminglei męska zręczny-pg_core 0.9.0

Wreszcie podczas debugowania kodu thru jdk w Class.class (dekompilowana linia 143)

Constructor tmpConstructor1 = this.cachedConstructor; 

uzyskać następujące wartości (toString'ed) (jak pokazano przez IntelliJ):

private com.github.tminglei.MyPostgresDriver$() 

Czy może to wskazywać na problem? Jeśli tak, to jak mam to naprawić?


EDIT

Wymieniłem konfigurację sterownika niestandardowego z PostgresDriver stanie tak:

slick.dbs.default { 

    driver="slick.driver.PostgresDriver$" 

    db { 
    driver="org.postgresql.Driver" 

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

Błąd jest taki sam:

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

Wydaje się, że może to być spowodowane przez prywatnego konstruktora ...? – brettw

+0

wydaje się, że tak, ale nie mogę wymyślić, gdzie ... jak możesz sobie wyobrazić, jestem całkiem nowy dla Scala ... – Yaneeve

+0

@brettw added added. Wygląda na to, że sterownik nie działa tak dobrze – Yaneeve

Odpowiedz

13

JA miał podobny problem.

Myślę, że używasz Database.forConfig("slick.dbs.default"), ale twój plik konfiguracyjny jest w formacie DatabaseConfig.

Zamiast tego, spróbuj użyć:

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

Dzięki! Wykonała pracę doskonale! Byłbym na końcu mojego rozumu, gdyby nie twoja odpowiedź :) – Yaneeve

Powiązane problemy