diff --git a/pom.xml b/pom.xml index f446376b..9e2930b1 100644 --- a/pom.xml +++ b/pom.xml @@ -51,7 +51,7 @@ com.kingsrook.qqq qqq-backend-core - 0.0.0-20220628.161829-14 + 0.0.0-20220701.014218-17 com.kingsrook.qqq diff --git a/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinImplementation.java b/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinImplementation.java index bfd94268..6c68564d 100644 --- a/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinImplementation.java +++ b/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinImplementation.java @@ -29,6 +29,10 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; import com.kingsrook.qqq.backend.core.actions.DeleteAction; import com.kingsrook.qqq.backend.core.actions.InsertAction; import com.kingsrook.qqq.backend.core.actions.MetaDataAction; @@ -507,21 +511,41 @@ public class QJavalinImplementation try { - /////////////////////////////////////////////////////// - // run the process // - // todo - async? some "job id" to return to caller? // - /////////////////////////////////////////////////////// - LOG.info("Running process [" + runProcessRequest.getProcessName() + "]"); - RunProcessResult runProcessResult = new RunProcessAction().execute(runProcessRequest); - LOG.info("Process result error? " + runProcessResult.getError()); - for(QFieldMetaData outputField : qInstance.getProcess(runProcessRequest.getProcessName()).getOutputFields()) + //////////////////////////////////////////////// + // run the process // + // todo - some "job id" to return to caller? // + //////////////////////////////////////////////// + CompletableFuture future = CompletableFuture.supplyAsync(() -> { - LOG.info("Process result output value: " + outputField.getName() + ": " + runProcessResult.getValues().get(outputField.getName())); - } + try + { + LOG.info("Running process [" + runProcessRequest.getProcessName() + "]"); + RunProcessResult runProcessResult = new RunProcessAction().execute(runProcessRequest); + LOG.info("Process result error? " + runProcessResult.getError()); + for(QFieldMetaData outputField : qInstance.getProcess(runProcessRequest.getProcessName()).getOutputFields()) + { + LOG.info("Process result output value: " + outputField.getName() + ": " + runProcessResult.getValues().get(outputField.getName())); + } + return (runProcessResult); + } + catch(Exception e) + { + LOG.error("Error running future for process", e); + throw (new CompletionException(e)); + } + }); Map resultForCaller = new HashMap<>(); - resultForCaller.put("error", runProcessResult.getError()); - resultForCaller.put("values", runProcessResult.getValues()); + try + { + RunProcessResult runProcessResult = future.get(3, TimeUnit.SECONDS); + resultForCaller.put("error", runProcessResult.getError()); + resultForCaller.put("values", runProcessResult.getValues()); + } + catch(TimeoutException te) + { + resultForCaller.put("jobId", "Job is running asynchronously... job id available in a later version."); + } context.result(JsonUtils.toJson(resultForCaller)); } catch(Exception e)