From b86a3c3d2c5a1c7c0c3af174b192f25038d9fe5b Mon Sep 17 00:00:00 2001 From: Khoi Nguyen Date: Fri, 14 Oct 2022 14:17:36 +0100 Subject: [PATCH 01/20] CORE-7135: Setup Jenkins Project * Added new .ci folder which contains Jenkins file for multibranch pipeline project --- .ci/Jenkinsfile | 8 ++++++++ .ci/nightly/JenkinsfileSnykScan | 6 ++++++ 2 files changed, 14 insertions(+) create mode 100644 .ci/Jenkinsfile create mode 100644 .ci/nightly/JenkinsfileSnykScan diff --git a/.ci/Jenkinsfile b/.ci/Jenkinsfile new file mode 100644 index 0000000..8e0651c --- /dev/null +++ b/.ci/Jenkinsfile @@ -0,0 +1,8 @@ +@Library('corda-shared-build-pipeline-steps@5.0') _ + +cordaPipeline( + publishRepoPrefix: '', + slimBuild: true, + runUnitTests: false, + dedicatedJobForSnykDelta: false + ) diff --git a/.ci/nightly/JenkinsfileSnykScan b/.ci/nightly/JenkinsfileSnykScan new file mode 100644 index 0000000..c07efb7 --- /dev/null +++ b/.ci/nightly/JenkinsfileSnykScan @@ -0,0 +1,6 @@ +@Library('corda-shared-build-pipeline-steps@5.0') _ + +cordaSnykScanPipeline ( + snykTokenId: 'r3-snyk-corda5', + snykAdditionalCommands: "--all-sub-projects -d" +) From 8267ea597c1a7ebad4fe3908bb9126b7544011fb Mon Sep 17 00:00:00 2001 From: Chris Barratt Date: Mon, 17 Oct 2022 11:04:37 +0100 Subject: [PATCH 02/20] Set service members public for DP2 simulator --- .../java/com/r3/developers/csdetemplate/MyFirstFlow.java | 6 +++--- .../r3/developers/csdetemplate/MyFirstFlowResponder.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java b/src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java index 50d183a..0fcc95e 100644 --- a/src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java +++ b/src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java @@ -26,17 +26,17 @@ public class MyFirstFlow implements RPCStartableFlow { // JsonMarshallingService provides a Service for manipulating json @CordaInject - JsonMarshallingService jsonMarshallingService; + public JsonMarshallingService jsonMarshallingService; // FlowMessaging provides a service for establishing flow sessions between Virtual Nodes and // sending and receiving payloads between them @CordaInject - FlowMessaging flowMessaging; + public FlowMessaging flowMessaging; // MemberLookup provides a service for looking up information about members of the Virtual Network which // this CorDapp is operating in. @CordaInject - MemberLookup memberLookup; + public MemberLookup memberLookup; public MyFirstFlow() {} diff --git a/src/main/java/com/r3/developers/csdetemplate/MyFirstFlowResponder.java b/src/main/java/com/r3/developers/csdetemplate/MyFirstFlowResponder.java index 4e49f3b..de27380 100644 --- a/src/main/java/com/r3/developers/csdetemplate/MyFirstFlowResponder.java +++ b/src/main/java/com/r3/developers/csdetemplate/MyFirstFlowResponder.java @@ -23,7 +23,7 @@ public class MyFirstFlowResponder implements ResponderFlow { // MemberLookup provides a service for looking up information about members of the Virtual Network which // this CorDapp is operating in. @CordaInject - MemberLookup memberLookup; + public MemberLookup memberLookup; public MyFirstFlowResponder() {} From fc34e1bd5f45e101b8d0f9acb07a18a6f60cbae8 Mon Sep 17 00:00:00 2001 From: Khoi Nguyen Date: Mon, 17 Oct 2022 13:16:02 +0100 Subject: [PATCH 03/20] CORE-7135: Setup Jenkins pipeline * Added new .ci folder which contains Jenkins file for multibranch pipeline project --- .ci/Jenkinsfile | 8 ++++++++ .ci/nightly/JenkinsfileSnykScan | 6 ++++++ 2 files changed, 14 insertions(+) create mode 100644 .ci/Jenkinsfile create mode 100644 .ci/nightly/JenkinsfileSnykScan diff --git a/.ci/Jenkinsfile b/.ci/Jenkinsfile new file mode 100644 index 0000000..8e0651c --- /dev/null +++ b/.ci/Jenkinsfile @@ -0,0 +1,8 @@ +@Library('corda-shared-build-pipeline-steps@5.0') _ + +cordaPipeline( + publishRepoPrefix: '', + slimBuild: true, + runUnitTests: false, + dedicatedJobForSnykDelta: false + ) diff --git a/.ci/nightly/JenkinsfileSnykScan b/.ci/nightly/JenkinsfileSnykScan new file mode 100644 index 0000000..c07efb7 --- /dev/null +++ b/.ci/nightly/JenkinsfileSnykScan @@ -0,0 +1,6 @@ +@Library('corda-shared-build-pipeline-steps@5.0') _ + +cordaSnykScanPipeline ( + snykTokenId: 'r3-snyk-corda5', + snykAdditionalCommands: "--all-sub-projects -d" +) From 8e6081875b6294b3a288be3a4bb152cab2a3099a Mon Sep 17 00:00:00 2001 From: Chris Barratt Date: Mon, 17 Oct 2022 17:01:27 +0100 Subject: [PATCH 04/20] Final message classes, removal of unneeded deps, initial pass over docs --- build.gradle | 41 ------------------- .../r3/developers/csdetemplate/Message.java | 6 +-- .../developers/csdetemplate/MyFirstFlow.java | 4 +- .../csdetemplate/MyFirstFlowResponder.java | 8 ++-- .../csdetemplate/MyFirstFlowStartArgs.java | 10 +---- .../csdetemplate/MyFirstFlowTest.java | 1 - 6 files changed, 11 insertions(+), 59 deletions(-) diff --git a/build.gradle b/build.gradle index bd29e7b..5b50cbd 100644 --- a/build.gradle +++ b/build.gradle @@ -45,36 +45,6 @@ cordapp { } } -/* -// Declare the set of Kotlin compiler options we need to build a CorDapp. -tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { - kotlinOptions { - allWarningsAsErrors = false - - // Specify the version of Kotlin that we are that we will be developing. - languageVersion = '1.7' - // Specify the Kotlin libraries that code is compatible with - apiVersion = '1.7' - // Note that we Need to use a version of Kotlin that will be compatible with the Corda API. - // Currently that is developed in Kotlin 1.7 so picking the same version ensures compatibility with that. - - // Specify the version of Java to target. - jvmTarget = javaVersion - - // Needed for reflection to work correctly. - javaParameters = true - - // -Xjvm-default determines how Kotlin supports default methods. - // JetBrains currently recommends developers use -Xjvm-default=all - // https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-jvm-default/ - freeCompilerArgs += [ - "-Xjvm-default=all" - ] - } -} - - */ - // Declare the set of Kotlin compiler options we need to build a CorDapp. tasks.withType(JavaCompile) { @@ -84,8 +54,6 @@ tasks.withType(JavaCompile) { ] } - - repositories { // All dependencies are held in Maven Central mavenCentral() @@ -95,13 +63,6 @@ repositories { // A cordaProvided declaration is required for anything that we use that the Corda API provides. // This is required to allow us to build CorDapp modules as OSGi bundles that CPI and CPB files are built on. dependencies { - // We need a version of kotlin-stdlib-jdk8 built as an OSGi bundle, this is "kotlin-stdlib-jdk8-osgi". - // R3 builds kotlin-stdlib-jdk8-osgi from Kotlin's kotlin-stdlib-jdk8. - // NB: - // Kotlin's kotlin-osgi-bundle does not provide all of the Kotlin API that is required, - // There is no kotlin-stdlib-jdk11, but one is not needed even though we are targetting Java 11. - cordaProvided 'net.corda.kotlin:kotlin-stdlib-jdk8-osgi' - // Declare a "platform" so that we use the correct set of dependency versions for the version of the // Corda API specified. cordaProvided platform("net.corda:corda-api:$cordaApiVersion") @@ -135,9 +96,7 @@ dependencies { // Optional but used by exmaple tests. testImplementation "org.mockito:mockito-core:$mockitoVersion" - testImplementation "org.mockito.kotlin:mockito-kotlin:$mockitoKotlinVersion" testImplementation "org.hamcrest:hamcrest-library:$hamcrestVersion" - } diff --git a/src/main/java/com/r3/developers/csdetemplate/Message.java b/src/main/java/com/r3/developers/csdetemplate/Message.java index a7109ef..4ca6092 100644 --- a/src/main/java/com/r3/developers/csdetemplate/Message.java +++ b/src/main/java/com/r3/developers/csdetemplate/Message.java @@ -3,15 +3,15 @@ package com.r3.developers.csdetemplate; import net.corda.v5.base.annotations.CordaSerializable; import net.corda.v5.base.types.MemberX500Name; -// // A class which will contain a message, It must be marked with @CordaSerializable for Corda -//// to be able to send from one virtual node to another. +// A class which will contain a message, It must be marked with @CordaSerializable for Corda +// to be able to send from one virtual node to another. @CordaSerializable public class Message { - // public Message() {} public Message(MemberX500Name sender, String message) { this.sender = sender; this.message = message; } + public MemberX500Name getSender() { return sender; } diff --git a/src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java b/src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java index 0fcc95e..ffcc434 100644 --- a/src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java +++ b/src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java @@ -14,7 +14,7 @@ import org.slf4j.LoggerFactory; // MyFirstFlow is an initiating flow, it's corresponding responder flow is called MyFirstFlowResponder (defined below) // to link the two sides of the flow together they need to have the same protocol. -@InitiatingFlow(protocol = "another-flow") +@InitiatingFlow(protocol = "my-first-flow") // MyFirstFlow should inherit from RPCStartableFlow, which tells Corda it can be started via an RPC call public class MyFirstFlow implements RPCStartableFlow { @@ -40,7 +40,7 @@ public class MyFirstFlow implements RPCStartableFlow { public MyFirstFlow() {} - // When a flow is invoked it's call() method is called. + // When a flow is invoked its call() method is called. // call() methods must be marked as @Suspendable, this allows Corda to pause mid-execution to wait // for a response from the other flows and services @NotNull diff --git a/src/main/java/com/r3/developers/csdetemplate/MyFirstFlowResponder.java b/src/main/java/com/r3/developers/csdetemplate/MyFirstFlowResponder.java index de27380..43f6075 100644 --- a/src/main/java/com/r3/developers/csdetemplate/MyFirstFlowResponder.java +++ b/src/main/java/com/r3/developers/csdetemplate/MyFirstFlowResponder.java @@ -11,9 +11,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -// MyFirstFlowResponder is a responder flow, it's corresponding initiating flow is called MyFirstFlow (defined above) +// MyFirstFlowResponder is a responder flow, it's corresponding initiating flow is called MyFirstFlow (defined in MyFirstFlow.java) // to link the two sides of the flow together they need to have the same protocol. -@InitiatedBy(protocol = "another-flow") +@InitiatedBy(protocol = "my-first-flow") // Responder flows must inherit from ResponderFlow public class MyFirstFlowResponder implements ResponderFlow { @@ -28,9 +28,9 @@ public class MyFirstFlowResponder implements ResponderFlow { public MyFirstFlowResponder() {} // Responder flows are invoked when an initiating flow makes a call via a session set up with the Virtual - // node hosting the Responder flow. When a responder flow is invoked it's call() method is called. + // node hosting the Responder flow. When a responder flow is invoked its call() method is called. // call() methods must be marked as @Suspendable, this allows Corda to pause mid-execution to wait - // for a response from the other flows and services/ + // for a response from the other flows and services. // The Call method has the flow session passed in as a parameter by Corda so the session is available to // responder flow code, you don't need to inject the FlowMessaging service. @Suspendable diff --git a/src/main/java/com/r3/developers/csdetemplate/MyFirstFlowStartArgs.java b/src/main/java/com/r3/developers/csdetemplate/MyFirstFlowStartArgs.java index 1867875..2229518 100644 --- a/src/main/java/com/r3/developers/csdetemplate/MyFirstFlowStartArgs.java +++ b/src/main/java/com/r3/developers/csdetemplate/MyFirstFlowStartArgs.java @@ -2,20 +2,14 @@ package com.r3.developers.csdetemplate; import net.corda.v5.base.types.MemberX500Name; -// // A class to hold the arguments required to start the flow -//class MyFirstFlowStartArgs(val otherMember: MemberX500Name) +// A class to hold the arguments required to start the flow public class MyFirstFlowStartArgs { public MemberX500Name otherMember; - public MemberX500Name getOtherMember() { - return otherMember; - } - public MyFirstFlowStartArgs(MemberX500Name otherMember) { this.otherMember = otherMember; } - // Without the following we get - // "Cannot construct instance of `com.r3.developers.csdetemplate.MyFirstFlowStartArgs` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)\n at [Source: (String)\"{\"otherMember\":\"CN=Bob, OU=Test Dept, O=R3, L=London, C=GB\"}\"; line: 1, column: 2]" + // The JSON Marshalling Service, that handles serialisation, needs this constructor. public MyFirstFlowStartArgs() {} } diff --git a/src/test/java/com/r3/developers/csdetemplate/MyFirstFlowTest.java b/src/test/java/com/r3/developers/csdetemplate/MyFirstFlowTest.java index 1aa828f..31305a0 100644 --- a/src/test/java/com/r3/developers/csdetemplate/MyFirstFlowTest.java +++ b/src/test/java/com/r3/developers/csdetemplate/MyFirstFlowTest.java @@ -1,6 +1,5 @@ package com.r3.developers.csdetemplate; - import net.corda.simulator.HoldingIdentity; import net.corda.simulator.RequestData; import net.corda.simulator.SimulatedVirtualNode; From 7062445a2ee95a65d719bd94331395a0a59cd981 Mon Sep 17 00:00:00 2001 From: Chris Barratt Date: Tue, 18 Oct 2022 09:44:25 +0100 Subject: [PATCH 05/20] Finished tweaking comments --- build.gradle | 4 ++-- .../com/r3/developers/csdetemplate/MyFirstFlowResponder.java | 2 +- .../com/r3/developers/csdetemplate/MyFirstFlowStartArgs.java | 2 +- .../java/com/r3/developers/csdetemplate/MyFirstFlowTest.java | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/build.gradle b/build.gradle index 5b50cbd..ff011d9 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { id 'org.jetbrains.kotlin.jvm' // Include the cordapp-cpb plugin. This automatically includes the cordapp-cpk plugin as well. - // These extend existing build environment so that CPB and CPK files can be built. + // These extend the existing build environment so that CPB and CPK files can be built. // This includes a CorDapp DSL that allows the developer to supply metadata for the CorDapp // required by Corda. id 'net.corda.plugins.cordapp-cpb2' @@ -67,7 +67,7 @@ dependencies { // Corda API specified. cordaProvided platform("net.corda:corda-api:$cordaApiVersion") - // If using transistive dependencies this will provide most of Corda-API: + // If using transistive dependencies this will provide most of the Corda-API: // cordaProvided 'net.corda:corda-application' // Alternatively we can explicitly specify all our Corda-API dependencies: diff --git a/src/main/java/com/r3/developers/csdetemplate/MyFirstFlowResponder.java b/src/main/java/com/r3/developers/csdetemplate/MyFirstFlowResponder.java index 43f6075..d7fba74 100644 --- a/src/main/java/com/r3/developers/csdetemplate/MyFirstFlowResponder.java +++ b/src/main/java/com/r3/developers/csdetemplate/MyFirstFlowResponder.java @@ -11,7 +11,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -// MyFirstFlowResponder is a responder flow, it's corresponding initiating flow is called MyFirstFlow (defined in MyFirstFlow.java) +// MyFirstFlowResponder is a responder flow, its corresponding initiating flow is called MyFirstFlow (defined in MyFirstFlow.java) // to link the two sides of the flow together they need to have the same protocol. @InitiatedBy(protocol = "my-first-flow") // Responder flows must inherit from ResponderFlow diff --git a/src/main/java/com/r3/developers/csdetemplate/MyFirstFlowStartArgs.java b/src/main/java/com/r3/developers/csdetemplate/MyFirstFlowStartArgs.java index 2229518..4c5f2ff 100644 --- a/src/main/java/com/r3/developers/csdetemplate/MyFirstFlowStartArgs.java +++ b/src/main/java/com/r3/developers/csdetemplate/MyFirstFlowStartArgs.java @@ -10,6 +10,6 @@ public class MyFirstFlowStartArgs { this.otherMember = otherMember; } - // The JSON Marshalling Service, that handles serialisation, needs this constructor. + // The JSON Marshalling Service, which handles serialisation, needs this constructor. public MyFirstFlowStartArgs() {} } diff --git a/src/test/java/com/r3/developers/csdetemplate/MyFirstFlowTest.java b/src/test/java/com/r3/developers/csdetemplate/MyFirstFlowTest.java index 31305a0..925ae5c 100644 --- a/src/test/java/com/r3/developers/csdetemplate/MyFirstFlowTest.java +++ b/src/test/java/com/r3/developers/csdetemplate/MyFirstFlowTest.java @@ -25,7 +25,7 @@ class MyFirstFlowTest { HoldingIdentity bobHoldingID = HoldingIdentity.Companion.create(bobX500); // Create Alice and Bob's virtual nodes, including the Class's of the flows which will be registered on each node. - // We don't assign Bob's virtual node to a val because we don't need it for this particular test. + // We don't assign Bob's virtual node to a variable because we don't need it for this particular test. SimulatedVirtualNode aliceVN = simulator.createVirtualNode(aliceHoldingID, MyFirstFlow.class); simulator.createVirtualNode(bobHoldingID, MyFirstFlowResponder.class); @@ -35,7 +35,7 @@ class MyFirstFlowTest { // Create a requestData object RequestData requestData = RequestData.Companion.create( "request no 1", // A unique reference for the instance of the flow request - MyFirstFlow.class, // The name of the flow class which is to be started + MyFirstFlow.class, // The name of the flow class which is to be started myFirstFlowStartArgs // The object which contains the start arguments of the flow ); From 2bcc9d6fb5cd7430e041014604a4eda287ec4acf Mon Sep 17 00:00:00 2001 From: Chris Barratt Date: Wed, 19 Oct 2022 01:14:28 +0100 Subject: [PATCH 06/20] Suppress varargs unchecked warning, remove unnecessary NotNull annotation --- src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java | 2 +- .../java/com/r3/developers/csdetemplate/MyFirstFlowTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java b/src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java index ffcc434..21321c6 100644 --- a/src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java +++ b/src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java @@ -46,7 +46,7 @@ public class MyFirstFlow implements RPCStartableFlow { @NotNull @Suspendable @Override - public String call(@NotNull RPCRequestData requestBody) { + public String call(RPCRequestData requestBody) { // Useful logging to follow what's happening in the console or logs log.info("MFF: MyFirstFlow.call() called"); diff --git a/src/test/java/com/r3/developers/csdetemplate/MyFirstFlowTest.java b/src/test/java/com/r3/developers/csdetemplate/MyFirstFlowTest.java index 925ae5c..e343318 100644 --- a/src/test/java/com/r3/developers/csdetemplate/MyFirstFlowTest.java +++ b/src/test/java/com/r3/developers/csdetemplate/MyFirstFlowTest.java @@ -15,8 +15,8 @@ class MyFirstFlowTest { private MemberX500Name bobX500 = MemberX500Name.parse("CN=Bob, OU=Test Dept, O=R3, L=London, C=GB"); @Test + @SuppressWarnings("unchecked") public void test_that_MyFirstFLow_returns_correct_message() { - // Instantiate an instance of the Simulator Simulator simulator = new Simulator(); From 9d532633bfc18cebbe6d14926073ec49f495a05a Mon Sep 17 00:00:00 2001 From: Khoi Nguyen Date: Tue, 18 Oct 2022 15:53:43 +0100 Subject: [PATCH 07/20] CORE-7176: Setup Template Project Notification * Updated Jenkinsfile to use #corda-corda5-developer-experience as the default slack channel destination. --- .ci/Jenkinsfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.ci/Jenkinsfile b/.ci/Jenkinsfile index 8e0651c..2e1e13d 100644 --- a/.ci/Jenkinsfile +++ b/.ci/Jenkinsfile @@ -4,5 +4,6 @@ cordaPipeline( publishRepoPrefix: '', slimBuild: true, runUnitTests: false, - dedicatedJobForSnykDelta: false + dedicatedJobForSnykDelta: false, + slackChannel: '#corda-corda5-developer-experience' ) From c4b8f4fa1b6068ad8cf10d6008072a306d2a8b40 Mon Sep 17 00:00:00 2001 From: Khoi Nguyen Date: Thu, 20 Oct 2022 10:41:50 +0100 Subject: [PATCH 08/20] CORE-7176: Setup Template Project Notification * Updated slackChannel in .ci/Jenkinsfile to send notification to '#corda-corda5-dev-ex-build-notifications' --- .ci/Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/Jenkinsfile b/.ci/Jenkinsfile index 2e1e13d..330a1e5 100644 --- a/.ci/Jenkinsfile +++ b/.ci/Jenkinsfile @@ -5,5 +5,5 @@ cordaPipeline( slimBuild: true, runUnitTests: false, dedicatedJobForSnykDelta: false, - slackChannel: '#corda-corda5-developer-experience' + slackChannel: '#corda-corda5-dev-ex-build-notifications' ) From 0428adac4cca4545523ec958fb6c3f58ac76d83c Mon Sep 17 00:00:00 2001 From: Ronan Browne Date: Fri, 21 Oct 2022 09:04:09 +0100 Subject: [PATCH 09/20] CORE-7135: send notifications to correct slack channel --- .ci/Jenkinsfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.ci/Jenkinsfile b/.ci/Jenkinsfile index 8e0651c..330a1e5 100644 --- a/.ci/Jenkinsfile +++ b/.ci/Jenkinsfile @@ -4,5 +4,6 @@ cordaPipeline( publishRepoPrefix: '', slimBuild: true, runUnitTests: false, - dedicatedJobForSnykDelta: false + dedicatedJobForSnykDelta: false, + slackChannel: '#corda-corda5-dev-ex-build-notifications' ) From bbdb1b41cae4c83af5f61b4e8565f168a6798315 Mon Sep 17 00:00:00 2001 From: Chris Barratt Date: Wed, 26 Oct 2022 15:55:50 +0100 Subject: [PATCH 10/20] Use published artifacts --- build.gradle | 47 ++--------------------------------------------- gradle.properties | 9 ++------- settings.gradle | 31 ++----------------------------- 3 files changed, 6 insertions(+), 81 deletions(-) diff --git a/build.gradle b/build.gradle index 733d3bf..ff011d9 100644 --- a/build.gradle +++ b/build.gradle @@ -55,51 +55,8 @@ tasks.withType(JavaCompile) { } repositories { - mavenLocal() // All dependencies are held in Maven Central mavenCentral() - - // R3 Internal repositories - // Repository the provides kotlin-stdlib-jdk8-osgi created by R3. - // Final location to be decided. - maven { - url = "$artifactoryContextUrl/corda-dependencies" - } - // Repository provides Corda 5 binaries that implement Corda-API. - // These will be made publicly available. - // Final location to be decided. - // Repository subject to change - maven { - url = "$artifactoryContextUrl/corda-os-maven" - credentials { - username = findProperty('cordaArtifactoryUsername') ?: System.getenv('CORDA_ARTIFACTORY_USERNAME') - password = findProperty('cordaArtifactoryPassword') ?: System.getenv('CORDA_ARTIFACTORY_PASSWORD') - } - } - // Provides the combined-worker Jars - // These will be made publicly available. - // Final location to be decided. - maven { - url = "$artifactoryContextUrl/corda-ent-maven-unstable-local" - credentials { - username = findProperty('cordaArtifactoryUsername') ?: System.getenv('CORDA_ARTIFACTORY_USERNAME') - password = findProperty('cordaArtifactoryPassword') ?: System.getenv('CORDA_ARTIFACTORY_PASSWORD') - } - } - maven { - url = "$artifactoryContextUrl/corda-ent-maven" - credentials { - username = findProperty('cordaArtifactoryUsername') ?: System.getenv('CORDA_ARTIFACTORY_USERNAME') - password = findProperty('cordaArtifactoryPassword') ?: System.getenv('CORDA_ARTIFACTORY_PASSWORD') - } - } - maven { - url = "$artifactoryContextUrl/engineering-tools-maven-unstable" - credentials { - username = findProperty('cordaArtifactoryUsername') ?: System.getenv('CORDA_ARTIFACTORY_USERNAME') - password = findProperty('cordaArtifactoryPassword') ?: System.getenv('CORDA_ARTIFACTORY_PASSWORD') - } - } } // Declare dependencies for the modules we will use. @@ -128,8 +85,8 @@ dependencies { cordaProvided 'org.slf4j:slf4j-api' // Dependencies Required By Test Tooling - testImplementation "net.corda:corda-simulator-api:$simulatorVersion" - testRuntimeOnly "net.corda:corda-simulator-runtime:$simulatorVersion" + testImplementation "net.corda:corda-simulator-api:$combinedWorkerVersion" + testRuntimeOnly "net.corda:corda-simulator-runtime:$combinedWorkerVersion" // 3rd party libraries // Required diff --git a/gradle.properties b/gradle.properties index 1581641..c6aac50 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,8 +2,7 @@ kotlin.code.style=official # Specify the version of the Corda-API to use. # This needs to match the version supported by the Corda Cluster the CorDapp will run on. -# cordaApiVersion=5.0.0.190-DevPreview-2 -cordaApiVersion=5.0.0.414-beta+ +cordaApiVersion=5.0.0.190-DevPreview-2 # Specify the version of the cordapp-cpb and cordapp-cpk plugins cordaPluginsVersion=7.0.0-DevPreview-2 @@ -26,8 +25,7 @@ hamcrestVersion=2.2 # Settings For Development Utilities testUtilsVersion=5.0.0.0-DevPreview-2 -#combinedWorkerVersion=5.0.0.0-DevPreview-2 -combinedWorkerVersion=5.0.0.0-beta+ +combinedWorkerVersion=5.0.0.0-DevPreview-2 cordaClusterURL=https://localhost:8888 cordaRpcUser=admin @@ -35,6 +33,3 @@ cordaRpcPasswd=admin devEnvWorkspace=workspace dbContainerName=CSDEpostgresql -# R3 internal repository -artifactoryContextUrl=https://software.r3.com/artifactory -simulatorVersion=5.0.0.0-SNAPSHOT \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 8fb0cb1..655a3be 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,41 +1,12 @@ pluginManagement { // Declare the repositories where plugins are stored. repositories { - mavenLocal() gradlePluginPortal() mavenCentral { content { includeGroupByRegex 'net\\.corda(\\..*)?' } } - // R3 internal repositories - maven { - url "${artifactoryContextUrl}/corda-dev" - content { - includeGroupByRegex 'net\\.corda\\.plugins(\\..*)?' - } - } - maven { - url = "$artifactoryContextUrl/corda-os-maven-unstable" - credentials { - username = settings.ext.find('cordaArtifactoryUsername') ?: System.getenv('CORDA_ARTIFACTORY_USERNAME') - password = settings.ext.find('cordaArtifactoryPassword') ?: System.getenv('CORDA_ARTIFACTORY_PASSWORD') - } - } - maven { - url = "$artifactoryContextUrl/corda-os-maven-unstable-local" - credentials { - username = settings.ext.find('cordaArtifactoryUsername') ?: System.getenv('CORDA_ARTIFACTORY_USERNAME') - password = settings.ext.find('cordaArtifactoryPassword') ?: System.getenv('CORDA_ARTIFACTORY_PASSWORD') - } - } - maven { - url = "$artifactoryContextUrl/corda-dev" - credentials { - username = settings.ext.find('cordaArtifactoryUsername') ?: System.getenv('CORDA_ARTIFACTORY_USERNAME') - password = settings.ext.find('cordaArtifactoryPassword') ?: System.getenv('CORDA_ARTIFACTORY_PASSWORD') - } - } } // The plugin dependencies with versions of the plugins congruent with the specified CorDapp plugin version, @@ -54,3 +25,5 @@ pluginManagement { rootProject.name = 'csde-cordapp-template-java' + + From 39c21c38a67b820ca8d87c26a0796261a68ad493 Mon Sep 17 00:00:00 2001 From: Chris Barratt Date: Wed, 26 Oct 2022 16:30:17 +0100 Subject: [PATCH 11/20] Fix Jenkinsfile bug --- .ci/Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/Jenkinsfile b/.ci/Jenkinsfile index 1e80e28..4e8e34a 100644 --- a/.ci/Jenkinsfile +++ b/.ci/Jenkinsfile @@ -5,6 +5,6 @@ cordaPipeline( slimBuild: true, runUnitTests: false, dedicatedJobForSnykDelta: false, - slackChannel: '#corda-corda5-dev-ex-build-notifications' + slackChannel: '#corda-corda5-dev-ex-build-notifications', dedicatedJobForSnykDelta: false ) From 805fb0d9ad853fcb3efd9d598c8f4be48165b930 Mon Sep 17 00:00:00 2001 From: Chris Barratt Date: Wed, 26 Oct 2022 16:31:16 +0100 Subject: [PATCH 12/20] Fix Jenkinsfile bug --- .ci/Jenkinsfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.ci/Jenkinsfile b/.ci/Jenkinsfile index 4e8e34a..330a1e5 100644 --- a/.ci/Jenkinsfile +++ b/.ci/Jenkinsfile @@ -5,6 +5,5 @@ cordaPipeline( slimBuild: true, runUnitTests: false, dedicatedJobForSnykDelta: false, - slackChannel: '#corda-corda5-dev-ex-build-notifications', - dedicatedJobForSnykDelta: false + slackChannel: '#corda-corda5-dev-ex-build-notifications' ) From fe9ab2cda1108aff44ac0cda5509d0f1d71e23ed Mon Sep 17 00:00:00 2001 From: Niamh25 Date: Thu, 17 Nov 2022 16:27:11 +0000 Subject: [PATCH 13/20] DOC-4345: updated edited Java CSDE template code comments --- build.gradle | 4 +-- buildSrc/src/main/groovy/csde.gradle | 10 +++--- .../java/com/r3/csde/CsdeRpcInterface.java | 16 ++++----- .../r3/developers/csdetemplate/Message.java | 4 +-- .../developers/csdetemplate/MyFirstFlow.java | 36 +++++++++---------- .../csdetemplate/MyFirstFlowResponder.java | 18 +++++----- .../csdetemplate/MyFirstFlowTest.java | 22 ++++++------ 7 files changed, 55 insertions(+), 55 deletions(-) diff --git a/build.gradle b/build.gradle index ff011d9..e1a62dc 100644 --- a/build.gradle +++ b/build.gradle @@ -31,7 +31,7 @@ def javaVersion = VERSION_11 cordapp { // "targetPlatformVersion" and "minimumPlatformVersion" are intended to specify the preferred // and earliest versions of the Corda platform that the CorDapp will run on respectively. - // Enforced versioning has not implemented yet so we need to pass in a dummy value for now. + // Enforced versioning has not been implemented yet, so enter a dummy value for now. // The platform version will correspond to and be roughly equivalent to the Corda API version. targetPlatformVersion platformVersion.toInteger() minimumPlatformVersion platformVersion.toInteger() @@ -61,7 +61,7 @@ repositories { // Declare dependencies for the modules we will use. // A cordaProvided declaration is required for anything that we use that the Corda API provides. -// This is required to allow us to build CorDapp modules as OSGi bundles that CPI and CPB files are built on. +// This is required to allow us to build CorDapp modules as OSGi bundles that CPI and CPB files are then built upon. dependencies { // Declare a "platform" so that we use the correct set of dependency versions for the version of the // Corda API specified. diff --git a/buildSrc/src/main/groovy/csde.gradle b/buildSrc/src/main/groovy/csde.gradle index f2fe6a4..6efb924 100644 --- a/buildSrc/src/main/groovy/csde.gradle +++ b/buildSrc/src/main/groovy/csde.gradle @@ -34,8 +34,8 @@ def cordaBinDir= System.getProperty('user.home') + "/.corda/corda5" def cordaCliBinDir = System.getProperty('user.home') + "/.corda/cli" def cordaJDBCDir = cordaBinDir + "/jdbcDrivers" def signingCertAlias="gradle-plugin-default-key" -// Get error if this is not a autotyped object -// def signingCertFName = "$rootDir/config/gradle-plugin-default-key.pem" +// You will receive an error if this is not a autotyped object. +// def signingCertFName = "$rootDir/config/gradle-plugin-default-key.pem". def signingCertFName = rootDir.toString() + "/config/gradle-plugin-default-key.pem" def keystoreAlias = "my-signing-key" def keystoreFName = devEnvWorkspace + "/signingkeys.pfx" @@ -136,7 +136,7 @@ tasks.register('createKeystore') { "-storetype", "pkcs12", "-validity", "4000" } - // Need to add the default signing key to the keystore + // Add the default signing key to the keystore. exec { commandLine "${System.getProperty("java.home")}/bin/keytool", "-importcert", "-keystore", keystoreFName, @@ -172,7 +172,7 @@ tasks.register('buildCPI') { File srcDir srcDir = file('build/libs') - // Create a file collection using a closure + // Create a file collection using a closure. def collection = layout.files { srcDir.listFiles() } def cpbs = collection.filter { it.getName().endsWith(".cpb") } @@ -225,7 +225,7 @@ tasks.register('listCPIs') { } } -// Empty task, just acts as the Task user entry point task. +// Empty task, this acts as the user entry point task. tasks.register('deployCordapp') { group = pluginGroupName dependsOn("createAndRegVNodes") diff --git a/buildSrc/src/main/java/com/r3/csde/CsdeRpcInterface.java b/buildSrc/src/main/java/com/r3/csde/CsdeRpcInterface.java index eef8c7e..3776d84 100644 --- a/buildSrc/src/main/java/com/r3/csde/CsdeRpcInterface.java +++ b/buildSrc/src/main/java/com/r3/csde/CsdeRpcInterface.java @@ -202,9 +202,9 @@ public class CsdeRpcInterface { private boolean uploadStatusRetry(kong.unirest.HttpResponse response) { int status = response.getStatus(); kong.unirest.JsonNode body = response.getBody(); - // Do not retry on success + // Do not retry if successful. if(status == 200) { - // Keep retrying until we get "OK" may move through "Validateing upload", "Persisting CPI" + // Retry until you get an "OK", it may move to "Validating upload", "Persisting CPI". return !(body.getObject().get("status").equals("OK")); } else if (status == 400){ @@ -269,7 +269,7 @@ public class CsdeRpcInterface { out.println("Upload Status:" + status); out.println("Pretty print the body\n" + body.toPrettyString()); - // We expect the id field to be a string. + // Expect the ID field to be a string. if (status == 200) { String id = (String) body.getObject().get("id"); out.println("get id:\n" + id); @@ -299,7 +299,7 @@ public class CsdeRpcInterface { LinkedList x500Ids = getConfigX500Ids(); LinkedList OKHoldingShortIds = new LinkedList<>(); - // For each identity check that it already exists. + // Check that each identity already exists. Set existingX500 = new HashSet<>(); kong.unirest.HttpResponse vnodeListResponse = getVNodeInfo(); @@ -322,9 +322,9 @@ public class CsdeRpcInterface { .asJson(); // Logging. - // need to check this and report errors. - // 200 - OK - // 409 - Vnode already exists + // Check this and report errors. + // 200 - OK. + // 409 - Vnode already exists. if (jsonNode.getStatus() != 409) { if (jsonNode.getStatus() != 200) { reportError(jsonNode); @@ -340,7 +340,7 @@ public class CsdeRpcInterface { } } - // Register the VNodes + // Register the VNodes. for(String shortHoldingIdHash: OKHoldingShortIds) { kong.unirest.HttpResponse vnodeResponse = Unirest.post(baseURL + "/api/v1/membership/" + shortHoldingIdHash) .body("{ \"memberRegistrationRequest\": { \"action\": \"requestJoin\", \"context\": { \"corda.key.scheme\" : \"CORDA.ECDSA.SECP256R1\" } } }") diff --git a/src/main/java/com/r3/developers/csdetemplate/Message.java b/src/main/java/com/r3/developers/csdetemplate/Message.java index 4ca6092..58dc5b8 100644 --- a/src/main/java/com/r3/developers/csdetemplate/Message.java +++ b/src/main/java/com/r3/developers/csdetemplate/Message.java @@ -3,8 +3,8 @@ package com.r3.developers.csdetemplate; import net.corda.v5.base.annotations.CordaSerializable; import net.corda.v5.base.types.MemberX500Name; -// A class which will contain a message, It must be marked with @CordaSerializable for Corda -// to be able to send from one virtual node to another. +// Where a class contains a message, mark it with @CordaSerializable to enable Corda to +// send it from one virtual node to another. @CordaSerializable public class Message { public Message(MemberX500Name sender, String message) { diff --git a/src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java b/src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java index 21321c6..985a25e 100644 --- a/src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java +++ b/src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java @@ -18,46 +18,46 @@ import org.slf4j.LoggerFactory; // MyFirstFlow should inherit from RPCStartableFlow, which tells Corda it can be started via an RPC call public class MyFirstFlow implements RPCStartableFlow { - // It is useful to be able to log messages from the flows for debugging. + // Log messages from the flows for debugging. private final Logger log = LoggerFactory.getLogger(MyFirstFlow.class); // Corda has a set of injectable services which are injected into the flow at runtime. // Flows declare them with @CordaInjectable, then the flows have access to their services. - // JsonMarshallingService provides a Service for manipulating json + // JsonMarshallingService provides a service for manipulating JSON. @CordaInject public JsonMarshallingService jsonMarshallingService; - // FlowMessaging provides a service for establishing flow sessions between Virtual Nodes and - // sending and receiving payloads between them + // FlowMessaging establishes flow sessions between virtual nodes + // that sends and receives payloads between them. @CordaInject public FlowMessaging flowMessaging; - // MemberLookup provides a service for looking up information about members of the Virtual Network which - // this CorDapp is operating in. + // MemberLookup looks for information about members of the virtual network + // which this CorDapp operates in. @CordaInject public MemberLookup memberLookup; public MyFirstFlow() {} // When a flow is invoked its call() method is called. - // call() methods must be marked as @Suspendable, this allows Corda to pause mid-execution to wait - // for a response from the other flows and services + // Call() methods must be marked as @Suspendable, this allows Corda to pause mid-execution to wait + // for a response from the other flows and services. @NotNull @Suspendable @Override public String call(RPCRequestData requestBody) { - // Useful logging to follow what's happening in the console or logs + // Follow what happens in the console or logs. log.info("MFF: MyFirstFlow.call() called"); - // Show the requestBody in the logs - this can be used to help establish the format for starting a flow on corda + // Show the requestBody in the logs - this can be used to help establish the format for starting a flow on Corda. log.info("MFF: requestBody: " + requestBody.getRequestBody()); - // Deserialize the Json requestBody into the MyfirstFlowStartArgs class using the JsonSerialisation Service + // Deserialize the Json requestBody into the MyfirstFlowStartArgs class using the JsonSerialisation service. MyFirstFlowStartArgs flowArgs = requestBody.getRequestBodyAs(jsonMarshallingService, MyFirstFlowStartArgs.class); - // Obtain the MemberX500Name of counterparty + // Obtain the MemberX500Name of counterparty. MemberX500Name otherMember = flowArgs.otherMember; // Get our identity from the MemberLookup service. @@ -69,19 +69,19 @@ public class MyFirstFlow implements RPCStartableFlow { // Log the message to be sent. log.info("MFF: message.message: " + message.message); - // Start a flow session with the otherMember using the FlowMessaging service - // The otherMember's Virtual Node will run the corresponding MyFirstFlowResponder responder flow + // Start a flow session with the otherMember using the FlowMessaging service. + // The otherMember's virtual node will run the corresponding MyFirstFlowResponder responder flow. FlowSession session = flowMessaging.initiateFlow(otherMember); - // Send the Payload using the send method on the session to the MyFirstFlowResponder Responder flow + // Send the Payload using the send method on the session to the MyFirstFlowResponder responder flow. session.send(message); - // Receive a response from the Responder flow + // Receive a response from the responder flow. Message response = session.receive(Message.class); - // The return value of a RPCStartableFlow must always be a String, this string will be passed + // The return value of a RPCStartableFlow must always be a string. This string will pass // back as the REST RPC response when the status of the flow is queried on Corda, or as the return - // value from the flow when testing using the Simulator + // value from the flow when testing using the simulator. return response.message; } } diff --git a/src/main/java/com/r3/developers/csdetemplate/MyFirstFlowResponder.java b/src/main/java/com/r3/developers/csdetemplate/MyFirstFlowResponder.java index d7fba74..504e0b0 100644 --- a/src/main/java/com/r3/developers/csdetemplate/MyFirstFlowResponder.java +++ b/src/main/java/com/r3/developers/csdetemplate/MyFirstFlowResponder.java @@ -17,19 +17,19 @@ import org.slf4j.LoggerFactory; // Responder flows must inherit from ResponderFlow public class MyFirstFlowResponder implements ResponderFlow { - // It is useful to be able to log messages from the flows for debugging. + // Log messages from the flows for debugging. private final Logger log = LoggerFactory.getLogger(MyFirstFlowResponder.class); - // MemberLookup provides a service for looking up information about members of the Virtual Network which - // this CorDapp is operating in. + // MemberLookup looks for information about members of the virtual network which + // this CorDapp operates in. @CordaInject public MemberLookup memberLookup; public MyFirstFlowResponder() {} - // Responder flows are invoked when an initiating flow makes a call via a session set up with the Virtual - // node hosting the Responder flow. When a responder flow is invoked its call() method is called. - // call() methods must be marked as @Suspendable, this allows Corda to pause mid-execution to wait + // Responder flows are invoked when an initiating flow makes a call via a session set up with the virtual + // node hosting the responder flow. When a responder flow is invoked its call() method is called. + // Call() methods must be marked as @Suspendable, this allows Corda to pause mid-execution to wait // for a response from the other flows and services. // The Call method has the flow session passed in as a parameter by Corda so the session is available to // responder flow code, you don't need to inject the FlowMessaging service. @@ -37,10 +37,10 @@ public class MyFirstFlowResponder implements ResponderFlow { @Override public void call(FlowSession session) { - // Useful logging to follow what's happening in the console or logs + // Follow what happens in the console or logs. log.info("MFF: MyFirstResponderFlow.call() called"); - // Receive the payload and deserialize it into a Message class + // Receive the payload and deserialize it into a message class. Message receivedMessage = session.receive(Message.class); // Log the message as a proxy for performing some useful operation on it. @@ -49,7 +49,7 @@ public class MyFirstFlowResponder implements ResponderFlow { // Get our identity from the MemberLookup service. MemberX500Name ourIdentity = memberLookup.myInfo().getName(); - // Create a response to greet the sender + // Create a message to greet the sender. Message response = new Message(ourIdentity, "Hello " + session.getCounterparty().getCommonName() + ", best wishes from " + ourIdentity.getCommonName()); diff --git a/src/test/java/com/r3/developers/csdetemplate/MyFirstFlowTest.java b/src/test/java/com/r3/developers/csdetemplate/MyFirstFlowTest.java index e343318..9b45d53 100644 --- a/src/test/java/com/r3/developers/csdetemplate/MyFirstFlowTest.java +++ b/src/test/java/com/r3/developers/csdetemplate/MyFirstFlowTest.java @@ -17,32 +17,32 @@ class MyFirstFlowTest { @Test @SuppressWarnings("unchecked") public void test_that_MyFirstFLow_returns_correct_message() { - // Instantiate an instance of the Simulator + // Instantiate an instance of the simulator. Simulator simulator = new Simulator(); - // Create Alice's and Bob HoldingIDs + // Create Alice's and Bob HoldingIDs. HoldingIdentity aliceHoldingID = HoldingIdentity.Companion.create(aliceX500); HoldingIdentity bobHoldingID = HoldingIdentity.Companion.create(bobX500); - // Create Alice and Bob's virtual nodes, including the Class's of the flows which will be registered on each node. - // We don't assign Bob's virtual node to a variable because we don't need it for this particular test. + // Create Alice's and Bob's virtual nodes, including the classes of the flows which will be registered on each node. + // Don't assign Bob's virtual node to a value. You don't need it for this particular test. SimulatedVirtualNode aliceVN = simulator.createVirtualNode(aliceHoldingID, MyFirstFlow.class); simulator.createVirtualNode(bobHoldingID, MyFirstFlowResponder.class); - // Create an instance of the MyFirstFlowStartArgs which contains the request arguments for starting the flow + // Create an instance of the MyFirstFlowStartArgs which contains the request arguments for starting the flow. MyFirstFlowStartArgs myFirstFlowStartArgs = new MyFirstFlowStartArgs(bobX500); - // Create a requestData object + // Create a requestData object. RequestData requestData = RequestData.Companion.create( - "request no 1", // A unique reference for the instance of the flow request - MyFirstFlow.class, // The name of the flow class which is to be started - myFirstFlowStartArgs // The object which contains the start arguments of the flow + "request no 1", // A unique reference for the instance of the flow request. + MyFirstFlow.class, // The name of the flow class which is to be started. + myFirstFlowStartArgs // The object which contains the start arguments of the flow. ); - // Call the Flow on Alice's virtual node and capture the response from the flow + // Call the flow on Alice's virtual node and capture the response. String flowResponse = aliceVN.callFlow(requestData); - // Check that the flow has returned the expected string + // Check that the flow has returned the expected string. assert(flowResponse.equals("Hello Alice, best wishes from Bob")); } } From 370ea175e987fa8d7521bff90b22a992c7b3ed82 Mon Sep 17 00:00:00 2001 From: Niamh25 Date: Thu, 17 Nov 2022 16:34:16 +0000 Subject: [PATCH 14/20] DOC-4345: updated edited Java CSDE template code comments --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index e1a62dc..b7737ee 100644 --- a/build.gradle +++ b/build.gradle @@ -94,7 +94,7 @@ dependencies { testImplementation "org.junit.jupiter:junit-jupiter:$junitVersion" testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitVersion" - // Optional but used by exmaple tests. + // Optional but used by example tests. testImplementation "org.mockito:mockito-core:$mockitoVersion" testImplementation "org.hamcrest:hamcrest-library:$hamcrestVersion" } From fa52064d125354653ca6c822965c1dab54e45018 Mon Sep 17 00:00:00 2001 From: Niamh25 <115650292+Niamh25@users.noreply.github.com> Date: Thu, 17 Nov 2022 17:02:19 +0000 Subject: [PATCH 15/20] Update buildSrc/src/main/java/com/r3/csde/CsdeRpcInterface.java Co-authored-by: Paul Moloney <112477620+paulmoloneyr3@users.noreply.github.com> --- buildSrc/src/main/java/com/r3/csde/CsdeRpcInterface.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/com/r3/csde/CsdeRpcInterface.java b/buildSrc/src/main/java/com/r3/csde/CsdeRpcInterface.java index 3776d84..89d2891 100644 --- a/buildSrc/src/main/java/com/r3/csde/CsdeRpcInterface.java +++ b/buildSrc/src/main/java/com/r3/csde/CsdeRpcInterface.java @@ -204,7 +204,7 @@ public class CsdeRpcInterface { kong.unirest.JsonNode body = response.getBody(); // Do not retry if successful. if(status == 200) { - // Retry until you get an "OK", it may move to "Validating upload", "Persisting CPI". + // Retry until you get an "OK"; it may move to "Validating upload", "Persisting CPI". return !(body.getObject().get("status").equals("OK")); } else if (status == 400){ From f2efd50a4c68b2e1d9a87925c69c9b67a04d1166 Mon Sep 17 00:00:00 2001 From: Niamh25 <115650292+Niamh25@users.noreply.github.com> Date: Thu, 17 Nov 2022 17:02:45 +0000 Subject: [PATCH 16/20] Update src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java Co-authored-by: Paul Moloney <112477620+paulmoloneyr3@users.noreply.github.com> --- src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java b/src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java index 985a25e..c2e6aea 100644 --- a/src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java +++ b/src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java @@ -29,7 +29,7 @@ public class MyFirstFlow implements RPCStartableFlow { public JsonMarshallingService jsonMarshallingService; // FlowMessaging establishes flow sessions between virtual nodes - // that sends and receives payloads between them. + // that send and receive payloads between them. @CordaInject public FlowMessaging flowMessaging; From 573c4c194980b3172eed6b063a2e5fe111b3fc1b Mon Sep 17 00:00:00 2001 From: Niamh25 <115650292+Niamh25@users.noreply.github.com> Date: Thu, 17 Nov 2022 17:02:57 +0000 Subject: [PATCH 17/20] Update src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java Co-authored-by: Paul Moloney <112477620+paulmoloneyr3@users.noreply.github.com> --- src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java b/src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java index c2e6aea..ebbc43c 100644 --- a/src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java +++ b/src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java @@ -57,7 +57,7 @@ public class MyFirstFlow implements RPCStartableFlow { // Deserialize the Json requestBody into the MyfirstFlowStartArgs class using the JsonSerialisation service. MyFirstFlowStartArgs flowArgs = requestBody.getRequestBodyAs(jsonMarshallingService, MyFirstFlowStartArgs.class); - // Obtain the MemberX500Name of counterparty. + // Obtain the MemberX500Name of the counterparty. MemberX500Name otherMember = flowArgs.otherMember; // Get our identity from the MemberLookup service. From 3af97d9cbf254513dc3c1f730ffea2a4eecdd01a Mon Sep 17 00:00:00 2001 From: Niamh25 <115650292+Niamh25@users.noreply.github.com> Date: Tue, 6 Dec 2022 15:57:55 +0000 Subject: [PATCH 18/20] Update CsdeRpcInterface.java --- buildSrc/src/main/java/com/r3/csde/CsdeRpcInterface.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/buildSrc/src/main/java/com/r3/csde/CsdeRpcInterface.java b/buildSrc/src/main/java/com/r3/csde/CsdeRpcInterface.java index 89d2891..39cdc5b 100644 --- a/buildSrc/src/main/java/com/r3/csde/CsdeRpcInterface.java +++ b/buildSrc/src/main/java/com/r3/csde/CsdeRpcInterface.java @@ -204,7 +204,7 @@ public class CsdeRpcInterface { kong.unirest.JsonNode body = response.getBody(); // Do not retry if successful. if(status == 200) { - // Retry until you get an "OK"; it may move to "Validating upload", "Persisting CPI". + // Retry until you get an "OK"; we may see several other responses before the "OK" response. return !(body.getObject().get("status").equals("OK")); } else if (status == 400){ @@ -299,7 +299,7 @@ public class CsdeRpcInterface { LinkedList x500Ids = getConfigX500Ids(); LinkedList OKHoldingShortIds = new LinkedList<>(); - // Check that each identity already exists. + // Create a list of X500 IDs we will not need to create VNodes for. Set existingX500 = new HashSet<>(); kong.unirest.HttpResponse vnodeListResponse = getVNodeInfo(); From d4c4f8d007b69aad8accfa7b6970ba3497b150a2 Mon Sep 17 00:00:00 2001 From: Niamh25 <115650292+Niamh25@users.noreply.github.com> Date: Tue, 6 Dec 2022 16:01:06 +0000 Subject: [PATCH 19/20] Update build.gradle --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index b7737ee..b202de6 100644 --- a/build.gradle +++ b/build.gradle @@ -63,8 +63,8 @@ repositories { // A cordaProvided declaration is required for anything that we use that the Corda API provides. // This is required to allow us to build CorDapp modules as OSGi bundles that CPI and CPB files are then built upon. dependencies { - // Declare a "platform" so that we use the correct set of dependency versions for the version of the - // Corda API specified. + // Declare a "platform" to use the correct set of dependency versions for the version that the + // Corda API specifies. cordaProvided platform("net.corda:corda-api:$cordaApiVersion") // If using transistive dependencies this will provide most of the Corda-API: From 4e6c74989f2f7a3d3c9e2399ce1390ec4c4f7eaa Mon Sep 17 00:00:00 2001 From: Niamh25 <115650292+Niamh25@users.noreply.github.com> Date: Tue, 6 Dec 2022 16:09:54 +0000 Subject: [PATCH 20/20] Update MyFirstFlow.java --- .../com/r3/developers/csdetemplate/MyFirstFlow.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java b/src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java index ebbc43c..b0e5233 100644 --- a/src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java +++ b/src/main/java/com/r3/developers/csdetemplate/MyFirstFlow.java @@ -28,13 +28,13 @@ public class MyFirstFlow implements RPCStartableFlow { @CordaInject public JsonMarshallingService jsonMarshallingService; - // FlowMessaging establishes flow sessions between virtual nodes + // FlowMessaging provides a service that establishes flow sessions between virtual nodes // that send and receive payloads between them. @CordaInject public FlowMessaging flowMessaging; - // MemberLookup looks for information about members of the virtual network - // which this CorDapp operates in. + // MemberLookup provides a service for looking up information about members of the virtual network which + // this CorDapp operates in. @CordaInject public MemberLookup memberLookup; @@ -79,7 +79,7 @@ public class MyFirstFlow implements RPCStartableFlow { // Receive a response from the responder flow. Message response = session.receive(Message.class); - // The return value of a RPCStartableFlow must always be a string. This string will pass + // The return value of a RPCStartableFlow must always be a String. This will be passed // back as the REST RPC response when the status of the flow is queried on Corda, or as the return // value from the flow when testing using the simulator. return response.message; @@ -96,4 +96,4 @@ RequestBody for triggering the flow via http-rpc: "otherMember":"CN=Bob, OU=Test Dept, O=R3, L=London, C=GB" } } - */ \ No newline at end of file + */