11/*******************************************************************************
2- * Copyright (c) 2019 Institute for the Architecture of Application System - University of Stuttgart
2+ * Copyright (c) 2019-2023 Institute for the Architecture of Application System - University of Stuttgart
33 * Author: Ghareeb Falazi
44 *
55 * This program and the accompanying materials are made available under the
1212package blockchains .iaas .uni .stuttgart .de .jsonrpc ;
1313
1414import java .util .List ;
15+ import java .util .UUID ;
1516
1617import blockchains .iaas .uni .stuttgart .de .api .exceptions .InvalidScipParameterException ;
1718import blockchains .iaas .uni .stuttgart .de .management .BlockchainManager ;
1819import blockchains .iaas .uni .stuttgart .de .api .model .Parameter ;
1920import blockchains .iaas .uni .stuttgart .de .api .model .QueryResult ;
2021import blockchains .iaas .uni .stuttgart .de .api .model .TimeFrame ;
22+ import blockchains .iaas .uni .stuttgart .de .management .tccsci .DistributedTransactionManager ;
23+ import blockchains .iaas .uni .stuttgart .de .management .tccsci .DistributedTransactionRepository ;
2124import com .github .arteam .simplejsonrpc .core .annotation .JsonRpcMethod ;
2225import com .github .arteam .simplejsonrpc .core .annotation .JsonRpcOptional ;
2326import com .github .arteam .simplejsonrpc .core .annotation .JsonRpcParam ;
@@ -34,6 +37,7 @@ public class BalService {
3437 private final String blockchainType ;
3538 private final String blockchainId ;
3639 private final String smartContractPath ;
40+ private static final String DTX_ID_FIELD_NAME = "dtx_id" ;
3741
3842 @ JsonRpcMethod
3943 public String Invoke (
@@ -47,9 +51,15 @@ public String Invoke(
4751 @ JsonRpcParam ("signature" ) String signature
4852 ) {
4953 log .info ("Invoke method is executed!" );
50- BlockchainManager manager = new BlockchainManager ();
51- manager .invokeSmartContractFunction (blockchainId , smartContractPath , functionIdentifier , inputs , outputs ,
52- requiredConfidence , callbackUrl , timeoutMillis , correlationId , signature );
54+ if (inputs .stream ().anyMatch (p -> p .getName ().equals (DTX_ID_FIELD_NAME ))) {
55+ DistributedTransactionManager distributedTransactionManager = new DistributedTransactionManager ();
56+ distributedTransactionManager .invokeSc (blockchainId , smartContractPath , functionIdentifier , inputs , outputs ,
57+ requiredConfidence , callbackUrl , timeoutMillis , correlationId , signature );
58+ } else {
59+ BlockchainManager manager = new BlockchainManager ();
60+ manager .invokeSmartContractFunction (blockchainId , smartContractPath , functionIdentifier , inputs , outputs ,
61+ requiredConfidence , callbackUrl , timeoutMillis , correlationId , signature );
62+ }
5363
5464 return "OK" ;
5565 }
@@ -122,4 +132,32 @@ public QueryResult Query(
122132
123133 throw new InvalidScipParameterException ();
124134 }
135+
136+ @ JsonRpcMethod
137+ public String Start_Dtx () {
138+ log .info ("Start_Dtx method is executed!" );
139+ DistributedTransactionManager manager = new DistributedTransactionManager ();
140+
141+ return manager .startDtx ().toString ();
142+ }
143+
144+ @ JsonRpcMethod
145+ public String Commit_Dtx (@ JsonRpcParam (DTX_ID_FIELD_NAME ) String dtxId ) {
146+ log .info ("Commit_Dtx method is executed!" );
147+ UUID uuid = UUID .fromString (dtxId );
148+ DistributedTransactionManager manager = new DistributedTransactionManager ();
149+ manager .commitDtx (uuid );
150+
151+ return "OK" ;
152+ }
153+
154+ @ JsonRpcMethod
155+ public String Abort_Dtx (@ JsonRpcParam (DTX_ID_FIELD_NAME ) String dtxId ) {
156+ log .info ("Abort_Dtx method is executed!" );
157+ UUID uuid = UUID .fromString (dtxId );
158+ DistributedTransactionManager manager = new DistributedTransactionManager ();
159+ manager .abortDtx (uuid );
160+
161+ return "OK" ;
162+ }
125163}
0 commit comments