I'm using Ktor with KMongo. I have a problem when I start the server in localhost and I make a simple 'get' request. The references aren't very clear and complete - https://litote.org/kmongo/ - regarding the configuration of the database on the server. Does anyone know how to solve the problem? I think it's a simple configuration problem, but I do not know how to solve it. I'm not using Spring.
This is the code for the connection to the KmongoDB :
package com.progettoetere.Routes
import io.ktor.application.
import io.ktor.response.respondText
import io.ktor.routing.*
import kotlinx.coroutines.runBlocking
import org.litote.kmongo.eq
import org.litote.kmongo.reactivestreams.*
import org.litote.kmongo.coroutine.*
fun Route.survey(){
//ramo per i survey
route("/survey"){
//ritorno tutti i questionari
get("/"){
val client = KMongo.createClient().coroutine //client whit Kotli coroutines
val database = client.getDatabase("test") //get a test database
val colSurvey = database.getCollection<Survey>() //get the collection of surveys
//start coroutine
runBlocking {
//get one survey for DEBUG with id == 1023
val dato: Survey? = colSurvey.findOne(Survey::id_survey eq 1023)
//check the survey
if (dato != null) {
call.respondText { "The survey is present" }
} else {
call.respondText { "The survey is not present" }
}
}
}
The error occurs when I create the client instance :
val client = KMongo.createClient().coroutine
This is the stack error :
2019-03-11 20:58:22.334 [main] INFO Application - Responding at http://0.0.0.0:8080
2019-03-11 20:58:27.633 [nettyCallPool-4-1] INFO org.mongodb.driver.cluster - Cluster created with settings {hosts=[localhost:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
2019-03-11 20:58:27.655 [nettyCallPool-4-1] DEBUG org.mongodb.driver.cluster - Updating cluster description to {type=UNKNOWN, servers=[{address=localhost:27017, type=UNKNOWN, state=CONNECTING}]
2019-03-11 20:58:27.666 [cluster-ClusterId{value='5c86bde3cad88d4f128ae82c', description='null'}-localhost:27017] DEBUG org.mongodb.driver.connection - Closing connection connectionId{localValue:1}
2019-03-11 20:58:27.668 [cluster-ClusterId{value='5c86bde3cad88d4f128ae82c', description='null'}-localhost:27017] INFO org.mongodb.driver.cluster - Exception in monitor thread while connecting to server localhost:27017
com.mongodb.MongoSocketOpenException: Exception opening socket
at com.mongodb.internal.connection.AsynchronousSocketChannelStream$OpenCompletionHandler.failed(AsynchronousSocketChannelStream.java:117)
at sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:128)
at sun.nio.ch.Invoker$2.run(Invoker.java:218)
at sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.net.ConnectException: Connessione rifiutata
at sun.nio.ch.UnixAsynchronousSocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.UnixAsynchronousSocketChannelImpl.finishConnect(UnixAsynchronousSocketChannelImpl.java:252)
at sun.nio.ch.UnixAsynchronousSocketChannelImpl.finish(UnixAsynchronousSocketChannelImpl.java:198)
at sun.nio.ch.UnixAsynchronousSocketChannelImpl.onEvent(UnixAsynchronousSocketChannelImpl.java:213)
at sun.nio.ch.EPollPort$EventHandlerTask.run(EPollPort.java:293)
Problem solved. I was convinced that the Mongo server started with the Ktor server, actually I had to manually start the Mongo server. Once the Mongo server was started from the terminal, the Ktor server was able to communicate with mongo during browser get or curl requests.