Get JdbcSession in Service from Guice

415 views
Skip to first unread message

Michael Mangeng

unread,
Jan 10, 2018, 10:45:52 AM1/10/18
to Lagom Framework Users
Hi all,

i'm still experimenting with lagom 1.4.0-RC1 and i fail to get a JdbcSession to a PostgreSQL Database WITHOUT the use of lagom-persistence-jdbc.
In fact i only want the connection to to some "NOT-cqrs/eventsourcing" stuff.

Can anybody point me in th right direction please?

E.g.
public UserServiceImpl(PersistentEntityRegistry persistentEntityRegistry, UserRepository userRepo) {
this.persistentEntityRegistry = persistentEntityRegistry;
persistentEntityRegistry.register(UserEntity.class);
this.userRepo = userRepo;
}




import com.lightbend.lagom.javadsl.persistence.cassandra.CassandraSession;
import com.lightbend.lagom.javadsl.persistence.jdbc.JdbcSession;

@Singleton
public class UserRepository {

private final CassandraSession casSession;
private final JdbcSession jdbcSession;

@Inject
public UserRepository(CassandraSession casSession, JdbcSession jdbcSession) {
this.casSession = casSession;
this.jdbcSession = jdbcSession;

LoggerFactory.getLogger(UserRepository.class).info("Cass-Session: "+casSession);
LoggerFactory.getLogger(UserRepository.class).info("Jdbc-Session: "+jdbcSession);
//readSide.register(PUserEventProcessor.class);
}

...
}

In application.conf of the -impl plugin i wrote:

jdbc-defaults.slick {
jndiDbName=DefaultDB
}

db.default {
driver = "org.postgresql.Driver"
url = "jdbc:postgresql://localhost/iot"
db.default.username = "testdb"
db.default.password= "testpass"
logSql=true
hikaricp {
minimumIdle = ${db.default.async-executor.minConnections}
maximumPoolSize = ${db.default.async-executor.maxConnections}
}
}

jdbc-defaults.slick.driver = "slick.driver.PostgresDriver$"
lagom.persistence.jdbc.create-tables.auto=false


Oh and in build.sbt i tried with adding PlayJava and without but i can't figure out what to do... and i also tried with play.db.Database instead of JdbcSession.

greetings,
Michael


Stacktraces:
com.google.inject.CreationException: Unable to create injector, see the following errors:

1) Could not find a suitable constructor in com.lightbend.lagom.internal.javadsl.server.ResolvedServices. Classes must have either one (and only one) constructor annotated with @In
ject or a zero-argument constructor that is not private.
at com.lightbend.lagom.internal.javadsl.server.ResolvedServices.class(JavadslServerBuilder.scala:100)
while locating com.lightbend.lagom.internal.javadsl.server.ResolvedServices
for the 1st parameter of com.lightbend.lagom.internal.javadsl.broker.kafka.JavadslRegisterTopicProducers.<init>(JavadslRegisterTopicProducers.scala:32)
at com.lightbend.lagom.internal.javadsl.broker.kafka.KafkaBrokerModule.configure(KafkaBrokerModule.scala:11) (via modules: com.google.inject.util.Modules$OverrideModule -> com.li
ghtbend.lagom.internal.javadsl.broker.kafka.KafkaBrokerModule)

2) Could not find a suitable constructor in com.lightbend.lagom.internal.javadsl.server.ResolvedServices. Classes must have either one (and only one) constructor annotated with @In
ject or a zero-argument constructor that is not private.
at com.lightbend.lagom.internal.javadsl.server.ResolvedServices.class(JavadslServerBuilder.scala:100)
while locating com.lightbend.lagom.internal.javadsl.server.ResolvedServices
for the 2nd parameter of com.lightbend.lagom.internal.server.ServiceRegistrationModule$RegisterWithServiceRegistry.<init>(ServiceRegistrationModule.scala:56)
at com.lightbend.lagom.internal.server.ServiceRegistrationModule.bindings(ServiceRegistrationModule.scala:29):
Binding(class com.lightbend.lagom.internal.server.ServiceRegistrationModule$RegisterWithServiceRegistry to self eagerly) (via modules: com.google.inject.util.Modules$OverrideModule
-> play.api.inject.guice.GuiceableModuleConversions$$anon$1)

