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-
2319public static void main (String [] args ) throws Exception {
2420setProperty ("oracle.jdbc.fanEnabled" , "false" );
2521new TravelAgencyApplication ().bookTravel ();
2622}
2723
24+ //very simple single requests (ie does not support concurrent requests)
25+ String flightStatus = "" , hotelStatus = "" , carStatus = "" ;
26+
2827public void bookTravel () throws Exception {
2928//Get all values...
3029String password = PromptUtil .getValueFromPromptSecure ("Enter password" , null );
@@ -64,12 +63,11 @@ public void bookTravel() throws Exception {
6463runSaga (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 {
6867out .println ("Beginning saga..." );
6968String sagaId = saga .beginSaga (initiator );
7069out .println ("Saga begun sagaId:" + sagaId );
7170
72- //Prompt for coordinator...
7371// String coordinator = PromptUtil.getValueFromPrompt("Enter coordinator name", "TravelCoordinator");
7472String coordinator = "TravelCoordinator" ;
7573
@@ -82,33 +80,44 @@ private void runSaga(String initiator, AQjmsSaga saga) throws JMSException, IOEx
8280String payload = "[{\" flight\" : \" myflight\" }]" ;
8381out .println ("Enrolling Flight(Java) participant in sagaId:" + sagaId );
8482saga .enrollParticipant (sagaId , "admin" , initiator , "FlightJava" , coordinator , payload );
83+ flightStatus = "waitingforreply" ;
8584}
8685if (isAddHotel ) {
8786String payload = "[{\" hotel\" : \" myhotel\" }]" ;
8887out .println ("Enrolling Hotel(Java) participant in sagaId:" + sagaId );
8988saga .enrollParticipant (sagaId , "admin" , initiator , "HotelJava" , coordinator , payload );
89+ hotelStatus = "waitingforreply" ;
9090}
9191if (isAddCar ) {
9292String payload = "[{\" car\" : \" mycar\" }]" ;
9393out .println ("Enrolling Car(Java) participant in sagaId:" + sagaId );
9494saga .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 ();
100101String commitOrRollback = PromptUtil .getValueFromPrompt ("Commit or Rollback Saga? (c or r)" , "r" );
101102if (commitOrRollback .equalsIgnoreCase ("c" )) {
102103log ("about to commit" );
103104saga .commitSaga (sagaId , initiator );
104105log ("finished commit" );
106+ createParticipantStatesForSagaId (sagaId );
105107} else {
106108log ("about to rollback" );
107109saga .rollbackSaga (sagaId , initiator );
108110log ("finished rollback" );
111+ createParticipantStatesForSagaId (sagaId );
109112}
110113}
111114
115+ private void createParticipantStatesForSagaId (String sagaId ) {
116+ flightStatus = "" ;
117+ hotelStatus = "" ;
118+ carStatus = "" ;
119+ }
120+
112121
113122public class TravelAgencyTestListener extends AQjmsSagaMessageListener {
114123
@@ -119,15 +128,11 @@ public String request(String sagaId, String payload) {
119128
120129@ Override
121130public 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-
160161void log (String msg ) {
161162out .println ("TravelAgencyApplication.log msg:" + msg );
162163}
0 commit comments