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)