3) Could not find a suitable constructor in com.lightbend.lagom.javadsl.api.ServiceInfo. Classes must have either one (and only one) constructor annotated with @Inject or a zero-ar
gument constructor that is not private.
at com.lightbend.lagom.javadsl.api.ServiceInfo.class(ServiceInfo.java:52)
while locating com.lightbend.lagom.javadsl.api.ServiceInfo
for the 3rd parameter of com.lightbend.lagom.internal.javadsl.broker.kafka.JavadslRegisterTopicProducers.<init>(JavadslRegisterTopicProducers.scala:32)
at com.lightbend.lagom.internal.javadsl.broker.kafka.KafkaBrokerModule.configure(KafkaBrokerModule.scala:11) (via modules: com.google.inject.util.Modules$OverrideModule -> com.li
ghtbend.lagom.internal.javadsl.broker.kafka.KafkaBrokerModule)

4) Could not find a suitable constructor in com.lightbend.lagom.javadsl.api.ServiceInfo. Classes must have either one (and only one) constructor annotated with @Inject or a zero-ar
gument constructor that is not private.
at com.lightbend.lagom.javadsl.api.ServiceInfo.class(ServiceInfo.java:52)
while locating com.lightbend.lagom.javadsl.api.ServiceInfo
for the 1st parameter of com.lightbend.lagom.javadsl.broker.kafka.KafkaTopicFactory.<init>(KafkaTopicFactory.java:33)
at com.lightbend.lagom.javadsl.broker.kafka.KafkaClientModule.configure(KafkaClientModule.java:12) (via modules: com.google.inject.util.Modules$OverrideModule -> com.lightbend.la
gom.javadsl.broker.kafka.KafkaClientModule)

5) Could not find a suitable constructor in com.lightbend.lagom.javadsl.api.ServiceInfo. Classes must have either one (and only one) constructor annotated with @Inject or a zero-ar
gument constructor that is not private.
at com.lightbend.lagom.javadsl.api.ServiceInfo.class(ServiceInfo.java:52)
while locating com.lightbend.lagom.javadsl.api.ServiceInfo
for field at com.lightbend.lagom.internal.javadsl.registry.ServiceRegistryClientProvider.serviceInfo(ServiceRegistryModule.scala:61)
at com.lightbend.lagom.internal.javadsl.registry.ServiceRegistryModule.configure(ServiceRegistryModule.scala:34) (via modules: com.google.inject.util.Modules$OverrideModule -> co
m.lightbend.lagom.internal.javadsl.registry.ServiceRegistryModule)

6) A binding to com.lightbend.lagom.javadsl.persistence.PersistentEntityRegistry was already configured at com.lightbend.lagom.javadsl.persistence.cassandra.CassandraPersistenceMod
ule.configure(CassandraPersistenceModule.scala:30) (via modules: com.google.inject.util.Modules$OverrideModule -> com.lightbend.lagom.javadsl.persistence.cassandra.CassandraPersist
enceModule).
at com.lightbend.lagom.javadsl.persistence.jdbc.JdbcPersistenceModule.configure(JdbcPersistenceModule.scala:24) (via modules: com.google.inject.util.Modules$OverrideModule -> com
.lightbend.lagom.javadsl.persistence.jdbc.JdbcPersistenceModule)

7) A binding to com.lightbend.lagom.spi.persistence.OffsetStore was already configured at com.lightbend.lagom.javadsl.persistence.cassandra.CassandraPersistenceModule.configure(Cas
sandraPersistenceModule.scala:34) (via modules: com.google.inject.util.Modules$OverrideModule -> com.lightbend.lagom.javadsl.persistence.cassandra.CassandraPersistenceModule).
at com.lightbend.lagom.javadsl.persistence.jdbc.JdbcPersistenceModule.configure(JdbcPersistenceModule.scala:27) (via modules: com.google.inject.util.Modules$OverrideModule -> com
.lightbend.lagom.javadsl.persistence.jdbc.JdbcPersistenceModule)

