From 803ce15b325a703a714e15740f9860cd76433d79 Mon Sep 17 00:00:00 2001 From: Andrzej Grzesik Date: Wed, 7 Mar 2018 14:12:15 +0100 Subject: [PATCH 1/9] Corda-1155 - Jolokia logging via slf4j (#2753) * Jolokia logging through slf4j * review remarks --- config/dev/log4j2.xml | 4 ++ node/build.gradle | 3 +- .../net/corda/node/JolokiaSlf4Adapter.kt | 40 +++++++++++++++++++ .../src/main/resources/log4j2-test.xml | 4 ++ .../net/corda/webserver/JolokiaSlf4Adapter.kt | 40 +++++++++++++++++++ 5 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 node/src/main/kotlin/net/corda/node/JolokiaSlf4Adapter.kt create mode 100644 webserver/src/main/kotlin/net/corda/webserver/JolokiaSlf4Adapter.kt diff --git a/config/dev/log4j2.xml b/config/dev/log4j2.xml index 0ad0431e4d..f0ec5b615d 100644 --- a/config/dev/log4j2.xml +++ b/config/dev/log4j2.xml @@ -60,5 +60,9 @@ + + + + diff --git a/node/build.gradle b/node/build.gradle index 32fd8b6a10..a26e5669c2 100644 --- a/node/build.gradle +++ b/node/build.gradle @@ -175,7 +175,8 @@ dependencies { testCompile "org.glassfish.jersey.containers:jersey-container-servlet-core:${jersey_version}" testCompile "org.glassfish.jersey.containers:jersey-container-jetty-http:${jersey_version}" - runtime "org.jolokia:jolokia-jvm:${jolokia_version}:agent" + // Jolokia JVM monitoring agent + compile "org.jolokia:jolokia-jvm:${jolokia_version}:agent" } task integrationTest(type: Test) { diff --git a/node/src/main/kotlin/net/corda/node/JolokiaSlf4Adapter.kt b/node/src/main/kotlin/net/corda/node/JolokiaSlf4Adapter.kt new file mode 100644 index 0000000000..350d9c4fac --- /dev/null +++ b/node/src/main/kotlin/net/corda/node/JolokiaSlf4Adapter.kt @@ -0,0 +1,40 @@ +package net.corda.node + +import org.jolokia.util.LogHandler +import org.slf4j.Logger +import org.slf4j.LoggerFactory + +/** + * This also exists in webserver, because depends on jolokia + **/ +class JolokiaSlf4Adapter : LogHandler { + companion object { + val log: Logger = LoggerFactory.getLogger("org.jolokia") + } + + override fun error(message: String?, t: Throwable?) { + if (message != null) { + if (t != null) { + log.error(message, t) + } else { + log.error(message) + } + } else if (t != null) { + log.error("Exception without a comment", t) + } + } + + override fun debug(message: String?) { + if (message != null) { + log.debug(message) + } + } + + override fun info(message: String?) { + if (message != null) { + log.info(message) + } + } + + +} diff --git a/testing/test-common/src/main/resources/log4j2-test.xml b/testing/test-common/src/main/resources/log4j2-test.xml index 0cfee94d15..994cfc5e57 100644 --- a/testing/test-common/src/main/resources/log4j2-test.xml +++ b/testing/test-common/src/main/resources/log4j2-test.xml @@ -25,5 +25,9 @@ + + + + diff --git a/webserver/src/main/kotlin/net/corda/webserver/JolokiaSlf4Adapter.kt b/webserver/src/main/kotlin/net/corda/webserver/JolokiaSlf4Adapter.kt new file mode 100644 index 0000000000..5e54e0f98e --- /dev/null +++ b/webserver/src/main/kotlin/net/corda/webserver/JolokiaSlf4Adapter.kt @@ -0,0 +1,40 @@ +package net.corda.webserver + +import org.jolokia.util.LogHandler +import org.slf4j.Logger +import org.slf4j.LoggerFactory + +/** + * This also exists in node, because depends on jolokia + **/ +class JolokiaSlf4Adapter : LogHandler { + companion object { + val log: Logger = LoggerFactory.getLogger("org.jolokia") + } + + override fun error(message: String?, t: Throwable?) { + if (message != null) { + if (t != null) { + log.error(message, t) + } else { + log.error(message) + } + } else if (t != null) { + log.error("Exception without a comment", t) + } + } + + override fun debug(message: String?) { + if (message != null) { + log.debug(message) + } + } + + override fun info(message: String?) { + if (message != null) { + log.info(message) + } + } + + +} From ed3ba537f39accbe9151d741fdc5d153ec81e2c9 Mon Sep 17 00:00:00 2001 From: ags Date: Wed, 7 Mar 2018 14:35:15 +0000 Subject: [PATCH 2/9] Restoring Jolokia in webserver, to be able to redirect logger via Slf4j --- .../{JolokiaSlf4Adapter.kt => JolokiaSlf4jAdapter.kt} | 4 +--- webserver/build.gradle | 10 ++++++++++ .../{JolokiaSlf4Adapter.kt => JolokiaSlf4jAdapter.kt} | 6 ++---- webserver/src/main/resources/build.properties | 5 +++++ 4 files changed, 18 insertions(+), 7 deletions(-) rename node/src/main/kotlin/net/corda/node/{JolokiaSlf4Adapter.kt => JolokiaSlf4jAdapter.kt} (95%) rename webserver/src/main/kotlin/net/corda/webserver/{JolokiaSlf4Adapter.kt => JolokiaSlf4jAdapter.kt} (95%) create mode 100644 webserver/src/main/resources/build.properties diff --git a/node/src/main/kotlin/net/corda/node/JolokiaSlf4Adapter.kt b/node/src/main/kotlin/net/corda/node/JolokiaSlf4jAdapter.kt similarity index 95% rename from node/src/main/kotlin/net/corda/node/JolokiaSlf4Adapter.kt rename to node/src/main/kotlin/net/corda/node/JolokiaSlf4jAdapter.kt index 350d9c4fac..b96834f76a 100644 --- a/node/src/main/kotlin/net/corda/node/JolokiaSlf4Adapter.kt +++ b/node/src/main/kotlin/net/corda/node/JolokiaSlf4jAdapter.kt @@ -7,7 +7,7 @@ import org.slf4j.LoggerFactory /** * This also exists in webserver, because depends on jolokia **/ -class JolokiaSlf4Adapter : LogHandler { +class JolokiaSlf4jAdapter : LogHandler { companion object { val log: Logger = LoggerFactory.getLogger("org.jolokia") } @@ -35,6 +35,4 @@ class JolokiaSlf4Adapter : LogHandler { log.info(message) } } - - } diff --git a/webserver/build.gradle b/webserver/build.gradle index 3715cfaf67..b806d091dc 100644 --- a/webserver/build.gradle +++ b/webserver/build.gradle @@ -5,6 +5,13 @@ apply plugin: 'com.jfrog.artifactory' description 'Corda node web server' +buildscript { + def properties = new Properties() + file("$projectDir/src/main/resources/build.properties").withInputStream { properties.load(it) } + + ext.jolokia_version = properties.getProperty('jolokiaAgentVersion') +} + configurations { integrationTestCompile.extendsFrom testCompile integrationTestRuntime.extendsFrom testRuntime @@ -59,6 +66,9 @@ dependencies { // For rendering the index page. compile "org.jetbrains.kotlinx:kotlinx-html-jvm:0.6.3" + // for Jolokia logger + compile "org.jolokia:jolokia-war:$jolokia_version" + integrationTestCompile project(':node-driver') testCompile "junit:junit:$junit_version" } diff --git a/webserver/src/main/kotlin/net/corda/webserver/JolokiaSlf4Adapter.kt b/webserver/src/main/kotlin/net/corda/webserver/JolokiaSlf4jAdapter.kt similarity index 95% rename from webserver/src/main/kotlin/net/corda/webserver/JolokiaSlf4Adapter.kt rename to webserver/src/main/kotlin/net/corda/webserver/JolokiaSlf4jAdapter.kt index 5e54e0f98e..42091cac8c 100644 --- a/webserver/src/main/kotlin/net/corda/webserver/JolokiaSlf4Adapter.kt +++ b/webserver/src/main/kotlin/net/corda/webserver/JolokiaSlf4jAdapter.kt @@ -1,13 +1,13 @@ package net.corda.webserver -import org.jolokia.util.LogHandler import org.slf4j.Logger import org.slf4j.LoggerFactory +import org.jolokia.util.LogHandler /** * This also exists in node, because depends on jolokia **/ -class JolokiaSlf4Adapter : LogHandler { +class JolokiaSlf4jAdapter : LogHandler { companion object { val log: Logger = LoggerFactory.getLogger("org.jolokia") } @@ -35,6 +35,4 @@ class JolokiaSlf4Adapter : LogHandler { log.info(message) } } - - } diff --git a/webserver/src/main/resources/build.properties b/webserver/src/main/resources/build.properties new file mode 100644 index 0000000000..72577915e7 --- /dev/null +++ b/webserver/src/main/resources/build.properties @@ -0,0 +1,5 @@ +# Build constants exported as resource file to make them visible in Node program +# Note: sadly, due to present limitation of IntelliJ-IDEA in processing resource files, these constants cannot be +# imported from top-level 'constants.properties' file + +jolokiaAgentVersion=1.3.7 \ No newline at end of file From 3b3614c13b7b55d1d962710d125928e09f4053b5 Mon Sep 17 00:00:00 2001 From: ags Date: Wed, 7 Mar 2018 14:50:34 +0000 Subject: [PATCH 3/9] Removed a reference to a logger not present in tests --- testing/test-common/src/main/resources/log4j2-test.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/testing/test-common/src/main/resources/log4j2-test.xml b/testing/test-common/src/main/resources/log4j2-test.xml index 994cfc5e57..c0f86f2eea 100644 --- a/testing/test-common/src/main/resources/log4j2-test.xml +++ b/testing/test-common/src/main/resources/log4j2-test.xml @@ -27,7 +27,6 @@ - From 5d91531ee09c29584092c963eb3e05d65b55d77a Mon Sep 17 00:00:00 2001 From: ags Date: Wed, 7 Mar 2018 15:22:49 +0000 Subject: [PATCH 4/9] Webserver should not require Jolokia in any way --- webserver/build.gradle | 3 -- .../corda/webserver/JolokiaSlf4jAdapter.kt | 38 ------------------- 2 files changed, 41 deletions(-) delete mode 100644 webserver/src/main/kotlin/net/corda/webserver/JolokiaSlf4jAdapter.kt diff --git a/webserver/build.gradle b/webserver/build.gradle index b806d091dc..523f67ec5a 100644 --- a/webserver/build.gradle +++ b/webserver/build.gradle @@ -66,9 +66,6 @@ dependencies { // For rendering the index page. compile "org.jetbrains.kotlinx:kotlinx-html-jvm:0.6.3" - // for Jolokia logger - compile "org.jolokia:jolokia-war:$jolokia_version" - integrationTestCompile project(':node-driver') testCompile "junit:junit:$junit_version" } diff --git a/webserver/src/main/kotlin/net/corda/webserver/JolokiaSlf4jAdapter.kt b/webserver/src/main/kotlin/net/corda/webserver/JolokiaSlf4jAdapter.kt deleted file mode 100644 index 42091cac8c..0000000000 --- a/webserver/src/main/kotlin/net/corda/webserver/JolokiaSlf4jAdapter.kt +++ /dev/null @@ -1,38 +0,0 @@ -package net.corda.webserver - -import org.slf4j.Logger -import org.slf4j.LoggerFactory -import org.jolokia.util.LogHandler - -/** - * This also exists in node, because depends on jolokia - **/ -class JolokiaSlf4jAdapter : LogHandler { - companion object { - val log: Logger = LoggerFactory.getLogger("org.jolokia") - } - - override fun error(message: String?, t: Throwable?) { - if (message != null) { - if (t != null) { - log.error(message, t) - } else { - log.error(message) - } - } else if (t != null) { - log.error("Exception without a comment", t) - } - } - - override fun debug(message: String?) { - if (message != null) { - log.debug(message) - } - } - - override fun info(message: String?) { - if (message != null) { - log.info(message) - } - } -} From eb3f46311218cdca54ab541b2174d78ce8e254e6 Mon Sep 17 00:00:00 2001 From: ags Date: Wed, 7 Mar 2018 15:58:59 +0000 Subject: [PATCH 5/9] removed obsolete file --- webserver/src/main/resources/build.properties | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 webserver/src/main/resources/build.properties diff --git a/webserver/src/main/resources/build.properties b/webserver/src/main/resources/build.properties deleted file mode 100644 index 72577915e7..0000000000 --- a/webserver/src/main/resources/build.properties +++ /dev/null @@ -1,5 +0,0 @@ -# Build constants exported as resource file to make them visible in Node program -# Note: sadly, due to present limitation of IntelliJ-IDEA in processing resource files, these constants cannot be -# imported from top-level 'constants.properties' file - -jolokiaAgentVersion=1.3.7 \ No newline at end of file From 93fda7a51531567f18e35a4ed69facc6c60f6a2e Mon Sep 17 00:00:00 2001 From: ags Date: Wed, 7 Mar 2018 16:06:14 +0000 Subject: [PATCH 6/9] re-removing irrelevant fragment --- webserver/build.gradle | 7 ------- 1 file changed, 7 deletions(-) diff --git a/webserver/build.gradle b/webserver/build.gradle index 523f67ec5a..3715cfaf67 100644 --- a/webserver/build.gradle +++ b/webserver/build.gradle @@ -5,13 +5,6 @@ apply plugin: 'com.jfrog.artifactory' description 'Corda node web server' -buildscript { - def properties = new Properties() - file("$projectDir/src/main/resources/build.properties").withInputStream { properties.load(it) } - - ext.jolokia_version = properties.getProperty('jolokiaAgentVersion') -} - configurations { integrationTestCompile.extendsFrom testCompile integrationTestRuntime.extendsFrom testRuntime From ca54ed611c660d024c6debe15ffa5e369fcf5bbb Mon Sep 17 00:00:00 2001 From: ags Date: Thu, 8 Mar 2018 09:06:12 +0000 Subject: [PATCH 7/9] addressing review remarks --- node/build.gradle | 2 +- node/src/main/kotlin/net/corda/node/JolokiaSlf4jAdapter.kt | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/node/build.gradle b/node/build.gradle index a26e5669c2..74cad1b2ef 100644 --- a/node/build.gradle +++ b/node/build.gradle @@ -175,7 +175,7 @@ dependencies { testCompile "org.glassfish.jersey.containers:jersey-container-servlet-core:${jersey_version}" testCompile "org.glassfish.jersey.containers:jersey-container-jetty-http:${jersey_version}" - // Jolokia JVM monitoring agent + // Jolokia JVM monitoring agent, required to push logs through slf4j compile "org.jolokia:jolokia-jvm:${jolokia_version}:agent" } diff --git a/node/src/main/kotlin/net/corda/node/JolokiaSlf4jAdapter.kt b/node/src/main/kotlin/net/corda/node/JolokiaSlf4jAdapter.kt index b96834f76a..8803a9f9f7 100644 --- a/node/src/main/kotlin/net/corda/node/JolokiaSlf4jAdapter.kt +++ b/node/src/main/kotlin/net/corda/node/JolokiaSlf4jAdapter.kt @@ -4,9 +4,6 @@ import org.jolokia.util.LogHandler import org.slf4j.Logger import org.slf4j.LoggerFactory -/** - * This also exists in webserver, because depends on jolokia - **/ class JolokiaSlf4jAdapter : LogHandler { companion object { val log: Logger = LoggerFactory.getLogger("org.jolokia") From d9ab693752dd7ee0cabaadefe338137415fdc2e6 Mon Sep 17 00:00:00 2001 From: Ben Abineri <32292786+benabineri@users.noreply.github.com> Date: Mon, 12 Mar 2018 09:35:40 +0000 Subject: [PATCH 8/9] make two exceptions that held me up recently more helpful (#2778) --- node/src/main/kotlin/net/corda/node/ArgsParser.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/node/src/main/kotlin/net/corda/node/ArgsParser.kt b/node/src/main/kotlin/net/corda/node/ArgsParser.kt index 4f234a4fe8..4859326585 100644 --- a/node/src/main/kotlin/net/corda/node/ArgsParser.kt +++ b/node/src/main/kotlin/net/corda/node/ArgsParser.kt @@ -69,7 +69,7 @@ class ArgsParser { val networkRootTrustStorePassword = optionSet.valueOf(networkRootTrustStorePasswordArg) val registrationConfig = if (isRegistration) { - requireNotNull(networkRootTrustStorePassword) { "Network root trust store password must be provided in registration mode." } + requireNotNull(networkRootTrustStorePassword) { "Network root trust store password must be provided in registration mode using --network-root-truststore-password." } require(networkRootTrustStorePath.exists()) { "Network root trust store path: '$networkRootTrustStorePath' doesn't exist" } NodeRegistrationOption(networkRootTrustStorePath, networkRootTrustStorePassword) } else { @@ -110,7 +110,7 @@ data class CmdLineOptions(val baseDirectory: Path, mapOf("noLocalShell" to this.noLocalShell) )).parseAsNodeConfiguration() if (nodeRegistrationConfig != null) { - requireNotNull(config.compatibilityZoneURL) { "Compatibility Zone Url must be provided in registration mode." } + requireNotNull(config.compatibilityZoneURL) { "Compatibility Zone URL (compatibilityZoneURL) must be present in node configuration file in registration mode." } } return config } From 3f735451a58e2ad562c79915b484320794b7ce6e Mon Sep 17 00:00:00 2001 From: Joel Dudley Date: Mon, 12 Mar 2018 19:15:54 +0900 Subject: [PATCH 9/9] Documents the default username and password for H2. --- docs/source/node-database.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/node-database.rst b/docs/source/node-database.rst index c429abc082..6fdfd9c3df 100644 --- a/docs/source/node-database.rst +++ b/docs/source/node-database.rst @@ -20,7 +20,7 @@ stored states, transactions and attachments as follows: ``Database connection URL is : jdbc:h2:tcp://10.18.0.150:56736/node`` -* Paste this string into the JDBC URL field and click ``Connect``, using the default username and password. +* Paste this string into the JDBC URL field and click ``Connect``, using the default username (``sa``) and no password. You will be presented with a web interface that shows the contents of your node's storage and vault, and provides an interface for you to query them using SQL. @@ -53,4 +53,4 @@ Note that: * The ``database.schema`` property is optional * The value of ``database.schema`` is not wrapped in double quotes and Postgres always treats it as a lower-case value - (e.g. ``AliceCorp`` becomes ``alicecorp``) \ No newline at end of file + (e.g. ``AliceCorp`` becomes ``alicecorp``)