2222import java .time .temporal .ChronoUnit ;
2323import java .util .Optional ;
2424import java .util .UUID ;
25+ import java .util .function .Consumer ;
26+ import java .util .logging .Logger ;
2527
2628import com .couchbase .client .core .annotation .Stability ;
2729import com .couchbase .client .core .transaction .CoreTransactionAttemptContext ;
3335import com .couchbase .client .core .transaction .support .AttemptState ;
3436import com .couchbase .client .java .codec .JsonSerializer ;
3537import reactor .core .publisher .Mono ;
38+ import reactor .util .annotation .Nullable ;
3639
3740/**
3841 * To access the ReactiveTransactionAttemptContext held by TransactionAttemptContext
@@ -66,13 +69,7 @@ public static ReactiveTransactionAttemptContext reactive(TransactionAttemptConte
6669 } catch (Throwable err ) {
6770 throw new RuntimeException (err );
6871 }
69- try {
70- Field field = TransactionAttemptContext .class .getDeclaredField ("internal" );
71- field .setAccessible (true );
72- return new ReactiveTransactionAttemptContext ((CoreTransactionAttemptContext ) field .get (atr ), serializer );
73- } catch (Throwable err ) {
74- throw new RuntimeException (err );
75- }
72+ return new ReactiveTransactionAttemptContext (getCore (atr ), serializer );
7673 }
7774
7875 public static TransactionAttemptContext blocking (ReactiveTransactionAttemptContext atr ) {
@@ -84,35 +81,22 @@ public static TransactionAttemptContext blocking(ReactiveTransactionAttemptConte
8481 } catch (Throwable err ) {
8582 throw new RuntimeException (err );
8683 }
87- try {
88- Field field = ReactiveTransactionAttemptContext .class .getDeclaredField ("internal" );
89- field .setAccessible (true );
90- return new TransactionAttemptContext ((CoreTransactionAttemptContext ) field .get (atr ), serializer );
91- } catch (Throwable err ) {
92- throw new RuntimeException (err );
93- }
84+ return new TransactionAttemptContext (getCore (atr ), serializer );
9485 }
9586
9687 public static CoreTransactionLogger getLogger (ReactiveTransactionAttemptContext attemptContextReactive ) {
97- // todo gp needed?
98- return null ;
99- // return attemptContextReactive;
88+ return attemptContextReactive .logger ();
89+ }
90+
91+ public static CoreTransactionLogger getLogger (TransactionAttemptContext attemptContextReactive ) {
92+ return attemptContextReactive .logger ();
10093 }
10194
10295 // todo gp needed?
10396 @ Stability .Internal
10497 public static CoreTransactionAttemptContext newCoreTranactionAttemptContext (ReactiveTransactions transactions ) {
105- // PerTransactionConfig perConfig = PerTransactionConfigBuilder.create().build();
106- // MergedTransactionConfig merged = new MergedTransactionConfig(transactions.config(), Optional.of(perConfig));
107- //
108- // TransactionContext overall = new TransactionContext(
109- // transactions.cleanup().clusterData().cluster().environment().requestTracer(),
110- // transactions.cleanup().clusterData().cluster().environment().eventBus(),
111- // UUID.randomUUID().toString(), now(), Duration.ZERO, merged);
11298
11399 String txnId = UUID .randomUUID ().toString ();
114- // overall.LOGGER.info(configDebug(transactions.config(), perConfig));
115-
116100 CoreTransactionsReactive coreTransactionsReactive ;
117101 try {
118102 Field field = ReactiveTransactions .class .getDeclaredField ("internal" );
@@ -122,27 +106,19 @@ public static CoreTransactionAttemptContext newCoreTranactionAttemptContext(Reac
122106 throw new RuntimeException (err );
123107 }
124108
125- CoreTransactionOptions perConfig = new CoreTransactionOptions (Optional .empty (),
126- Optional .empty (),
127- Optional .empty (),
128- Optional .of (Duration .ofMinutes (10 )),
129- Optional .empty (),
130- Optional .empty ());
109+ CoreTransactionOptions perConfig = new CoreTransactionOptions (Optional .empty (), Optional .empty (), Optional .empty (),
110+ Optional .of (Duration .ofMinutes (10 )), Optional .empty (), Optional .empty ());
131111
132112 CoreMergedTransactionConfig merged = new CoreMergedTransactionConfig (coreTransactionsReactive .config (),
133113 Optional .ofNullable (perConfig ));
134114 CoreTransactionContext overall = new CoreTransactionContext (
135115 coreTransactionsReactive .core ().context ().environment ().requestTracer (),
136116 coreTransactionsReactive .core ().context ().environment ().eventBus (), UUID .randomUUID ().toString (), merged ,
137117 coreTransactionsReactive .core ().transactionsCleanup ());
138- // overall.LOGGER.info(configDebug(config, perConfig, cleanup.clusterData().cluster().core()));
139118
140119 CoreTransactionAttemptContext coreTransactionAttemptContext = coreTransactionsReactive .createAttemptContext (overall ,
141120 merged , txnId );
142121 return coreTransactionAttemptContext ;
143- // ReactiveTransactionAttemptContext reactiveTransactionAttemptContext = new ReactiveTransactionAttemptContext(
144- // coreTransactionAttemptContext, null);
145- // return reactiveTransactionAttemptContext;
146122 }
147123
148124 private static Duration now () {
@@ -168,15 +144,13 @@ public static CoreTransactionAttemptContext getCore(ReactiveTransactionAttemptCo
168144 }
169145
170146 public static CoreTransactionAttemptContext getCore (TransactionAttemptContext atr ) {
171- CoreTransactionAttemptContext coreTransactionsReactive ;
172147 try {
173148 Field field = TransactionAttemptContext .class .getDeclaredField ("internal" );
174149 field .setAccessible (true );
175- coreTransactionsReactive = (CoreTransactionAttemptContext ) field .get (atr );
150+ return (CoreTransactionAttemptContext ) field .get (atr );
176151 } catch (Throwable err ) {
177152 throw new RuntimeException (err );
178153 }
179- return coreTransactionsReactive ;
180154 }
181155
182156 public static Mono <Void > implicitCommit (ReactiveTransactionAttemptContext atr , boolean b ) {
@@ -186,17 +160,17 @@ public static Mono<Void> implicitCommit(ReactiveTransactionAttemptContext atr, b
186160 // CoreTransactionAttemptContext.class.getDeclaredMethod("implicitCommit", Boolean.class);
187161 Method [] methods = CoreTransactionAttemptContext .class .getDeclaredMethods ();
188162 Method method = null ;
189- for (Method m : methods ){
190- if ( m .getName ().equals ("implicitCommit" )){
163+ for (Method m : methods ) {
164+ if ( m .getName ().equals ("implicitCommit" )) {
191165 method = m ;
192166 break ;
193167 }
194168 }
195- if (method == null ){
169+ if (method == null ) {
196170 throw new RuntimeException ("did not find implicitCommit method" );
197171 }
198172 method .setAccessible (true );
199- return (Mono <Void >)method .invoke (coreTransactionsReactive , b );
173+ return (Mono <Void >) method .invoke (coreTransactionsReactive , b );
200174 } catch (Throwable err ) {
201175 throw new RuntimeException (err );
202176 }
@@ -214,10 +188,30 @@ public static AttemptState getState(ReactiveTransactionAttemptContext atr) {
214188 }
215189 }
216190
217- public static ReactiveTransactionAttemptContext createReactiveTransactionAttemptContext (CoreTransactionAttemptContext core , JsonSerializer jsonSerializer ) {
191+ public static ReactiveTransactionAttemptContext createReactiveTransactionAttemptContext (
192+ CoreTransactionAttemptContext core , JsonSerializer jsonSerializer ) {
218193 return new ReactiveTransactionAttemptContext (core , jsonSerializer );
219194 }
220195
196+ public static CoreTransactionsReactive getCoreTransactionsReactive (ReactiveTransactions transactions ) {
197+ try {
198+ Field field = ReactiveTransactions .class .getDeclaredField ("internal" );
199+ field .setAccessible (true );
200+ return (CoreTransactionsReactive ) field .get (transactions );
201+ } catch (Throwable err ) {
202+ throw new RuntimeException (err );
203+ }
204+ }
205+
206+ public static TransactionAttemptContext newTransactionAttemptContext (CoreTransactionAttemptContext ctx ,
207+ JsonSerializer jsonSerializer ) {
208+ return new TransactionAttemptContext (ctx , jsonSerializer );
209+ }
210+
211+ public static TransactionResult run (Transactions transactions , Consumer <TransactionAttemptContext > transactionLogic , CoreTransactionOptions coreTransactionOptions ) {
212+ return reactive (transactions ).runBlocking (transactionLogic , coreTransactionOptions );
213+ }
214+
221215 // todo gp if needed let's expose in the SDK
222216 // static private String configDebug(TransactionConfig config, PerTransactionConfig perConfig) {
223217 // StringBuilder sb = new StringBuilder();
0 commit comments