7 errors
at com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:470)
at com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:155)
at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:107)
at com.google.inject.Guice.createInjector(Guice.java:99)
at com.google.inject.Guice.createInjector(Guice.java:84)
at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:185)
at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:137)
at play.api.inject.guice.GuiceApplicationLoader.load(GuiceApplicationLoader.scala:21)
at play.core.server.LagomReloadableDevServerStart$$anon$1.$anonfun$get$5(LagomReloadableDevServerStart.scala:176)
at play.core.server.LagomReloadableDevServerStart$$anon$1$$Lambda$8578/356585956.apply(Unknown Source)
at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
at play.core.server.LagomReloadableDevServerStart$$anon$1.$anonfun$get$3(LagomReloadableDevServerStart.scala:173)
at play.core.server.LagomReloadableDevServerStart$$anon$1$$Lambda$8576/1603958247.apply(Unknown Source)
at scala.Option.map(Option.scala:146)
at play.core.server.LagomReloadableDevServerStart$$anon$1.$anonfun$get$2(LagomReloadableDevServerStart.scala:149)
at play.core.server.LagomReloadableDevServerStart$$anon$1$$Lambda$8575/2054106972.apply(Unknown Source)
at scala.util.Success.flatMap(Try.scala:247)
at play.core.server.LagomReloadableDevServerStart$$anon$1.$anonfun$get$1(LagomReloadableDevServerStart.scala:147)
at play.core.server.LagomReloadableDevServerStart$$anon$1$$Lambda$8523/117169824.apply(Unknown Source)
at scala.concurrent.Future$.$anonfun$apply$1(Future.scala:655)
at scala.concurrent.Future$$$Lambda$6640/530801310.apply(Unknown Source)
at scala.util.Success.$anonfun$map$1(Try.scala:251)
at scala.util.Success.map(Try.scala:209)
at scala.concurrent.Future.$anonfun$map$1(Future.scala:289)
at scala.concurrent.Future$$Lambda$6573/839451565.apply(Unknown Source)
at scala.concurrent.impl.Promise.liftedTree1$1(Promise.scala:29)
at scala.concurrent.impl.Promise.$anonfun$transform$1(Promise.scala:29)
at scala.concurrent.impl.Promise$$Lambda$5938/504335713.apply(Unknown Source)
at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:60)
at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1423)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:902)
at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1689)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1644)
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)

Tim Moore

unread,
Jan 10, 2018, 9:55:34 PM1/10/18
to Michael Mangeng, Lagom Framework Users
Hi Michael,

JdbcSession is part of the Lagom Persistence JDBC module. Are you trying to use Cassandra and JDBC together in one service? As you have found, there are some conflicting definitions between the Cassandra persistence and JDBC persistence modules. You can work around this by disabling the JDBC module and adding back the bindings that you need in your service's own module (maybe just JdbcSession in your case).


Specifically look at these lines:

We're planning to make this easier in a future version of Lagom by splitting apart the modules more granularly, so that it will be possible to depend on JdbcSession without also bringing in all of the ES/CQRS parts. We're tracking this at https://github.com/lagom/lagom/issues/720


Using play.db.Database instead should work if you have added the required dependency as described at https://www.playframework.com/documentation/2.6.x/JavaDatabase

Just be aware that Play's DB API does not automatically provide a dedicated execution context for JDBC calls in the way JdbcSession does. You'll need to follow the instructions on the page linked above to create a custom execution context to avoid blocking the main dispatcher for your service.

Best,
Tim

--
You received this message because you are subscribed to the Google Groups "Lagom Framework Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to lagom-framework+unsubscribe@googlegroups.com.
To post to this group, send email to lagom-framework@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/lagom-framework/177d056f-7e14-4d60-a628-ba1d8a8a27f9%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--
Tim Moore
Lagom Tech Lead, Lightbend, Inc.

Michael Mangeng

unread,
Jan 11, 2018, 8:13:12 AM1/11/18
to Lagom Framework Users
Hi Tim!

thanks for the response.

I'm sorry i have to ask again... the postgresql driver is being located by intellij (by automatic reload of sbt file). Unfortunately i get a ClassNotFoundException for postgresl drover if a do "runAll" in the sbt shell.
If intellij could not locate the driver, i would know that there is something wrong... but it does and only sbt cannot find it...

Can you point me into some direction?

In build.sbt i've got now:
val postgres = "org.postgresql"    % "postgresql" % "42.1.4"

lazy val
`auth-impl` = (project in file("auth-impl"))
.enablePlugins(LagomJava)
.settings(common: _*)
.settings(
libraryDependencies ++= Seq(
lagomJavadslPersistenceCassandra,
lagomJavadslPersistenceJdbc,
lagomJavadslKafkaBroker,
lagomJavadslTestKit,
postgres,
lombok
)
)
.settings(lagomForkedTestSettings: _*)
.dependsOn(`auth-api`,`security`)



