mirror of
https://github.com/corda/corda.git
synced 2024-12-21 22:07:55 +00:00
DemoBench: symlink or copy apps into the plugins folder for the Explorer, as a temp deserialisation hack.
This commit is contained in:
parent
a8172e607e
commit
b6fa7095e3
@ -1,10 +1,16 @@
|
|||||||
package net.corda.demobench.explorer
|
package net.corda.demobench.explorer
|
||||||
|
|
||||||
|
import net.corda.core.createDirectories
|
||||||
|
import net.corda.core.div
|
||||||
|
import net.corda.core.list
|
||||||
import net.corda.core.utilities.loggerFor
|
import net.corda.core.utilities.loggerFor
|
||||||
|
import net.corda.demobench.model.JVMConfig
|
||||||
import net.corda.demobench.model.NodeConfig
|
import net.corda.demobench.model.NodeConfig
|
||||||
import net.corda.demobench.model.forceDirectory
|
import net.corda.demobench.model.forceDirectory
|
||||||
import net.corda.demobench.readErrorLines
|
import net.corda.demobench.readErrorLines
|
||||||
|
import tornadofx.*
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
|
import java.nio.file.Files
|
||||||
import java.util.concurrent.Executors
|
import java.util.concurrent.Executors
|
||||||
|
|
||||||
class Explorer internal constructor(private val explorerController: ExplorerController) : AutoCloseable {
|
class Explorer internal constructor(private val explorerController: ExplorerController) : AutoCloseable {
|
||||||
@ -26,6 +32,8 @@ class Explorer internal constructor(private val explorerController: ExplorerCont
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
installApps(config)
|
||||||
|
|
||||||
val user = config.users.elementAt(0)
|
val user = config.users.elementAt(0)
|
||||||
val p = explorerController.process(
|
val p = explorerController.process(
|
||||||
"--host=localhost",
|
"--host=localhost",
|
||||||
@ -62,6 +70,33 @@ class Explorer internal constructor(private val explorerController: ExplorerCont
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun installApps(config: NodeConfig) {
|
||||||
|
// Make sure that the explorer has cordapps on its class path. This is only necessary because currently apps
|
||||||
|
// require the original class files to deserialise states: Kryo serialisation doesn't let us write generic
|
||||||
|
// tools that work with serialised data structures. But the AMQP serialisation revamp will fix this by
|
||||||
|
// integrating the class carpenter, so, we can eventually get rid of this function.
|
||||||
|
//
|
||||||
|
// Note: does not copy dependencies because we should soon be making all apps fat jars and dependencies implicit.
|
||||||
|
//
|
||||||
|
// TODO: Remove this code when serialisation has been upgraded.
|
||||||
|
val pluginsDir = config.explorerDir / "plugins"
|
||||||
|
pluginsDir.createDirectories()
|
||||||
|
config.pluginDir.list {
|
||||||
|
it.forEachOrdered { path ->
|
||||||
|
val destPath = pluginsDir / path.fileName.toString()
|
||||||
|
try {
|
||||||
|
// Try making a symlink to make things faster and use less disk space.
|
||||||
|
Files.createSymbolicLink(destPath, path)
|
||||||
|
} catch(e: UnsupportedOperationException) {
|
||||||
|
// OS doesn't support symbolic links?
|
||||||
|
Files.copy(path, destPath)
|
||||||
|
} catch(e: FileAlreadyExistsException) {
|
||||||
|
// OK, don't care ...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun close() {
|
override fun close() {
|
||||||
executor.shutdown()
|
executor.shutdown()
|
||||||
process?.destroy()
|
process?.destroy()
|
||||||
@ -76,3 +111,16 @@ class Explorer internal constructor(private val explorerController: ExplorerCont
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ExplorerController : Controller() {
|
||||||
|
private val jvm by inject<JVMConfig>()
|
||||||
|
private val explorerPath = jvm.applicationDir.resolve("explorer").resolve("node-explorer.jar")
|
||||||
|
|
||||||
|
init {
|
||||||
|
log.info("Explorer JAR: $explorerPath")
|
||||||
|
}
|
||||||
|
|
||||||
|
internal fun process(vararg args: String) = jvm.processFor(explorerPath, *args)
|
||||||
|
|
||||||
|
fun explorer() = Explorer(this)
|
||||||
|
}
|
@ -1,19 +0,0 @@
|
|||||||
package net.corda.demobench.explorer
|
|
||||||
|
|
||||||
import net.corda.demobench.model.JVMConfig
|
|
||||||
import tornadofx.*
|
|
||||||
|
|
||||||
class ExplorerController : Controller() {
|
|
||||||
|
|
||||||
private val jvm by inject<JVMConfig>()
|
|
||||||
private val explorerPath = jvm.applicationDir.resolve("explorer").resolve("node-explorer.jar")
|
|
||||||
|
|
||||||
init {
|
|
||||||
log.info("Explorer JAR: $explorerPath")
|
|
||||||
}
|
|
||||||
|
|
||||||
internal fun process(vararg args: String) = jvm.processFor(explorerPath, *args)
|
|
||||||
|
|
||||||
fun explorer() = Explorer(this)
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user