4
4
import oracle .ucp .jdbc .PoolDataSource ;
5
5
import oracle .ucp .jdbc .PoolDataSourceFactory ;
6
6
7
- import javax .jms .JMSException ;
8
- import java .io .IOException ;
9
7
import java .nio .file .Path ;
10
8
import java .nio .file .Paths ;
11
9
import java .sql .CallableStatement ;
12
10
import java .sql .Connection ;
13
- import java . util . HashMap ;
14
- import java . util . Map ;
11
+
12
+ import org . json .* ;
15
13
16
14
import static java .lang .System .*;
17
15
18
16
19
17
public class TravelAgencyApplication {
20
18
21
- Map <String , TravelBookingSaga > sagaParticipantReplies = new HashMap ();
22
-
23
19
public static void main (String [] args ) throws Exception {
24
20
setProperty ("oracle.jdbc.fanEnabled" , "false" );
25
21
new TravelAgencyApplication ().bookTravel ();
26
22
}
27
23
24
+ //very simple single requests (ie does not support concurrent requests)
25
+ String flightStatus = "" , hotelStatus = "" , carStatus = "" ;
26
+
28
27
public void bookTravel () throws Exception {
29
28
//Get all values...
30
29
String password = PromptUtil .getValueFromPromptSecure ("Enter password" , null );
@@ -64,12 +63,11 @@ public void bookTravel() throws Exception {
64
63
runSaga (initiator , saga );
65
64
}
66
65
67
- private void runSaga (String initiator , AQjmsSaga saga ) throws JMSException , IOException {
66
+ private void runSaga (String initiator , AQjmsSaga saga ) throws Exception {
68
67
out .println ("Beginning saga..." );
69
68
String sagaId = saga .beginSaga (initiator );
70
69
out .println ("Saga begun sagaId:" + sagaId );
71
70
72
- //Prompt for coordinator...
73
71
// String coordinator = PromptUtil.getValueFromPrompt("Enter coordinator name", "TravelCoordinator");
74
72
String coordinator = "TravelCoordinator" ;
75
73
@@ -82,33 +80,44 @@ private void runSaga(String initiator, AQjmsSaga saga) throws JMSException, IOEx
82
80
String payload = "[{\" flight\" : \" myflight\" }]" ;
83
81
out .println ("Enrolling Flight(Java) participant in sagaId:" + sagaId );
84
82
saga .enrollParticipant (sagaId , "admin" , initiator , "FlightJava" , coordinator , payload );
83
+ flightStatus = "waitingforreply" ;
85
84
}
86
85
if (isAddHotel ) {
87
86
String payload = "[{\" hotel\" : \" myhotel\" }]" ;
88
87
out .println ("Enrolling Hotel(Java) participant in sagaId:" + sagaId );
89
88
saga .enrollParticipant (sagaId , "admin" , initiator , "HotelJava" , coordinator , payload );
89
+ hotelStatus = "waitingforreply" ;
90
90
}
91
91
if (isAddCar ) {
92
92
String payload = "[{\" car\" : \" mycar\" }]" ;
93
93
out .println ("Enrolling Car(Java) participant in sagaId:" + sagaId );
94
94
saga .enrollParticipant (sagaId , "admin" , initiator , "CarJava" , coordinator , payload );
95
+ carStatus = "waitingforreply" ;
96
+ }
97
+ boolean isAllRepliesReceived = false ;
98
+ while (flightStatus .equals ("waitingforreply" ) || hotelStatus .equals ("waitingforreply" ) || carStatus .equals ("waitingforreply" )) {
99
+ Thread .sleep (3 * 1000 );
95
100
}
96
-
97
- //todo wait/poll for all replies
98
- out .println ("----> Hit enter once all replies are received " );
99
- in .read ();
100
101
String commitOrRollback = PromptUtil .getValueFromPrompt ("Commit or Rollback Saga? (c or r)" , "r" );
101
102
if (commitOrRollback .equalsIgnoreCase ("c" )) {
102
103
log ("about to commit" );
103
104
saga .commitSaga (sagaId , initiator );
104
105
log ("finished commit" );
106
+ createParticipantStatesForSagaId (sagaId );
105
107
} else {
106
108
log ("about to rollback" );
107
109
saga .rollbackSaga (sagaId , initiator );
108
110
log ("finished rollback" );
111
+ createParticipantStatesForSagaId (sagaId );
109
112
}
110
113
}
111
114
115
+ private void createParticipantStatesForSagaId (String sagaId ) {
116
+ flightStatus = "" ;
117
+ hotelStatus = "" ;
118
+ carStatus = "" ;
119
+ }
120
+
112
121
113
122
public class TravelAgencyTestListener extends AQjmsSagaMessageListener {
114
123
@@ -119,15 +128,11 @@ public String request(String sagaId, String payload) {
119
128
120
129
@ Override
121
130
public void response (String sagaId , String payload ) {
122
- err .println (payload );
123
- out .println ("Got re!" );
124
- synchronized (sagaParticipantReplies ) {
125
- TravelBookingSaga travelBookingSaga = sagaParticipantReplies .get (sagaId );
126
- if (travelBookingSaga == null ) {
127
- TravelBookingSaga newTravelBookingSaga = new TravelBookingSaga ();
128
- newTravelBookingSaga .carStatus = payload ;
129
- }
130
- }
131
+ out .println ("Response received:" + payload );
132
+ JSONObject obj = new JSONObject (payload );
133
+ if (obj .getString ("HotelJava" ) != null ) hotelStatus = "replyReceived" ;
134
+ else if (obj .getString ("CarJava" ) != null ) carStatus = "replyReceived" ;
135
+ else if (obj .getString ("FlightJava" ) != null ) flightStatus = "replyReceived" ;
131
136
}
132
137
133
138
@ Override
@@ -153,10 +158,6 @@ public void afterRollback(String sagaId) {
153
158
}
154
159
155
160
156
- class TravelBookingSaga {
157
- String hotelStatus , carStatus , flightStatus ;
158
- }
159
-
160
161
void log (String msg ) {
161
162
out .println ("TravelAgencyApplication.log msg:" + msg );
162
163
}
0 commit comments