Full Exception:
Configuration error: Configuration error[Cannot connect to database [default]]
        at play.api.Configuration$.configError(Configuration.scala:156)
        at play.api.Configuration.reportError(Configuration.scala:990)
        at play.api.db.DefaultDBApi.$anonfun$connect$1(DefaultDBApi.scala:48)
        at play.api.db.DefaultDBApi.$anonfun$connect$1$adapted(DefaultDBApi.scala:42)
        at play.api.db.DefaultDBApi$$Lambda$10738/1962210145.apply(Unknown Source)
        at scala.collection.immutable.List.foreach(List.scala:389)
        at play.api.db.DefaultDBApi.connect(DefaultDBApi.scala:42)
        at play.api.db.DBApiProvider.get$lzycompute(DBModule.scala:86)
        at play.api.db.DBApiProvider.get(DBModule.scala:75)
        at play.api.db.DBApiProvider.get(DBModule.scala:56)
        at com.google.inject.internal.ProviderInternalFactory.provision(ProviderInternalFactory.java:81)
        at com.google.inject.internal.BoundProviderFactory.provision(BoundProviderFactory.java:72)
        at com.google.inject.internal.ProviderInternalFactory.circularGet(ProviderInternalFactory.java:61)
        at com.google.inject.internal.BoundProviderFactory.get(BoundProviderFactory.java:62)
        at com.google.inject.internal.SingleFieldInjector.inject(SingleFieldInjector.java:54)
        at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:132)
        at com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:93)
        at com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:80)
        at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092)
        at com.google.inject.internal.MembersInjectorImpl.injectAndNotify(MembersInjectorImpl.java:80)
        at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:62)
        at com.google.inject.internal.InjectorImpl.injectMembers(InjectorImpl.java:987)
        at com.google.inject.util.Providers$GuicifiedProviderWithDependencies.initialize(Providers.java:149)
        at com.google.inject.util.Providers$GuicifiedProviderWithDependencies$$FastClassByGuice$$2a7177aa.invoke(<generate
        at com.google.inject.internal.SingleMethodInjector$1.invoke(SingleMethodInjector.java:54)
        at com.google.inject.internal.SingleMethodInjector.inject(SingleMethodInjector.java:89)
        at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:132)
        at com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:93)
        at com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:80)
        at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1085)
        at com.google.inject.internal.MembersInjectorImpl.injectAndNotify(MembersInjectorImpl.java:80)
        at com.google.inject.internal.Initializer$InjectableReference.get(Initializer.java:223)
        at com.google.inject.internal.Initializer.injectAll(Initializer.java:132)
        at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:174)
        at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:110)

        at com.google.inject.Guice.createInjector(Guice.java:99)
        at com.google.inject.Guice.createInjector(Guice.java:84)
        at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:185)
        at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:137)
        at play.api.inject.guice.GuiceApplicationLoader.load(GuiceApplicationLoader.scala:21)
        at play.core.server.LagomReloadableDevServerStart$$anon$1.$anonfun$get$5(LagomReloadableDevServerStart.scala:176)
        at play.core.server.LagomReloadableDevServerStart$$anon$1$$Lambda$10238/1510979796.apply(Unknown Source)

        at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
        at play.core.server.LagomReloadableDevServerStart$$anon$1.$anonfun$get$3(LagomReloadableDevServerStart.scala:173)
        at play.core.server.LagomReloadableDevServerStart$$anon$1$$Lambda$10236/1009391418.apply(Unknown Source)

        at scala.Option.map(Option.scala:146)
        at play.core.server.LagomReloadableDevServerStart$$anon$1.$anonfun$get$2(LagomReloadableDevServerStart.scala:149)
        at play.core.server.LagomReloadableDevServerStart$$anon$1$$Lambda$10235/894729442.apply(Unknown Source)

        at scala.util.Success.flatMap(Try.scala:247)
        at play.core.server.LagomReloadableDevServerStart$$anon$1.$anonfun$get$1(LagomReloadableDevServerStart.scala:147)
        at play.core.server.LagomReloadableDevServerStart$$anon$1$$Lambda$9822/1965426487.apply(Unknown Source)
        at scala.concurrent.Future$.$anonfun$apply$1(Future.scala:655)
        at scala.concurrent.Future$$$Lambda$7475/467254854.apply(Unknown Source)

        at scala.util.Success.$anonfun$map$1(Try.scala:251)
        at scala.util.Success.map(Try.scala:209)
        at scala.concurrent.Future.$anonfun$map$1(Future.scala:289)
        at scala.concurrent.Future$$Lambda$7442/407241200.apply(Unknown Source)

        at scala.concurrent.impl.Promise.liftedTree1$1(Promise.scala:29)
        at scala.concurrent.impl.Promise.$anonfun$transform$1(Promise.scala:29)
        at scala.concurrent.impl.Promise$$Lambda$7121/1309542106.apply(Unknown Source)

        at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:60)
        at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1423)
        at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
        at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:902)
        at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1689)
        at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1644)
        at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Caused by: Configuration error: Configuration error[Driver not found: [org.postgresql.Driver}]]
        at play.api.Configuration$.configError(Configuration.scala:156)
        at play.api.Configuration.reportError(Configuration.scala:990)
        at play.api.db.DefaultDatabase.$anonfun$driver$1(Databases.scala:114)
        at play.api.db.DefaultDatabase$$Lambda$10739/1375765178.apply(Unknown Source)
        at scala.Option.map(Option.scala:146)
        at play.api.db.DefaultDatabase.driver$lzycompute(Databases.scala:108)
        at play.api.db.DefaultDatabase.driver(Databases.scala:107)
        at play.api.db.DefaultDatabase.dataSource$lzycompute(Databases.scala:122)
        at play.api.db.DefaultDatabase.dataSource(Databases.scala:121)
        at play.api.db.DefaultDatabase.getConnection(Databases.scala:142)
        at play.api.db.DefaultDatabase.getConnection(Databases.scala:138)
        at play.api.db.DefaultDBApi.$anonfun$connect$1(DefaultDBApi.scala:44)
        ... 64 more
