You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by ju...@apache.org on 2019/10/09 07:39:18 UTC

[fineract-cn-async] 12/33: fixed possible NoSuchElementException when retrieving user context

This is an automated email from the ASF dual-hosted git repository.

juhan pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract-cn-async.git

commit 91d3ac16be246cc7c6b0e481d2e7d3635954a1be
Author: mgeiss <mg...@mifos.org>
AuthorDate: Fri Jun 16 11:28:57 2017 +0200

    fixed possible NoSuchElementException when retrieving user context
---
 .../core/async/core/DelegatingContextCallable.java | 26 ++++++++-----------
 .../core/async/core/DelegatingContextExecutor.java | 19 ++++++--------
 .../core/async/core/DelegatingContextRunnable.java | 29 +++++++++-------------
 3 files changed, 29 insertions(+), 45 deletions(-)

diff --git a/src/main/java/io/mifos/core/async/core/DelegatingContextCallable.java b/src/main/java/io/mifos/core/async/core/DelegatingContextCallable.java
index 2a7d050..9af1bf3 100644
--- a/src/main/java/io/mifos/core/async/core/DelegatingContextCallable.java
+++ b/src/main/java/io/mifos/core/async/core/DelegatingContextCallable.java
@@ -4,39 +4,33 @@ import io.mifos.core.api.util.UserContext;
 import io.mifos.core.api.util.UserContextHolder;
 import io.mifos.core.lang.TenantContextHolder;
 
+import java.util.Optional;
 import java.util.concurrent.Callable;
 
+@SuppressWarnings("OptionalUsedAsFieldOrParameterType")
 public class DelegatingContextCallable<V> implements Callable<V> {
 
   private final Callable<V> delegate;
-  private final String tenantIdentifier;
-  private final UserContext userContext;
-
-  DelegatingContextCallable(Callable<V> delegate) {
-    this.delegate = delegate;
-    this.tenantIdentifier = null;
-    this.userContext = null;
-  }
+  private final Optional<String> optionalTenantIdentifier;
+  private final Optional<UserContext> optionalUserContext;
 
   DelegatingContextCallable(final Callable<V> delegate, final String tenantIdentifier,
                             final UserContext userContext) {
     super();
     this.delegate = delegate;
-    this.tenantIdentifier = tenantIdentifier;
-    this.userContext = userContext;
+    this.optionalTenantIdentifier = Optional.ofNullable(tenantIdentifier);
+    this.optionalUserContext = Optional.ofNullable(userContext);
   }
 
   @Override
   public V call() throws Exception {
     try {
       TenantContextHolder.clear();
-      if(this.tenantIdentifier != null) {
-        TenantContextHolder.setIdentifier(this.tenantIdentifier);
-      }
+      optionalTenantIdentifier.ifPresent(TenantContextHolder::setIdentifier);
+
       UserContextHolder.clear();
-      if (this.userContext != null) {
-        UserContextHolder.setUserContext(this.userContext);
-      }
+      optionalUserContext.ifPresent(UserContextHolder::setUserContext);
+
       return this.delegate.call();
     } finally {
       TenantContextHolder.clear();
diff --git a/src/main/java/io/mifos/core/async/core/DelegatingContextExecutor.java b/src/main/java/io/mifos/core/async/core/DelegatingContextExecutor.java
index 316fc1b..2ea9f77 100644
--- a/src/main/java/io/mifos/core/async/core/DelegatingContextExecutor.java
+++ b/src/main/java/io/mifos/core/async/core/DelegatingContextExecutor.java
@@ -1,5 +1,6 @@
 package io.mifos.core.async.core;
 
+import io.mifos.core.api.util.UserContext;
 import io.mifos.core.api.util.UserContextHolder;
 import io.mifos.core.lang.TenantContextHolder;
 import org.springframework.core.task.AsyncTaskExecutor;
@@ -42,20 +43,14 @@ public class DelegatingContextExecutor implements AsyncTaskExecutor {
   }
 
   private Runnable wrap(final Runnable task) {
-    if(TenantContextHolder.identifier().isPresent()
-        || UserContextHolder.getUserContext().isPresent()) {
-      return new DelegatingContextRunnable(task, TenantContextHolder.checkedGetIdentifier(),
-          UserContextHolder.getUserContext().get());
-    }
-    return new DelegatingContextRunnable(task);
+    final String tenantIdentifier = TenantContextHolder.identifier().orElse(null);
+    final UserContext userContext = UserContextHolder.getUserContext().orElse(null);
+    return new DelegatingContextRunnable(task, tenantIdentifier, userContext);
   }
 
   private <T> Callable<T> wrap(final Callable<T> task) {
-    if(TenantContextHolder.identifier().isPresent()
-        || UserContextHolder.getUserContext().isPresent()) {
-      return new DelegatingContextCallable<>(task, TenantContextHolder.checkedGetIdentifier(),
-          UserContextHolder.getUserContext().get());
-    }
-    return new DelegatingContextCallable<>(task);
+    final String tenantIdentifier = TenantContextHolder.identifier().orElse(null);
+    final UserContext userContext = UserContextHolder.getUserContext().orElse(null);
+    return new DelegatingContextCallable<>(task, tenantIdentifier, userContext);
   }
 }
diff --git a/src/main/java/io/mifos/core/async/core/DelegatingContextRunnable.java b/src/main/java/io/mifos/core/async/core/DelegatingContextRunnable.java
index 51d0e34..ae5b620 100644
--- a/src/main/java/io/mifos/core/async/core/DelegatingContextRunnable.java
+++ b/src/main/java/io/mifos/core/async/core/DelegatingContextRunnable.java
@@ -4,41 +4,36 @@ import io.mifos.core.api.util.UserContext;
 import io.mifos.core.api.util.UserContextHolder;
 import io.mifos.core.lang.TenantContextHolder;
 
+import java.util.Optional;
+
+@SuppressWarnings("OptionalUsedAsFieldOrParameterType")
 public class DelegatingContextRunnable implements Runnable {
 
   private final Runnable delegate;
-  private final String tenantIdentifier;
-  private final UserContext userContext;
-
-  DelegatingContextRunnable(final Runnable delegate) {
-    this.delegate = delegate;
-    this.tenantIdentifier = null;
-    this.userContext = null;
-  }
+  private final Optional<String> optionalTenantIdentifier;
+  private final Optional<UserContext> optionalUserContext;
 
   DelegatingContextRunnable(final Runnable delegate, final String tenantIdentifier,
                             final UserContext userContext) {
     super();
     this.delegate = delegate;
-    this.tenantIdentifier = tenantIdentifier;
-    this.userContext = userContext;
+    this.optionalTenantIdentifier = Optional.ofNullable(tenantIdentifier);
+    this.optionalUserContext = Optional.ofNullable(userContext);
   }
 
   @Override
   public void run() {
     try {
       TenantContextHolder.clear();
-      if(this.tenantIdentifier != null) {
-        TenantContextHolder.setIdentifier(this.tenantIdentifier);
-      }
+      optionalTenantIdentifier.ifPresent(TenantContextHolder::setIdentifier);
+
       UserContextHolder.clear();
-      if (this.userContext != null) {
-        UserContextHolder.setUserContext(this.userContext);
-      }
+      optionalUserContext.ifPresent(UserContextHolder::setUserContext);
+
       this.delegate.run();
     } finally {
       TenantContextHolder.clear();
-      UserContextHolder.clear();;
+      UserContextHolder.clear();
     }
   }
 }