Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion buildSrc/src/main/kotlin/common-library.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import com.vanniktech.maven.publish.JavadocJar
import com.vanniktech.maven.publish.KotlinJvm
import gradle.kotlin.dsl.accessors._94cffe4e74c4f6a3b1c88c3e0c336ef5.mavenPublishing
import org.gradle.api.JavaVersion.VERSION_17
import org.gradle.api.file.DuplicatesStrategy.WARN

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import com.caplin.datasource.messaging.json.JacksonJsonHandler
import com.caplin.integration.datasourcex.spring.DataSourceConfigurationProperties
import com.caplin.integration.datasourcex.util.SimpleDataSourceConfig.Discovery
import com.caplin.integration.datasourcex.util.SimpleDataSourceConfig.Peer
import com.caplin.integration.datasourcex.util.SimpleDatasourceFactory.createDataSource
import com.caplin.integration.datasourcex.util.SimpleDataSourceFactory.createDataSource
import com.caplin.integration.datasourcex.util.getLogger
import com.fasterxml.jackson.databind.ObjectMapper
import java.nio.file.Paths
Expand Down
8 changes: 5 additions & 3 deletions util/api/datasourcex-util.api
Original file line number Diff line number Diff line change
Expand Up @@ -133,9 +133,11 @@ public final class com/caplin/integration/datasourcex/util/SimpleDataSourceConfi
public fun toString ()Ljava/lang/String;
}

public final class com/caplin/integration/datasourcex/util/SimpleDatasourceFactory {
public static final field INSTANCE Lcom/caplin/integration/datasourcex/util/SimpleDatasourceFactory;
public static final fun createDataSource (Lcom/caplin/integration/datasourcex/util/SimpleDataSourceConfig;)Lcom/caplin/datasource/DataSource;
public final class com/caplin/integration/datasourcex/util/SimpleDataSourceFactory {
public static final field INSTANCE Lcom/caplin/integration/datasourcex/util/SimpleDataSourceFactory;
public static final fun createDataSource (Lcom/caplin/integration/datasourcex/util/SimpleDataSourceConfig;Lcom/fasterxml/jackson/databind/ObjectMapper;)Lcom/caplin/datasource/DataSource;
public static synthetic fun createDataSource$default (Lcom/caplin/integration/datasourcex/util/SimpleDataSourceConfig;Lcom/fasterxml/jackson/databind/ObjectMapper;ILjava/lang/Object;)Lcom/caplin/datasource/DataSource;
public final fun getDefaultObjectMapper ()Lcom/fasterxml/jackson/databind/ObjectMapper;
}

public final class com/caplin/integration/datasourcex/util/TimeoutKt {
Expand Down
3 changes: 3 additions & 0 deletions util/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ dependencies {
api("org.slf4j:slf4j-api")
api("org.jetbrains.kotlinx:kotlinx-coroutines-core")
api("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm")
api("com.fasterxml.jackson.core:jackson-core")
implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")

implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
implementation(libs.kotlin.collections.immutable)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,24 @@
package com.caplin.integration.datasourcex.util

import com.caplin.datasource.DataSource
import com.caplin.datasource.messaging.json.JacksonJsonHandler
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_AS_TIMESTAMPS
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import java.nio.file.Files
import java.util.logging.Logger

object SimpleDatasourceFactory {
object SimpleDataSourceFactory {

private const val MAX_PATH_LENGTH = 32

private val logger = getLogger<SimpleDatasourceFactory>()
private val logger = getLogger<SimpleDataSourceFactory>()

val defaultObjectMapper: ObjectMapper =
jacksonObjectMapper()
.configure(WRITE_DATES_AS_TIMESTAMPS, false)
.registerModule(JavaTimeModule())

/**
* Creates a data source based on the given simple configuration.
Expand All @@ -17,13 +27,17 @@ object SimpleDatasourceFactory {
* @return The created data source.
*/
@JvmStatic
fun createDataSource(simpleConfig: SimpleDataSourceConfig): DataSource {
fun createDataSource(
simpleConfig: SimpleDataSourceConfig,
objectMapper: ObjectMapper = defaultObjectMapper
): DataSource {
val logPath =
simpleConfig.logDirectory
?: run {
val tmpLogPath =
Files.createTempDirectory(
simpleConfig.name.replace("\\s".toRegex(), "").take(MAX_PATH_LENGTH))
simpleConfig.name.replace("\\s".toRegex(), "").take(MAX_PATH_LENGTH),
)
logger.warn {
"log file path is not specified, writing datasource logs to $tmpLogPath"
}
Expand All @@ -50,24 +64,24 @@ object SimpleDatasourceFactory {
|datasrc-dev-override ${simpleConfig.devOverride}
|discovery-require-service ${simpleConfig.requiredServices.joinToString(" ")}
${
simpleConfig.incoming?.let {
"""
simpleConfig.incoming?.let {
"""
|${if (it.isWebsocket) "datasrc-ws-port" else "datasrc-port"} ${it.port}
"""
}.orEmpty()
}
}.orEmpty()
}
${
simpleConfig.outgoing.joinToString("\n") {
"""
simpleConfig.outgoing.joinToString("\n") {
"""
|add-peer
| addr ${it.hostname}
| port ${it.port}
| local-type active|contrib
| websocket ${it.isWebsocket}
|end-peer
"""
}
}
}
}
"""
}

Expand Down Expand Up @@ -99,5 +113,12 @@ object SimpleDatasourceFactory {
.trimMargin()

return DataSource.fromConfigString(config, Logger.getLogger(DataSource::class.qualifiedName))
.apply {
extraConfiguration.jsonHandler =
JacksonJsonHandler(
Logger.getLogger(JacksonJsonHandler::class.qualifiedName),
objectMapper,
)
}
}
}
Loading