QQQ-14 first cut at switching processInit method to run async

This commit is contained in:
2022-06-30 20:54:45 -05:00
parent ad327c2d50
commit 2c9a41653e
2 changed files with 37 additions and 13 deletions

View File

@ -51,7 +51,7 @@
<dependency>
<groupId>com.kingsrook.qqq</groupId>
<artifactId>qqq-backend-core</artifactId>
<version>0.0.0-20220628.161829-14</version>
<version>0.0.0-20220701.014218-17</version>
</dependency>
<dependency>
<groupId>com.kingsrook.qqq</groupId>

View File

@ -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,10 +511,14 @@ public class QJavalinImplementation
try
{
///////////////////////////////////////////////////////
////////////////////////////////////////////////
// run the process //
// todo - async? some "job id" to return to caller? //
///////////////////////////////////////////////////////
// todo - some "job id" to return to caller? //
////////////////////////////////////////////////
CompletableFuture<RunProcessResult> future = CompletableFuture.supplyAsync(() ->
{
try
{
LOG.info("Running process [" + runProcessRequest.getProcessName() + "]");
RunProcessResult runProcessResult = new RunProcessAction().execute(runProcessRequest);
LOG.info("Process result error? " + runProcessResult.getError());
@ -518,10 +526,26 @@ public class QJavalinImplementation
{
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<String, Object> resultForCaller = new HashMap<>();
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)