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"
;databaseName=dbname"
url = "jdbc:sqlserver://host:1433
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();
});`
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"
}
}
}
[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