Caused by: @76ib901j7: Cannot load Driver
        at play.utils.Reflect$.createInstance(Reflect.scala:149)
        at play.api.db.DefaultDatabase.$anonfun$driver$1(Databases.scala:110)
        ... 73 more
Caused by: java.lang.ClassNotFoundException: org.postgresql.Driver
        at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:344)
        at play.utils.Reflect$.getClass(Reflect.scala:154)
        at play.utils.Reflect$.createInstance(Reflect.scala:143)
        ... 74 more

Michael Mangeng

unread,
Jan 11, 2018, 9:34:59 AM1/11/18
to Lagom Framework Users
i got this running by simply putting the postgresql driver into the lib directory of auth-impl.

(but it should work with the dependency nevertheless...)



Am Mittwoch, 10. Januar 2018 16:45:52 UTC+1 schrieb Michael Mangeng:

Michael Mangeng

unread,
Jan 11, 2018, 10:14:45 AM1/11/18
to Lagom Framework Users
Oh... i was wrong:
Error injecting constructor, java.lang.ClassCastException: org.jdbcdslog.LogSqlDataSource cannot be cast to slick.jdbc.JdbcBackend$DatabaseDef ??

16:10:54.244 [info] akka.cluster.Cluster(akka://auth-impl-application) [sourceThread=auth-impl-application-akka.actor.default-dispatcher-3, akkaTimestamp=15:10:54.243UTC, akkaSourc
e=akka.cluster.Cluster(akka://auth-impl-application), sourceActorSystem=auth-impl-application] - Cluster Node [akka.tcp://auth-impl-...@127.0.0.1:53459] - Leader is moving
node [akka.tcp://auth-impl-...@127.0.0.1:53459] to [Up]

com.google.inject.CreationException: Unable to create injector, see the following errors:

1) Error injecting constructor, java.lang.ClassCastException: org.jdbcdslog.LogSqlDataSource cannot be cast to slick.jdbc.JdbcBackend$DatabaseDef
  at com.lightbend.lagom.internal.javadsl.persistence.jdbc.SlickProvider.<init>(SlickProvider.scala:14)
  at com.lightbend.lagom.internal.javadsl.persistence.jdbc.SlickProvider.class(SlickProvider.scala:13)
  while locating com.lightbend.lagom.internal.javadsl.persistence.jdbc.SlickProvider
    for the 1st parameter of com.lightbend.lagom.internal.javadsl.persistence.jdbc.JdbcSessionImpl.<init>(JdbcSessionImpl.scala:18)
  at com.lightbend.lagom.internal.javadsl.persistence.jdbc.JdbcSessionImpl.class(JdbcSessionImpl.scala:18)
  while locating com.lightbend.lagom.internal.javadsl.persistence.jdbc.JdbcSessionImpl
  while locating com.lightbend.lagom.javadsl.persistence.jdbc.JdbcSession
    for the 2nd parameter of biz.sfs.m2m.impl.UserRepository.<init>(UserRepository.java:20)
  at biz.sfs.m2m.impl.AuthModule.configure(AuthModule.java:21) (via modules: com.google.inject.util.Modules$OverrideModule -> bi16:10:54.321 [info] akka.cluster.singleton.ClusterSi
ngletonManager [sourceThread=auth-impl-application-akka.actor.default-dispatz.sfs.m2m.impl.AuthModule)
cher-2, akkaTimestamp=15:10:54.321UTC, akkaSource=akka.tcp://auth-impl-...@127.0.0.1:53459/user/cassandraOffsetStorePrep  while locating biz.sfs.m2m.impl.UserRepository
are-singleton, sourceActorSystem=auth-impl-application] - Singleton manager starting singleton actor [akka://auth-impl-applicati    for the 2nd parameter of biz.sfs.m2m.impl.UserSe
rviceImpl.<init>(UserServiceImpl.java:26)
  at com.lightbend.lagom.javadsl.server.ServiceGuiceSupport.bindServices(ServiceGuiceSupport.java:80) (via modules: com.google.ion/user/cassandraOffsetStorePrepare-singleton/single
ton]
nject.util.Modules$OverrideModule -> biz.sfs.m2m.impl.AuthModule)
16:10:54.342 [info] akka.cluster.singleton.ClusterSingletonManager [sourceThread=auth-impl-application-akka.actor.default-dispat  while locating biz.sfs.m2m.impl.UserServiceImpl
cher-2, akkaTimestamp=15:10:54.329UTC, akkaSource=akka.tcp://auth-impl-...@127.0.0.1:53459/user/cassandraOffsetStorePrep  at com.lightbend.lagom.javadsl.server.ServiceGuice
Support.bindServices(ServiceGuiceSupport.java:106) (via modules: com.google.inject.util.Modules$OverrideModule -> biz.sfs.m2m.impl.AuthModule)
  while locating com.lightbend.lagom.internal.javadsl.server.ResolvedServices
are-singleton, sourceActorSystem=auth-impl-application] - ClusterSingletonManager state change [Start -> Oldest]

    for the 1st parameter of com.lightbend.lagom.internal.javadsl.broker.kafka.JavadslRegisterTopicProducers.<init>(JavadslRegisterTopicProducers.scala:32)
16:10:54.371 [info] com.lightbend.lagom.internal.persistence.cluster.ClusterStartupTaskActor [sourceThread=auth-impl-application-akka.actor.default-dispatcher-21, akkaTimestamp=15:
10:54.342UTC, akkaSource=akka.tcp://auth-impl-...@127.0.0.1:53459/us  at com.lightbend.lagom.internal.javadsl.broker.kafka.KafkaBrokerModule.configure(KafkaBrokerModule.sca
la:11) (via modules: comer/cassandraOffsetStorePrepare-singleton/singleton/cassandraOffsetStorePrepare, sourceActorSystem=auth-impl-application] - Execu.google.inject.util.Modules$
OverrideModule -> com.lightbend.lagom.internal.javadsl.broker.kafka.KafkaBrokerModule)
  while locating com.lightbend.lagom.internal.javadsl.broker.kafka.JavadslRegisterTopicProducers
ting cluster start task cassandraOffsetStorePrepare.
Caused by: java.lang.ClassCastException: org.jdbcdslog.LogSqlDataSource cannot be cast to slick.jdbc.JdbcBackend$DatabaseDef
        at akka.persistence.jdbc.util.SlickDatabase$.$anonfun$forConfig$2(SlickDriver.scala:35)
        at akka.persistence.jdbc.util.SlickDatabase$$$Lambda$9865/983636629.apply(Unknown Source)
        at scala.Option.map(Option.scala:146)
        at akka.persistence.jdbc.util.SlickDatabase$.forConfig(SlickDriver.scala:35)
        at com.lightbend.lagom.internal.persistence.jdbc.SlickProvider.<init>(SlickProvider.scala:37)
        at com.lightbend.lagom.internal.javadsl.persistence.jdbc.SlickProvider.<init>(SlickProvider.scala:14)
        at com.lightbend.lagom.internal.javadsl.persistence.jdbc.SlickProvider$$FastClassByGuice$$80193cff.newInstance(<generated>)
        at com.google.inject.internal.DefaultConstructionProxyFactory$FastClassProxy.newInstance(DefaultConstructionProxyFactory.java:89)
        at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:111)
        at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:90)
        at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:268)
        at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
        at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092)
        at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
        at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:194)
        at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
        at com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38)
        at com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62)
        at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:110)
        at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:90)
        at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:268)
        at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
        at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092)
        at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
        at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:194)
        at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
        at com.google.inject.internal.FactoryProxy.get(FactoryProxy.java:56)
        at com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38)
        at com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62)
        at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:110)
        at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:90)
        at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:268)
        at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
        at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092)
        at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
        at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:194)
        at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)


