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.util.PropertyElf
import net.corda.core.internal.declaredField
import net.corda.core.internal.div
import org.h2.engine.Database
import org.h2.engine.Engine
import org.slf4j.LoggerFactory
@ -58,8 +57,8 @@ object DataSourceFactory {
}
}
fun createDatasourceFromDriverJars(dataSourceProperties: Properties, baseClassLoader: ClassLoader, driverJarsPath: Path): DataSource {
return URLClassLoader(Files.newDirectoryStream(driverJarsPath, "*.jar").map { it.toUri().toURL() }.toTypedArray(), baseClassLoader).use { driversClassLoader ->
fun createDatasourceFromDriverJarFolders(dataSourceProperties: Properties, baseClassLoader: ClassLoader, driverJarsPath: List<Path>): DataSource {
return URLClassLoader(driverJarsPath.flatMap { Files.newDirectoryStream(it, "*.jar") }.map { it.toUri().toURL() }.toTypedArray(), baseClassLoader).use { driversClassLoader ->
val dataSourceClassName = dataSourceProperties["dataSourceClassName"] as String?
val dataSourceClass = driversClassLoader.loadClass(dataSourceClassName)
val dataSourceInstance = dataSourceClass.newInstance() as DataSource
@ -75,8 +74,8 @@ object DataSourceFactory {
}
}
fun createHikariDatasourceFromDriverJars(dataSourceProperties: Properties, baseClassLoader: ClassLoader, driverJarsPath: Path): DataSource {
val dataSource = createDatasourceFromDriverJars(dataSourceProperties, baseClassLoader, driverJarsPath)
fun createHikariDatasourceFromDriverJarFolders(dataSourceProperties: Properties, baseClassLoader: ClassLoader, driverJarsPath: List<Path>): DataSource {
val dataSource = createDatasourceFromDriverJarFolders(dataSourceProperties, baseClassLoader, driverJarsPath)
val cfg = HikariConfig(dataSourceProperties)
cfg.dataSource = dataSource
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.div
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.services.config.ConfigHelper
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) {
@ -222,8 +222,8 @@ private fun getMigrationOutput(baseDirectory: Path, options: OptionSet): Writer
}
private fun runWithDataSource(config: Configuration, baseDirectory: Path, classLoader: ClassLoader, withDatasource: (DataSource) -> Unit) {
val driversFolder = baseDirectory / "drivers"
return withDatasource(createDatasourceFromDriverJars(config.dataSourceProperties, classLoader, driversFolder))
val driversFolder = (baseDirectory / "drivers")
return withDatasource(createDatasourceFromDriverJarFolders(config.dataSourceProperties, classLoader, listOf(driversFolder) + config.jarDirs.map { Paths.get(it) }))
}
private fun errorAndExit(message: String?) {