1
1
/*******************************************************************************
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
3
3
* Author: Ghareeb Falazi
4
4
*
5
5
* This program and the accompanying materials are made available under the
12
12
package blockchains .iaas .uni .stuttgart .de .jsonrpc ;
13
13
14
14
import java .util .List ;
15
+ import java .util .UUID ;
15
16
16
17
import blockchains .iaas .uni .stuttgart .de .api .exceptions .InvalidScipParameterException ;
17
18
import blockchains .iaas .uni .stuttgart .de .management .BlockchainManager ;
18
19
import blockchains .iaas .uni .stuttgart .de .api .model .Parameter ;
19
20
import blockchains .iaas .uni .stuttgart .de .api .model .QueryResult ;
20
21
import 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 ;
21
24
import com .github .arteam .simplejsonrpc .core .annotation .JsonRpcMethod ;
22
25
import com .github .arteam .simplejsonrpc .core .annotation .JsonRpcOptional ;
23
26
import com .github .arteam .simplejsonrpc .core .annotation .JsonRpcParam ;
@@ -34,6 +37,7 @@ public class BalService {
34
37
private final String blockchainType ;
35
38
private final String blockchainId ;
36
39
private final String smartContractPath ;
40
+ private static final String DTX_ID_FIELD_NAME = "dtx_id" ;
37
41
38
42
@ JsonRpcMethod
39
43
public String Invoke (
@@ -47,9 +51,15 @@ public String Invoke(
47
51
@ JsonRpcParam ("signature" ) String signature
48
52
) {
49
53
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
+ }
53
63
54
64
return "OK" ;
55
65
}
@@ -122,4 +132,32 @@ public QueryResult Query(
122
132
123
133
throw new InvalidScipParameterException ();
124
134
}
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
+ }
125
163
}
0 commit comments