My application.conf is:
play.modules.enabled += com.lagomtest.m2m.impl.AuthModule
play.modules.disabled += com.lightbend.lagom.javadsl.persistence.jdbc.JdbcPersistenceModule

m2m.cassandra.keyspace = m2m_auth

cassandra-journal.keyspace = ${m2m.cassandra.keyspace}
cassandra-snapshot-store.keyspace = ${m2m.cassandra.keyspace}
lagom.persistence.read-side.cassandra.keyspace = ${m2m.cassandra.keyspace}

# See https://doc.akka.io/docs/akka/current/cluster-sharding.html#distributed-data-vs-persistence-mode
akka.cluster.sharding.state-store-mode = ddata

# Enable the serializer for akka.Done provided in Akka 2.5.8+ to avoid the use of Java serialization.
akka.actor.serialization-bindings {
"akka.Done" = akka-misc
}

jdbc-defaults.slick {
jndiDbName = DefaultDS
}


db.default {
jndiName=DefaultDS
jndiDbName=DefaultDB

async-executor {
queueSize = 10000
# 5 * number of cores
numThreads = 20
# number of threads
minConnections = 20
# 5 * number of threads
maxConnections = 100
  }

driver = "org.postgresql.Driver"
url = "jdbc:postgresql://localhost/iot"
  username ="test"
password = "test"
logSql=true
hikaricp {
minimumIdle = 3
maximumPoolSize = 4
connectionTestQuery = "SELECT 1"
}
}

