diff --git a/zanata-war/src/main/java/org/zanata/async/AsynchronousTaskExecutor.java b/zanata-war/src/main/java/org/zanata/async/AsynchronousTaskExecutor.java index 5f9a0f961f..7ab78ac715 100644 --- a/zanata-war/src/main/java/org/zanata/async/AsynchronousTaskExecutor.java +++ b/zanata-war/src/main/java/org/zanata/async/AsynchronousTaskExecutor.java @@ -29,9 +29,10 @@ import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Scope; import org.jboss.seam.annotations.async.Asynchronous; -import org.jboss.seam.security.Identity; import org.jboss.seam.security.RunAsOperation; +import lombok.extern.slf4j.Slf4j; + /** * This class executes a Runnable Process asynchronously. Do not use this class directly. * Use {@link org.zanata.async.TaskExecutor} instead as this is just a wrapper to make sure @@ -43,10 +44,12 @@ @Name("asynchronousTaskExecutor") @Scope(ScopeType.STATELESS) @AutoCreate +@Slf4j public class AsynchronousTaskExecutor { @Asynchronous - public > void runAsynchronously(final AsyncTask task, final Identity runAs) + public > void runAsynchronously(final AsyncTask task, final Principal runAsPpal, + final Subject runAsSubject) { AsyncUtils.outject(task.getHandle(), ScopeType.EVENT); @@ -63,19 +66,20 @@ public void execute() catch (Exception t) { task.getHandle().setException(t); + AsynchronousTaskExecutor.log.error("Exception when executing an asynchronous task.", t); } } @Override public Principal getPrincipal() { - return runAs.getPrincipal(); + return runAsPpal; } @Override public Subject getSubject() { - return runAs.getSubject(); + return runAsSubject; } }; diff --git a/zanata-war/src/main/java/org/zanata/async/TaskExecutor.java b/zanata-war/src/main/java/org/zanata/async/TaskExecutor.java index 0275ce0e18..2665be5dd1 100644 --- a/zanata-war/src/main/java/org/zanata/async/TaskExecutor.java +++ b/zanata-war/src/main/java/org/zanata/async/TaskExecutor.java @@ -57,7 +57,8 @@ public > AsyncTaskHandle startTask(AsyncTask< throw new RuntimeException("An Asynchronous task should always return a non-null handle"); } - asynchronousTaskExecutor.runAsynchronously(task, Identity.instance()); + Identity identity = Identity.instance(); + asynchronousTaskExecutor.runAsynchronously(task, identity.getPrincipal(), identity.getSubject()); return handle; } diff --git a/zanata-war/src/main/java/org/zanata/rest/service/AsynchronousProcessResourceService.java b/zanata-war/src/main/java/org/zanata/rest/service/AsynchronousProcessResourceService.java index 29f0ff6f6a..168d5a4f25 100644 --- a/zanata-war/src/main/java/org/zanata/rest/service/AsynchronousProcessResourceService.java +++ b/zanata-war/src/main/java/org/zanata/rest/service/AsynchronousProcessResourceService.java @@ -252,11 +252,13 @@ public ProcessStatus getProcessStatus(@PathParam("processId") String processId) catch (InterruptedException e) { // The process was forcefully cancelled + status.setStatusCode(ProcessStatusCode.Failed); status.setMessages(Lists.newArrayList(e.getMessage())); } catch (ExecutionException e) { // Exception thrown while running the task + status.setStatusCode(ProcessStatusCode.Failed); status.setMessages(Lists.newArrayList(e.getCause().getMessage())); }