@@ -28,6 +28,8 @@ public class AnnouncementClient implements Announcement {
2828 private final com .oracle .bmc .auth .AbstractAuthenticationDetailsProvider
2929 authenticationDetailsProvider ;
3030
31+ private final com .oracle .bmc .retrier .RetryConfiguration retryConfiguration ;
32+
3133 /**
3234 * Creates a new service instance using the given authentication provider.
3335 * @param authenticationDetailsProvider The authentication details provider, required.
@@ -194,7 +196,15 @@ public AnnouncementClient(
194196 .createRequestSigner (SERVICE , authenticationDetailsProvider ));
195197 }
196198 }
197- this .client = restClientFactory .create (defaultRequestSigner , requestSigners , configuration );
199+
200+ final com .oracle .bmc .ClientConfiguration clientConfigurationToUse =
201+ (configuration != null )
202+ ? configuration
203+ : com .oracle .bmc .ClientConfiguration .builder ().build ();
204+ this .retryConfiguration = clientConfigurationToUse .getRetryConfiguration ();
205+ this .client =
206+ restClientFactory .create (
207+ defaultRequestSigner , requestSigners , clientConfigurationToUse );
198208
199209 if (this .authenticationDetailsProvider instanceof com .oracle .bmc .auth .RegionProvider ) {
200210 com .oracle .bmc .auth .RegionProvider provider =
@@ -294,117 +304,120 @@ public void close() {
294304 @ Override
295305 public GetAnnouncementResponse getAnnouncement (GetAnnouncementRequest request ) {
296306 LOG .trace ("Called getAnnouncement" );
297- request = GetAnnouncementConverter .interceptRequest (request );
307+ final GetAnnouncementRequest interceptedRequest =
308+ GetAnnouncementConverter .interceptRequest (request );
298309 com .oracle .bmc .http .internal .WrappedInvocationBuilder ib =
299- GetAnnouncementConverter .fromRequest (client , request );
310+ GetAnnouncementConverter .fromRequest (client , interceptedRequest );
300311 com .google .common .base .Function <javax .ws .rs .core .Response , GetAnnouncementResponse >
301312 transformer = GetAnnouncementConverter .fromResponse ();
302313
303- int attempts = 0 ;
304- while (true ) {
305- try {
306- javax .ws .rs .core .Response response = client .get (ib , request );
307- return transformer .apply (response );
308- } catch (com .oracle .bmc .model .BmcException e ) {
309- if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
310- && canRetryRequestIfRefreshableAuthTokenUsed (e )) {
311- continue ;
312- } else {
313- throw e ;
314- }
315- }
316- }
314+ final com .oracle .bmc .retrier .BmcGenericRetrier retrier =
315+ com .oracle .bmc .retrier .Retriers .createPreferredRetrier (
316+ interceptedRequest .getRetryConfiguration (), retryConfiguration );
317+ return retrier .execute (
318+ interceptedRequest ,
319+ retryRequest -> {
320+ final com .oracle .bmc .retrier .TokenRefreshRetrier tokenRefreshRetrier =
321+ new com .oracle .bmc .retrier .TokenRefreshRetrier (
322+ authenticationDetailsProvider );
323+ return tokenRefreshRetrier .execute (
324+ retryRequest ,
325+ retriedRequest -> {
326+ javax .ws .rs .core .Response response = client .get (ib , retriedRequest );
327+ return transformer .apply (response );
328+ });
329+ });
317330 }
318331
319332 @ Override
320333 public GetAnnouncementUserStatusResponse getAnnouncementUserStatus (
321334 GetAnnouncementUserStatusRequest request ) {
322335 LOG .trace ("Called getAnnouncementUserStatus" );
323- request = GetAnnouncementUserStatusConverter .interceptRequest (request );
336+ final GetAnnouncementUserStatusRequest interceptedRequest =
337+ GetAnnouncementUserStatusConverter .interceptRequest (request );
324338 com .oracle .bmc .http .internal .WrappedInvocationBuilder ib =
325- GetAnnouncementUserStatusConverter .fromRequest (client , request );
339+ GetAnnouncementUserStatusConverter .fromRequest (client , interceptedRequest );
326340 com .google .common .base .Function <
327341 javax .ws .rs .core .Response , GetAnnouncementUserStatusResponse >
328342 transformer = GetAnnouncementUserStatusConverter .fromResponse ();
329343
330- int attempts = 0 ;
331- while (true ) {
332- try {
333- javax .ws .rs .core .Response response = client .get (ib , request );
334- return transformer .apply (response );
335- } catch (com .oracle .bmc .model .BmcException e ) {
336- if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
337- && canRetryRequestIfRefreshableAuthTokenUsed (e )) {
338- continue ;
339- } else {
340- throw e ;
341- }
342- }
343- }
344+ final com .oracle .bmc .retrier .BmcGenericRetrier retrier =
345+ com .oracle .bmc .retrier .Retriers .createPreferredRetrier (
346+ interceptedRequest .getRetryConfiguration (), retryConfiguration );
347+ return retrier .execute (
348+ interceptedRequest ,
349+ retryRequest -> {
350+ final com .oracle .bmc .retrier .TokenRefreshRetrier tokenRefreshRetrier =
351+ new com .oracle .bmc .retrier .TokenRefreshRetrier (
352+ authenticationDetailsProvider );
353+ return tokenRefreshRetrier .execute (
354+ retryRequest ,
355+ retriedRequest -> {
356+ javax .ws .rs .core .Response response = client .get (ib , retriedRequest );
357+ return transformer .apply (response );
358+ });
359+ });
344360 }
345361
346362 @ Override
347363 public ListAnnouncementsResponse listAnnouncements (ListAnnouncementsRequest request ) {
348364 LOG .trace ("Called listAnnouncements" );
349- request = ListAnnouncementsConverter .interceptRequest (request );
365+ final ListAnnouncementsRequest interceptedRequest =
366+ ListAnnouncementsConverter .interceptRequest (request );
350367 com .oracle .bmc .http .internal .WrappedInvocationBuilder ib =
351- ListAnnouncementsConverter .fromRequest (client , request );
368+ ListAnnouncementsConverter .fromRequest (client , interceptedRequest );
352369 com .google .common .base .Function <javax .ws .rs .core .Response , ListAnnouncementsResponse >
353370 transformer = ListAnnouncementsConverter .fromResponse ();
354371
355- int attempts = 0 ;
356- while (true ) {
357- try {
358- javax .ws .rs .core .Response response = client .get (ib , request );
359- return transformer .apply (response );
360- } catch (com .oracle .bmc .model .BmcException e ) {
361- if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
362- && canRetryRequestIfRefreshableAuthTokenUsed (e )) {
363- continue ;
364- } else {
365- throw e ;
366- }
367- }
368- }
372+ final com .oracle .bmc .retrier .BmcGenericRetrier retrier =
373+ com .oracle .bmc .retrier .Retriers .createPreferredRetrier (
374+ interceptedRequest .getRetryConfiguration (), retryConfiguration );
375+ return retrier .execute (
376+ interceptedRequest ,
377+ retryRequest -> {
378+ final com .oracle .bmc .retrier .TokenRefreshRetrier tokenRefreshRetrier =
379+ new com .oracle .bmc .retrier .TokenRefreshRetrier (
380+ authenticationDetailsProvider );
381+ return tokenRefreshRetrier .execute (
382+ retryRequest ,
383+ retriedRequest -> {
384+ javax .ws .rs .core .Response response = client .get (ib , retriedRequest );
385+ return transformer .apply (response );
386+ });
387+ });
369388 }
370389
371390 @ Override
372391 public UpdateAnnouncementUserStatusResponse updateAnnouncementUserStatus (
373392 UpdateAnnouncementUserStatusRequest request ) {
374393 LOG .trace ("Called updateAnnouncementUserStatus" );
375- request = UpdateAnnouncementUserStatusConverter .interceptRequest (request );
394+ final UpdateAnnouncementUserStatusRequest interceptedRequest =
395+ UpdateAnnouncementUserStatusConverter .interceptRequest (request );
376396 com .oracle .bmc .http .internal .WrappedInvocationBuilder ib =
377- UpdateAnnouncementUserStatusConverter .fromRequest (client , request );
397+ UpdateAnnouncementUserStatusConverter .fromRequest (client , interceptedRequest );
378398 com .google .common .base .Function <
379399 javax .ws .rs .core .Response , UpdateAnnouncementUserStatusResponse >
380400 transformer = UpdateAnnouncementUserStatusConverter .fromResponse ();
381401
382- int attempts = 0 ;
383- while (true ) {
384- try {
385- javax .ws .rs .core .Response response =
386- client .put (ib , request .getStatusDetails (), request );
387- return transformer .apply (response );
388- } catch (com .oracle .bmc .model .BmcException e ) {
389- if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
390- && canRetryRequestIfRefreshableAuthTokenUsed (e )) {
391- continue ;
392- } else {
393- throw e ;
394- }
395- }
396- }
397- }
398-
399- private boolean canRetryRequestIfRefreshableAuthTokenUsed (com .oracle .bmc .model .BmcException e ) {
400- if (e .getStatusCode () == 401
401- && this .authenticationDetailsProvider
402- instanceof com .oracle .bmc .auth .RefreshableOnNotAuthenticatedProvider ) {
403- ((com .oracle .bmc .auth .RefreshableOnNotAuthenticatedProvider )
404- this .authenticationDetailsProvider )
405- .refresh ();
406- return true ;
407- }
408- return false ;
402+ final com .oracle .bmc .retrier .BmcGenericRetrier retrier =
403+ com .oracle .bmc .retrier .Retriers .createPreferredRetrier (
404+ interceptedRequest .getRetryConfiguration (), retryConfiguration );
405+ return retrier .execute (
406+ interceptedRequest ,
407+ retryRequest -> {
408+ final com .oracle .bmc .retrier .TokenRefreshRetrier tokenRefreshRetrier =
409+ new com .oracle .bmc .retrier .TokenRefreshRetrier (
410+ authenticationDetailsProvider );
411+ return tokenRefreshRetrier .execute (
412+ retryRequest ,
413+ retriedRequest -> {
414+ javax .ws .rs .core .Response response =
415+ client .put (
416+ ib ,
417+ retriedRequest .getStatusDetails (),
418+ retriedRequest );
419+ return transformer .apply (response );
420+ });
421+ });
409422 }
410423}
0 commit comments