Merge remote-tracking branch 'open/master' into os-merge-1288f63

# Conflicts:
#	constants.properties
#	node/src/main/kotlin/net/corda/node/internal/cordapp/CordappConfigProvider.kt
#	samples/cordapp-configuration/src/main/kotlin/net/corda/configsample/ConfigSampleFlow.kt
This commit is contained in:
Shams Asari 2018-04-16 17:35:43 +01:00
commit b6d43c0204
9 changed files with 38 additions and 44 deletions

View File

@ -8,7 +8,7 @@
# Distribution of this file or any portion thereof via any medium without the express permission of R3 is strictly prohibited. # Distribution of this file or any portion thereof via any medium without the express permission of R3 is strictly prohibited.
# #
gradlePluginsVersion=4.0.11 gradlePluginsVersion=4.0.12
kotlinVersion=1.2.20 kotlinVersion=1.2.20
platformVersion=4 platformVersion=4
guavaVersion=21.0 guavaVersion=21.0

View File

@ -12,7 +12,6 @@ package net.corda.node.internal.cordapp
import com.typesafe.config.Config import com.typesafe.config.Config
import com.typesafe.config.ConfigFactory import com.typesafe.config.ConfigFactory
import net.corda.core.internal.cordapp.CordappConfigProvider
import net.corda.core.utilities.loggerFor import net.corda.core.utilities.loggerFor
import java.io.File import java.io.File

View File

@ -8,7 +8,7 @@
* Distribution of this file or any portion thereof via any medium without the express permission of R3 is strictly prohibited. * Distribution of this file or any portion thereof via any medium without the express permission of R3 is strictly prohibited.
*/ */
package net.corda.core.internal.cordapp package net.corda.node.internal.cordapp
import com.typesafe.config.Config import com.typesafe.config.Config

View File

@ -17,7 +17,6 @@ import net.corda.core.cordapp.Cordapp
import net.corda.core.cordapp.CordappContext import net.corda.core.cordapp.CordappContext
import net.corda.core.crypto.SecureHash import net.corda.core.crypto.SecureHash
import net.corda.core.internal.DEPLOYED_CORDAPP_UPLOADER import net.corda.core.internal.DEPLOYED_CORDAPP_UPLOADER
import net.corda.core.internal.cordapp.CordappConfigProvider
import net.corda.core.internal.createCordappContext import net.corda.core.internal.createCordappContext
import net.corda.core.node.services.AttachmentId import net.corda.core.node.services.AttachmentId
import net.corda.core.node.services.AttachmentStorage import net.corda.core.node.services.AttachmentStorage

View File

