akka / alpakka

Alpakka is a Reactive Enterprise Integration library for Java and Scala, based on Reactive Streams and Akka.
https://doc.akka.io/libraries/alpakka/current/
Other
1.26k stars 643 forks source link

Slick/JDBC create SlickSession from Database and Profile. #1509

Closed Kreinoee closed 4 years ago

Kreinoee commented 5 years ago

Short description

It should be possible to create a SlickSession, from a Database object and a Profile object.

Details

A SlickSession is basically just a wrapper arround a Database and a Profile, but you ironically, you cannot create it, if these two objects are your starting point. Currently its only possiby to create a SlickSession from a Config or a DatabaseConfig.

I have a situation, where I use another Library, that supplies a Database object to me, for using in unit tests. So my problem is, that I have the Database object, and now what Profile to use with it, and therefore have the two things that makes up a SlickSession, but I have no easy way of actually creating the needed SlickSession instance.

I would suggest creating an extra forDatabaseAndProfile factory method, to SlickSessions companion object. I have created a Local fork to test it out, and it works fine, so I can provide it as a pull request on the other side of the weekend.

ennru commented 5 years ago

Yes, this sounds useful (even the forConfig hasn't been around too long). It would be great to get in your PR for this.

Kreinoee commented 5 years ago

Sorry for the delay, but gut stuck on other projects.

I may need some help here. I have made a fix, that works for me now. However for being able to build alpakka at all, I had to remove a lot of stuff from the build files. As you contributions policies require, I would like add some documentation for this new way of creating a SlickSession. However when i try to run docs/previewSite sbt task, I get a lot of errors like:

error] Failed to resolve [akka.stream.alpakka.sqs.SqsAckResultEntry] because property [scaladoc.akka.stream.alpakka.base_url] contains an invalid URL [//] at /home/anders/cloudSolution/projects/alpakka/docs/src/main/paradox/sqs.md:292
[error] `SqsAckFlow.grouped` batches actions on their type and forwards a @scaladoc[`SqsAckResultEntry`](akka.stream.alpakka.sqs.SqsAckResultEntry) 

This could very well be caused by all the stuff that I have deleted in the build file, but if I revert the changes in the build files, or just try on a fresh clone of alpakka, I cannot even start sbt, due to this error:

/tmp/alpakka/ sbt
OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=2G; support was removed in 8.0
[info] Loading global plugins from /home/anders/.sbt/1.0/plugins
[info] Loading settings for project alpakka-build from plugins.sbt ...
[info] Loading project definition from /tmp/alpakka/project
[info] Updating ProjectRef(uri("file:/tmp/alpakka/project/"), "alpakka-build")...
[warn]  module not found: com.typesafe#sbt-mima-plugin;0.3.0
[warn] ==== typesafe-ivy-releases: tried
[warn]   https://repo.typesafe.com/typesafe/ivy-releases/com.typesafe/sbt-mima-plugin/scala_2.12/sbt_1.0/0.3.0/ivys/ivy.xml
[warn] ==== sbt-plugin-releases: tried
[warn]   https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.typesafe/sbt-mima-plugin/scala_2.12/sbt_1.0/0.3.0/ivys/ivy.xml
[warn] ==== local: tried
[warn]   /home/anders/.ivy2/local/com.typesafe/sbt-mima-plugin/scala_2.12/sbt_1.0/0.3.0/ivys/ivy.xml
[warn] ==== public: tried
[warn]   https://repo1.maven.org/maven2/com/typesafe/sbt-mima-plugin_2.12_1.0/0.3.0/sbt-mima-plugin-0.3.0.pom
[warn] ==== local-preloaded-ivy: tried
[warn]   /home/anders/.sbt/preloaded/com.typesafe/sbt-mima-plugin/0.3.0/ivys/ivy.xml
[warn] ==== local-preloaded: tried
[warn]   file:////home/anders/.sbt/preloaded/com/typesafe/sbt-mima-plugin_2.12_1.0/0.3.0/sbt-mima-plugin-0.3.0.pom
[warn] ==== bintray-2m-sbt-plugins: tried
[warn]   https://dl.bintray.com/2m/sbt-plugins/com.typesafe/sbt-mima-plugin/scala_2.12/sbt_1.0/0.3.0/ivys/ivy.xml
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: com.typesafe#sbt-mima-plugin;0.3.0: not found
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn] 
[warn]  Note: Some unresolved dependencies have extra attributes.  Check that these dependencies exist with the requested attributes.
[warn]          com.typesafe:sbt-mima-plugin:0.3.0 (scalaVersion=2.12, sbtVersion=1.0)
[warn] 
[warn]  Note: Unresolved dependencies path:
[warn]          com.typesafe:sbt-mima-plugin:0.3.0 (scalaVersion=2.12, sbtVersion=1.0) (/tmp/alpakka/project/plugins.sbt#L10-11)
[warn]            +- default:alpakka-build:0.1.0-SNAPSHOT (scalaVersion=2.12, sbtVersion=1.0)
[error] sbt.librarymanagement.ResolveException: unresolved dependency: com.typesafe#sbt-mima-plugin;0.3.0: not found
[error]         at sbt.internal.librarymanagement.IvyActions$.resolveAndRetrieve(IvyActions.scala:332)
[error]         at sbt.internal.librarymanagement.IvyActions$.$anonfun$updateEither$1(IvyActions.scala:208)
[error]         at sbt.internal.librarymanagement.IvySbt$Module.$anonfun$withModule$1(Ivy.scala:239)
[error]         at sbt.internal.librarymanagement.IvySbt.$anonfun$withIvy$1(Ivy.scala:204)
[error]         at sbt.internal.librarymanagement.IvySbt.sbt$internal$librarymanagement$IvySbt$$action$1(Ivy.scala:70)
[error]         at sbt.internal.librarymanagement.IvySbt$$anon$3.call(Ivy.scala:77)
[error]         at xsbt.boot.Locks$GlobalLock.withChannel$1(Locks.scala:95)
[error]         at xsbt.boot.Locks$GlobalLock.xsbt$boot$Locks$GlobalLock$$withChannelRetries$1(Locks.scala:80)
[error]         at xsbt.boot.Locks$GlobalLock$$anonfun$withFileLock$1.apply(Locks.scala:99)
[error]         at xsbt.boot.Using$.withResource(Using.scala:10)
[error]         at xsbt.boot.Using$.apply(Using.scala:9)
[error]         at xsbt.boot.Locks$GlobalLock.ignoringDeadlockAvoided(Locks.scala:60)
[error]         at xsbt.boot.Locks$GlobalLock.withLock(Locks.scala:50)
[error]         at xsbt.boot.Locks$.apply0(Locks.scala:31)
[error]         at xsbt.boot.Locks$.apply(Locks.scala:28)
[error]         at sbt.internal.librarymanagement.IvySbt.withDefaultLogger(Ivy.scala:77)
[error]         at sbt.internal.librarymanagement.IvySbt.withIvy(Ivy.scala:199)
[error]         at sbt.internal.librarymanagement.IvySbt.withIvy(Ivy.scala:196)
[error]         at sbt.internal.librarymanagement.IvySbt$Module.withModule(Ivy.scala:238)
[error]         at sbt.internal.librarymanagement.IvyActions$.updateEither(IvyActions.scala:193)
[error]         at sbt.librarymanagement.ivy.IvyDependencyResolution.update(IvyDependencyResolution.scala:20)
[error]         at sbt.librarymanagement.DependencyResolution.update(DependencyResolution.scala:56)
[error]         at sbt.internal.LibraryManagement$.resolve$1(LibraryManagement.scala:45)
[error]         at sbt.internal.LibraryManagement$.$anonfun$cachedUpdate$12(LibraryManagement.scala:93)
[error]         at sbt.util.Tracked$.$anonfun$lastOutput$1(Tracked.scala:68)
[error]         at sbt.internal.LibraryManagement$.$anonfun$cachedUpdate$19(LibraryManagement.scala:106)
[error]         at scala.util.control.Exception$Catch.apply(Exception.scala:224)
[error]         at sbt.internal.LibraryManagement$.$anonfun$cachedUpdate$11(LibraryManagement.scala:106)
[error]         at sbt.internal.LibraryManagement$.$anonfun$cachedUpdate$11$adapted(LibraryManagement.scala:89)
[error]         at sbt.util.Tracked$.$anonfun$inputChanged$1(Tracked.scala:149)
[error]         at sbt.internal.LibraryManagement$.cachedUpdate(LibraryManagement.scala:120)
[error]         at sbt.Classpaths$.$anonfun$updateTask$5(Defaults.scala:2561)
[error]         at scala.Function1.$anonfun$compose$1(Function1.scala:44)
[error]         at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:40)
[error]         at sbt.std.Transform$$anon$4.work(System.scala:67)
[error]         at sbt.Execute.$anonfun$submit$2(Execute.scala:269)
[error]         at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:16)
[error]         at sbt.Execute.work(Execute.scala:278)
[error]         at sbt.Execute.$anonfun$submit$1(Execute.scala:269)
[error]         at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:178)
[error]         at sbt.CompletionService$$anon$2.call(CompletionService.scala:37)
[error]         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error]         at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[error]         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error]         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[error]         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[error]         at java.lang.Thread.run(Thread.java:748)
[error] (update) sbt.librarymanagement.ResolveException: unresolved dependency: com.typesafe#sbt-mima-plugin;0.3.0: not found
Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore? 

Is there some global repo there should be set in sbt or something?

ennru commented 5 years ago

There is a problem with downloading the Mima plugin. Try this workaround https://github.com/lightbend/mima/issues/422#issuecomment-544861810

ennru commented 5 years ago

You know what? It is fixed now. No need to work around it anymore.

ennru commented 4 years ago

This was implemented with #1996.