I'm using Kotlin Generics to write the records to MongoDB.
I followed the answer
I wrote below class:
import com.mongodb.ConnectionString
import com.mongodb.MongoClientSettings
import com.mongodb.connection.ConnectionPoolSettings
import kotlinx.coroutines.runBlocking
import org.litote.kmongo.reactivestreams.*
import org.litote.kmongo.coroutine.*
import java.io.Serializable
import java.util.concurrent.TimeUnit
class MongoManager<TDataClass: Serializable>(
private val clazz: Class<TDataClass>
) {
private val client: CoroutineClient = KMongo.createClient(
MongoClientSettings.builder()
.applyConnectionString(ConnectionString("mongodb://localhost:27017"))
.applyToConnectionPoolSettings {
ConnectionPoolSettings.builder().maxConnectionIdleTime(60000, TimeUnit.MILLISECONDS)
.minSize(5).maxSize(40)
}
.build()).coroutine
private val database = client.getDatabase("local")
private val bbMembershipData: CoroutineCollection<TDataClass>;
init {
bbMembershipData = getCollection(this.clazz) //Throwing error: Cannot use 'T' as reified type parameter. Use a class instead.
}
private fun <T: Serializable> getCollection(
clazz: Class<T>
): CoroutineCollection<T> {
return database.getCollection<T>()
}
fun write(
data: TDataClass
) {
runBlocking {
bbMembershipData.insertOne(data)
}
}
fun writeMany(
data: List<TDataClass>
) {
runBlocking {
bbMembershipData.insertMany(data)
}
}
}
Not sure how to resolve the issue.