CORDA-1309 Add support for jarDirs config (#705)

This commit is contained in:
Tudor Malene 2018-04-10 11:24:35 +01:00 committed by GitHub
parent 6761824ba7
commit 4ed917436a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 9 deletions

View File

@ -14,7 +14,6 @@ import com.zaxxer.hikari.HikariConfig
import com.zaxxer.hikari.HikariDataSource import com.zaxxer.hikari.HikariDataSource
import com.zaxxer.hikari.util.PropertyElf import com.zaxxer.hikari.util.PropertyElf
import net.corda.core.internal.declaredField import net.corda.core.internal.declaredField
import net.corda.core.internal.div
import org.h2.engine.Database import org.h2.engine.Database
import org.h2.engine.Engine import org.h2.engine.Engine
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
@ -58,8 +57,8 @@ object DataSourceFactory {
} }
} }
fun createDatasourceFromDriverJars(dataSourceProperties: Properties, baseClassLoader: ClassLoader, driverJarsPath: Path): DataSource { fun createDatasourceFromDriverJarFolders(dataSourceProperties: Properties, baseClassLoader: ClassLoader, driverJarsPath: List<Path>): DataSource {
return URLClassLoader(Files.newDirectoryStream(driverJarsPath, "*.jar").map { it.toUri().toURL() }.toTypedArray(), baseClassLoader).use { driversClassLoader -> return URLClassLoader(driverJarsPath.flatMap { Files.newDirectoryStream(it, "*.jar") }.map { it.toUri().toURL() }.toTypedArray(), baseClassLoader).use { driversClassLoader ->
val dataSourceClassName = dataSourceProperties["dataSourceClassName"] as String? val dataSourceClassName = dataSourceProperties["dataSourceClassName"] as String?
val dataSourceClass = driversClassLoader.loadClass(dataSourceClassName) val dataSourceClass = driversClassLoader.loadClass(dataSourceClassName)
val dataSourceInstance = dataSourceClass.newInstance() as DataSource val dataSourceInstance = dataSourceClass.newInstance() as DataSource
@ -75,8 +74,8 @@ object DataSourceFactory {
} }
} }
fun createHikariDatasourceFromDriverJars(dataSourceProperties: Properties, baseClassLoader: ClassLoader, driverJarsPath: Path): DataSource { fun createHikariDatasourceFromDriverJarFolders(dataSourceProperties: Properties, baseClassLoader: ClassLoader, driverJarsPath: List<Path>): DataSource {
val dataSource = createDatasourceFromDriverJars(dataSourceProperties, baseClassLoader, driverJarsPath) val dataSource = createDatasourceFromDriverJarFolders(dataSourceProperties, baseClassLoader, driverJarsPath)
val cfg = HikariConfig(dataSourceProperties) val cfg = HikariConfig(dataSourceProperties)
cfg.dataSource = dataSource cfg.dataSource = dataSource
return HikariDataSource(cfg) return HikariDataSource(cfg)

View File

@ -22,7 +22,7 @@ import net.corda.core.internal.MigrationHelpers
import net.corda.core.internal.copyTo import net.corda.core.internal.copyTo
import net.corda.core.internal.div import net.corda.core.internal.div
import net.corda.core.schemas.MappedSchema import net.corda.core.schemas.MappedSchema
import net.corda.node.internal.DataSourceFactory.createDatasourceFromDriverJars import net.corda.node.internal.DataSourceFactory.createDatasourceFromDriverJarFolders
import net.corda.node.internal.cordapp.CordappLoader import net.corda.node.internal.cordapp.CordappLoader
import net.corda.node.services.config.ConfigHelper import net.corda.node.services.config.ConfigHelper
import net.corda.node.services.config.configOf import net.corda.node.services.config.configOf
@ -108,7 +108,7 @@ fun main(args: Array<String>) {
} }
} }
data class Configuration(val dataSourceProperties: Properties, val database: DatabaseConfig) data class Configuration(val dataSourceProperties: Properties, val database: DatabaseConfig, val jarDirs: List<String> = emptyList())
private fun runCommand(options: OptionSet, parser: OptionParser) { private fun runCommand(options: OptionSet, parser: OptionParser) {
@ -222,8 +222,8 @@ private fun getMigrationOutput(baseDirectory: Path, options: OptionSet): Writer
} }
private fun runWithDataSource(config: Configuration, baseDirectory: Path, classLoader: ClassLoader, withDatasource: (DataSource) -> Unit) { private fun runWithDataSource(config: Configuration, baseDirectory: Path, classLoader: ClassLoader, withDatasource: (DataSource) -> Unit) {
val driversFolder = baseDirectory / "drivers" val driversFolder = (baseDirectory / "drivers")
return withDatasource(createDatasourceFromDriverJars(config.dataSourceProperties, classLoader, driversFolder)) return withDatasource(createDatasourceFromDriverJarFolders(config.dataSourceProperties, classLoader, listOf(driversFolder) + config.jarDirs.map { Paths.get(it) }))
} }
private fun errorAndExit(message: String?) { private fun errorAndExit(message: String?) {