Help with exception with Slick JDBC connector for MS SQL Server

263 views
Skip to first unread message

indusbull

unread,
Nov 15, 2017, 12:15:55 PM11/15/17
to Slick / ScalaQuery

I am trying Slick (JDBC) Connector tutorial to connect to MS SQL Server 2012 in my prototype Java Akka project. But I am having difficulties since last few days to connect to DB through JDBC. It keeps throwing below exception - Not sure what I am missing either in config or code. It is simple example. Firewall is open between the machine where the code is running to the database machine.


Exception:
java.sql.SQLTransientConnectionException: slick-sqlserver.db - Connection is not available, request timed out after 1001ms. at com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:548) at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:186) at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:145) at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:83) at slick.jdbc.hikaricp.HikariCPJdbcDataSource.createConnection(HikariCPJdbcDataSource.scala:14) at slick.jdbc.JdbcBackend$BaseSession.<init>(JdbcBackend.scala:438) at slick.jdbc.JdbcBackend$DatabaseDef.createSession(JdbcBackend.scala:46) at slick.jdbc.JdbcBackend$DatabaseDef.createSession(JdbcBackend.scala:37) at slick.basic.BasicBackend$DatabaseDef.acquireSession(BasicBackend.scala:216) at slick.basic.BasicBackend$DatabaseDef.acquireSession$(BasicBackend.scala:215) at slick.jdbc.JdbcBackend$DatabaseDef.acquireSession(JdbcBackend.scala:37) at slick.basic.BasicBackend$DatabaseDef$$anon$3.run(BasicBackend.scala:279) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)

application.config

slick-sqlserver {
 profile 
= "slick.jdbc.SQLServerProfile$"

 db {

     dataSourceClass = "slick.jdbc.DriverDataSource"

     properties = {

          driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver" 
          url 
= "jdbc:sqlserver://host:1433
;databaseName=dbname"

         user = "username" 
          password 
= "password" 
     
}
  
}
}

My Code

ActorSystem system = ActorSystem.create("testSystem");
final Materializer materializer = ActorMaterializer.create(system);
final SlickSession session = SlickSession.forConfig("slick-sqlserver");
final CompletionStage<Done> done =
  Slick
    .source(
      session,
      "SELECT 1",
      //(SlickRow row) -> new Object(row.nextInt(), row.nextString())
      (SlickRow row) -> new Object()
    )
    .log("user")
    .runWith(Sink.ignore(), materializer);

done.whenComplete((value, exception) -> {
  session.close();
  system.terminate();
});`

Jammie Jamloki

unread,
Feb 7, 2018, 2:44:21 AM2/7/18
to Slick / ScalaQuery
Even I am getting the same error for my db2.  If I use basic JDBC with the same db2 information. It is able to connect.

Please help.

Jammie Jamloki

unread,
Feb 12, 2018, 11:51:42 AM2/12/18
to Slick / ScalaQuery
Hi Just want to be specific about my issue here.

I am also following Slick (JDBC) Connector tutorial to connect to DB2 in my prototype Java Akka project.

Here is my code snippet :

final ActorSystem system = ActorSystem.create();

    final Materializer materializer = ActorMaterializer.create(system);

    final SlickSession session = SlickSession.forConfig("slick-db2");

    system.registerOnTermination(session::close);

    final CompletionStage<Done> done =

          Slick

            .source(

              session,

              "SELECT ID, NAME FROM SJAMLOKI.TEST",

              (SlickRow row) -> new User(row.nextInt(), row.nextString())

            )

            .log("user")

            .runWith(Sink.ignore(), materializer);


        done.whenComplete((value, exception) -> {

        session.close();

          system.terminate();

        });


Here is the content of my application.conf

# Load using SlickSession.forConfig("slick-db2")

slick-db2 {

  profile = "slick.jdbc.DB2Profile$"

  db {

    dataSourceClass = "slick.jdbc.DriverDataSource"

    properties = {

      driver = "com.ibm.db2.jcc.DB2Driver"

      url = "jdbc:db2://xxxxx.xxxxx.xxx.com:51000/xxxx"

      user = "xxxxxx"

      password = "xxxxxx"

     

    }

  }

}


I am able to connect to this database via db2 command prompt from the box where I am running the application. Also sample JDBC application also is able to get connection:

Here is the exception I am getting when I run the above application :

[ERROR] [02/12/2018 22:01:13.272] [default-akka.actor.default-dispatcher-6] [akka.stream.Log(akka://default/user/StreamSupervisor-0)] [user] Upstream failed.

java.sql.SQLTransientConnectionException: slick-db2.db - Connection is not available, request timed out after 1006ms.

at com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:548)

at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:186)

at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:145)

at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:83)

at slick.jdbc.hikaricp.HikariCPJdbcDataSource.createConnection(HikariCPJdbcDataSource.scala:14)

at slick.jdbc.JdbcBackend$BaseSession.<init>(JdbcBackend.scala:438)

at slick.jdbc.JdbcBackend$DatabaseDef.createSession(JdbcBackend.scala:46)

at slick.jdbc.JdbcBackend$DatabaseDef.createSession(JdbcBackend.scala:37)

at slick.basic.BasicBackend$DatabaseDef.acquireSession(BasicBackend.scala:216)

at slick.basic.BasicBackend$DatabaseDef.acquireSession$(BasicBackend.scala:215)

at slick.jdbc.JdbcBackend$DatabaseDef.acquireSession(JdbcBackend.scala:37)

at slick.basic.BasicBackend$DatabaseDef$$anon$3.run(BasicBackend.scala:279)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

at java.lang.Thread.run(Thread.java:745)


Regards

Shailesh

Reply all
Reply to author
Forward
0 new messages