44import oracle .ucp .jdbc .PoolDataSource ;
55import oracle .ucp .jdbc .PoolDataSourceFactory ;
66
7- import javax .jms .JMSException ;
8- import java .io .IOException ;
97import java .nio .file .Path ;
108import java .nio .file .Paths ;
119import java .sql .CallableStatement ;
1210import java .sql .Connection ;
13- import java . util . HashMap ;
14- import java . util . Map ;
11+
12+ import org . json .* ;
1513
1614import static java .lang .System .*;
1715
1816
1917public class TravelAgencyApplication {
2018
21- Map <String , TravelBookingSaga > sagaParticipantReplies = new HashMap ();
22-
2319 public static void main (String [] args ) throws Exception {
2420 setProperty ("oracle.jdbc.fanEnabled" , "false" );
2521 new TravelAgencyApplication ().bookTravel ();
2622 }
2723
24+ //very simple single requests (ie does not support concurrent requests)
25+ String flightStatus = "" , hotelStatus = "" , carStatus = "" ;
26+
2827 public void bookTravel () throws Exception {
2928 //Get all values...
3029 String password = PromptUtil .getValueFromPromptSecure ("Enter password" , null );
@@ -64,12 +63,11 @@ public void bookTravel() throws Exception {
6463 runSaga (initiator , saga );
6564 }
6665
67- private void runSaga (String initiator , AQjmsSaga saga ) throws JMSException , IOException {
66+ private void runSaga (String initiator , AQjmsSaga saga ) throws Exception {
6867 out .println ("Beginning saga..." );
6968 String sagaId = saga .beginSaga (initiator );
7069 out .println ("Saga begun sagaId:" + sagaId );
7170
72- //Prompt for coordinator...
7371// String coordinator = PromptUtil.getValueFromPrompt("Enter coordinator name", "TravelCoordinator");
7472 String coordinator = "TravelCoordinator" ;
7573
@@ -82,33 +80,44 @@ private void runSaga(String initiator, AQjmsSaga saga) throws JMSException, IOEx
8280 String payload = "[{\" flight\" : \" myflight\" }]" ;
8381 out .println ("Enrolling Flight(Java) participant in sagaId:" + sagaId );
8482 saga .enrollParticipant (sagaId , "admin" , initiator , "FlightJava" , coordinator , payload );
83+ flightStatus = "waitingforreply" ;
8584 }
8685 if (isAddHotel ) {
8786 String payload = "[{\" hotel\" : \" myhotel\" }]" ;
8887 out .println ("Enrolling Hotel(Java) participant in sagaId:" + sagaId );
8988 saga .enrollParticipant (sagaId , "admin" , initiator , "HotelJava" , coordinator , payload );
89+ hotelStatus = "waitingforreply" ;
9090 }
9191 if (isAddCar ) {
9292 String payload = "[{\" car\" : \" mycar\" }]" ;
9393 out .println ("Enrolling Car(Java) participant in sagaId:" + sagaId );
9494 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 );
95100 }
96-
97- //todo wait/poll for all replies
98- out .println ("----> Hit enter once all replies are received " );
99- in .read ();
100101 String commitOrRollback = PromptUtil .getValueFromPrompt ("Commit or Rollback Saga? (c or r)" , "r" );
101102 if (commitOrRollback .equalsIgnoreCase ("c" )) {
102103 log ("about to commit" );
103104 saga .commitSaga (sagaId , initiator );
104105 log ("finished commit" );
106+ createParticipantStatesForSagaId (sagaId );
105107 } else {
106108 log ("about to rollback" );
107109 saga .rollbackSaga (sagaId , initiator );
108110 log ("finished rollback" );
111+ createParticipantStatesForSagaId (sagaId );
109112 }
110113 }
111114
115+ private void createParticipantStatesForSagaId (String sagaId ) {
116+ flightStatus = "" ;
117+ hotelStatus = "" ;
118+ carStatus = "" ;
119+ }
120+
112121
113122 public class TravelAgencyTestListener extends AQjmsSagaMessageListener {
114123
@@ -119,15 +128,11 @@ public String request(String sagaId, String payload) {
119128
120129 @ Override
121130 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" ;
131136 }
132137
133138 @ Override
@@ -153,10 +158,6 @@ public void afterRollback(String sagaId) {
153158 }
154159
155160
156- class TravelBookingSaga {
157- String hotelStatus , carStatus , flightStatus ;
158- }
159-
160161 void log (String msg ) {
161162 out .println ("TravelAgencyApplication.log msg:" + msg );
162163 }
0 commit comments