lagom.persistence.jpa {
persistence-unit = "default"

initialization-retry {
interval {
min = 5s
factor = 1.0
}
max-retries = 10
}
}

jdbc-defaults.slick.driver = "slick.driver.PostgresDriver$"
lagom.persistence.jdbc.create-tables.auto=false



Am Mittwoch, 10. Januar 2018 16:45:52 UTC+1 schrieb Michael Mangeng:

Renato Cavalcanti

unread,
Jan 15, 2018, 5:08:02 AM1/15/18
to Lagom Framework Users
Hi Michael, 

This is happening because you've bound the `DataSource` (`LogSqlDataSource`) to the JDNI name we use to retrieve the Slick `DatabaseDef`. 

The config you posted here shows:

jdbc-defaults.slick {
  jndiDbName
= DefaultDS
}


Instead, you should write:

jdbc-defaults.slick {
  jndiDbName
= DefaultDB
}


Actually, you don't need to re-define the whole JDBC config. You can just define the driver and connection bits.


db
.default {
  driver = "org.postgresql.Driver"
  url = "jdbc:postgresql://localhost/iot"
  username ="test"
  password = "test"
  logSql=true
  hikaricp {
    minimumIdle
= 3
    maximumPoolSize = 4
    connectionTestQuery = "SELECT 1"
  }
}

jdbc
-defaults.slick.driver = "slick.driver.PostgresDriver$"

You should re-define it only with the defaults we provide don't match your requirements.

Cheers,

Renato



On Thursday, January 11, 2018 at 4:14:45 PM UTC+1, Michael Mangeng wrote:
Oh... i was wrong:
Error injecting constructor, java.lang.ClassCastException: org.jdbcdslog.LogSqlDataSource cannot be cast to slick.jdbc.JdbcBackend$DatabaseDef ??