@ -12,15 +12,12 @@ package net.corda.node.internal.cordapp
import com.typesafe.config.Config import com.typesafe.config.Config
import com.typesafe.config.ConfigFactory import com.typesafe.config.ConfigFactory
import junit.framework.Assert.assertNull
import net.corda.core.internal.cordapp.CordappConfigProvider
import net.corda.core.node.services.AttachmentStorage import net.corda.core.node.services.AttachmentStorage
import net.corda.testing.common.internal.testNetworkParameters import net.corda.testing.common.internal.testNetworkParameters
import net.corda.testing.internal.MockCordappConfigProvider import net.corda.testing.internal.MockCordappConfigProvider
import net.corda.testing.services.MockAttachmentStorage import net.corda.testing.services.MockAttachmentStorage
import org.assertj.core.api.Assertions.assertThat import org.assertj.core.api.Assertions.assertThat
import org.junit.Assert.assertEquals import org.junit.Assert.*
import org.junit.Assert.assertNotNull
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import java.net.URL import java.net.URL
@ -29,9 +26,9 @@ class CordappProviderImplTests {
private companion object { private companion object {
val isolatedJAR = this::class.java.getResource("isolated.jar")!! val isolatedJAR = this::class.java.getResource("isolated.jar")!!
// TODO: Cordapp name should differ from the JAR name // TODO: Cordapp name should differ from the JAR name
val isolatedCordappName = "isolated" const val isolatedCordappName = "isolated"
val emptyJAR = this::class.java.getResource("empty.jar")!! val emptyJAR = this::class.java.getResource("empty.jar")!!
val validConfig = ConfigFactory.parseString("key=value") val validConfig: Config = ConfigFactory.parseString("key=value")
val stubConfigProvider = object : CordappConfigProvider { val stubConfigProvider = object : CordappConfigProvider {
override fun getConfigByName(name: String): Config = ConfigFactory.empty() override fun getConfigByName(name: String): Config = ConfigFactory.empty()
@ -87,7 +84,7 @@ class CordappProviderImplTests {
@Test @Test
fun `test cordapp configuration`() { fun `test cordapp configuration`() {
val configProvider = MockCordappConfigProvider() val configProvider = MockCordappConfigProvider()
configProvider.cordappConfigs.put(isolatedCordappName, validConfig) configProvider.cordappConfigs[isolatedCordappName] = validConfig
val loader = CordappLoader.createDevMode(listOf(isolatedJAR)) val loader = CordappLoader.createDevMode(listOf(isolatedJAR))
val provider = CordappProviderImpl(loader, configProvider, attachmentStore, whitelistedContractImplementations) val provider = CordappProviderImpl(loader, configProvider, attachmentStore, whitelistedContractImplementations)

View File

@ -6,18 +6,18 @@ This sample shows a simple example of how to use per-cordapp configuration. It i
* Gradle build file to show how to install your Cordapp configuration * Gradle build file to show how to install your Cordapp configuration
* A flow that consumes the Cordapp configuration * A flow that consumes the Cordapp configuration
## Usage To run from the command line in Unix:
To run the sample you must first build it from the project root with; 1. Run ``./gradlew samples:cordapp-configuration:deployNodes`` to create a set of configs and installs under
``samples/cordapp-configuration/build/nodes``
2. Run ``./samples/cordapp-configuration/build/nodes/runnodes`` to open up three new terminals with the three nodes
3. At the shell prompt for Bank A or Bank B run ``start net.corda.configsample.GetStringConfigFlow configKey: someStringValue``.
This will start the flow and read the `someStringValue` CorDapp config.
./gradlew deployNodes To run from the command line in Windows:
This will deploy the node with the configuration installed. 1. Run ``gradlew samples:cordapp-configuration:deployNodes`` to create a set of configs and installs under
The relevant section is the ``deployNodes`` task. ``samples\cordapp-configuration\build\nodes``
2. Run ``samples\cordapp-configuration\build\nodes\runnodes`` to open up three new terminals with the three nodes
## Running 3. At the shell prompt for Bank A or Bank B run ``start net.corda.configsample.GetStringConfigFlow configKey: someStringValue``.
This will start the flow and read the `someStringValue` CorDapp config.
* Windows: `build\nodes\runnodes`
* Mac/Linux: `./build/nodes/runnodes`
Once the nodes have started up and show a prompt you can now run your flow.

View File

@ -1,20 +0,0 @@
/*
* R3 Proprietary and Confidential
*
* Copyright (c) 2018 R3 Limited. All rights reserved.
*
* The intellectual and technical concepts contained herein are proprietary to R3 and its suppliers and are protected by trade secret law.
*
* Distribution of this file or any portion thereof via any medium without the express permission of R3 is strictly prohibited.
*/
package net.corda.configsample
import net.corda.core.flows.FlowLogic
class ConfigSampleFlow : FlowLogic<String>() {
override fun call(): String {
val config = serviceHub.getAppContext().config
return config.getString("someStringValue")
}
}

View File

@ -0,0 +1,19 @@
package net.corda.configsample
import co.paralleluniverse.fibers.Suspendable
import net.corda.core.flows.FlowLogic
import net.corda.core.flows.StartableByRPC
import net.corda.core.utilities.ProgressTracker
@StartableByRPC
class GetStringConfigFlow(private val configKey: String) : FlowLogic<String>() {
object READING : ProgressTracker.Step("Reading config")
override val progressTracker = ProgressTracker(READING)
@Suspendable
override fun call(): String {
progressTracker.currentStep = READING
val config = serviceHub.getAppContext().config
return config.getString(configKey)
}
}

View File

@ -12,7 +12,7 @@ package net.corda.testing.internal
import com.typesafe.config.Config import com.typesafe.config.Config
import com.typesafe.config.ConfigFactory import com.typesafe.config.ConfigFactory
import net.corda.core.internal.cordapp.CordappConfigProvider import net.corda.node.internal.cordapp.CordappConfigProvider
class MockCordappConfigProvider : CordappConfigProvider { class MockCordappConfigProvider : CordappConfigProvider {
val cordappConfigs = mutableMapOf<String, Config> () val cordappConfigs = mutableMapOf<String, Config> ()