16:10:54.244 [info] akka.cluster.Cluster(akka://auth-impl-application) [sourceThread=auth-impl-application-akka.actor.default-dispatcher-3, akkaTimestamp=15:10:54.243UTC, akkaSourc
e=akka.cluster.Cluster(akka://auth-impl-application), sourceActorSystem=auth-impl-application] - Cluster Node [akka.tcp://auth-impl-appli...@127.0.0.1:53459] - Leader is moving
node [akka.tcp://auth-impl-appli...@127.0.0.1:53459] to [Up]

com.google.inject.CreationException: Unable to create injector, see the following errors:

1) Error injecting constructor, java.lang.ClassCastException: org.jdbcdslog.LogSqlDataSource cannot be cast to slick.jdbc.JdbcBackend$DatabaseDef
  at com.lightbend.lagom.internal.javadsl.persistence.jdbc.SlickProvider.<init>(SlickProvider.scala:14)
  at com.lightbend.lagom.internal.javadsl.persistence.jdbc.SlickProvider.class(SlickProvider.scala:13)
  while locating com.lightbend.lagom.internal.javadsl.persistence.jdbc.SlickProvider
    for the 1st parameter of com.lightbend.lagom.internal.javadsl.persistence.jdbc.JdbcSessionImpl.<init>(JdbcSessionImpl.scala:18)
  at com.lightbend.lagom.internal.javadsl.persistence.jdbc.JdbcSessionImpl.class(JdbcSessionImpl.scala:18)
  while locating com.lightbend.lagom.internal.javadsl.persistence.jdbc.JdbcSessionImpl
  while locating com.lightbend.lagom.javadsl.persistence.jdbc.JdbcSession
    for the 2nd parameter of biz.sfs.m2m.impl.UserRepository.<init>(UserRepository.java:20)
  at biz.sfs.m2m.impl.AuthModule.configure(AuthModule.java:21) (via modules: com.google.inject.util.Modules$OverrideModule -> bi16:10:54.321 [info] akka.cluster.singleton.ClusterSi
ngletonManager [sourceThread=auth-impl-application-akka.actor.default-dispatz.sfs.m2m.impl.AuthModule)
cher-2, akkaTimestamp=15:10:54.321UTC, akkaSource=akka.tcp://auth-impl-app...@127.0.0.1:53459/user/cassandraOffsetStorePrep  while locating biz.sfs.m2m.impl.UserRepository

are-singleton, sourceActorSystem=auth-impl-application] - Singleton manager starting singleton actor [akka://auth-impl-applicati    for the 2nd parameter of biz.sfs.m2m.impl.UserSe
rviceImpl.<init>(UserServiceImpl.java:26)
  at com.lightbend.lagom.javadsl.server.ServiceGuiceSupport.bindServices(ServiceGuiceSupport.java:80) (via modules: com.google.ion/user/cassandraOffsetStorePrepare-singleton/single
ton]
nject.util.Modules$OverrideModule -> biz.sfs.m2m.impl.AuthModule)
16:10:54.342 [info] akka.cluster.singleton.ClusterSingletonManager [sourceThread=auth-impl-application-akka.actor.default-dispat  while locating biz.sfs.m2m.impl.UserServiceImpl
cher-2, akkaTimestamp=15:10:54.329UTC, akkaSource=akka.tcp://auth-impl-app...@127.0.0.1:53459/user/cassandraOffsetStorePrep  at com.lightbend.lagom.javadsl.server.ServiceGuice

Support.bindServices(ServiceGuiceSupport.java:106) (via modules: com.google.inject.util.Modules$OverrideModule -> biz.sfs.m2m.impl.AuthModule)
  while locating com.lightbend.lagom.internal.javadsl.server.ResolvedServices
are-singleton, sourceActorSystem=auth-impl-application] - ClusterSingletonManager state change [Start -> Oldest]
    for the 1st parameter of com.lightbend.lagom.internal.javadsl.broker.kafka.JavadslRegisterTopicProducers.<init>(JavadslRegisterTopicProducers.scala:32)
16:10:54.371 [info] com.lightbend.lagom.internal.persistence.cluster.ClusterStartupTaskActor [sourceThread=auth-impl-application-akka.actor.default-dispatcher-21, akkaTimestamp=15:
10:54.342UTC, akkaSource=akka.tcp://auth-impl-app...@127.0.0.1:53459/us  at com.lightbend.lagom.internal.javadsl.broker.kafka.KafkaBrokerModule.configure(KafkaBrokerModule.sca
Reply all
Reply to author
Forward
0 new messages