This is an automated email from the ASF dual-hosted git repository.
fjtiradosarti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-kogito-docs.git
The following commit(s) were added to refs/heads/main by this push:
new 381da7c5d [KOGITO-9454] Documenting java flow library (#585)
381da7c5d is described below
commit 381da7c5d217995839afccb987c961bcfc606945
Author: Francisco Javier Tirado Sarti
<[email protected]>
AuthorDate: Thu Mar 21 15:35:26 2024 +0100
[KOGITO-9454] Documenting java flow library (#585)
* [KOGITO-9454] Documenting java flow library
* Update
serverlessworkflow/modules/ROOT/pages/getting-started/java-embedded-workflows.adoc
Co-authored-by: Kalyani Desai <[email protected]>
* Update
serverlessworkflow/modules/ROOT/pages/getting-started/java-embedded-workflows.adoc
Co-authored-by: Kalyani Desai <[email protected]>
* Update
serverlessworkflow/modules/ROOT/pages/getting-started/java-embedded-workflows.adoc
Co-authored-by: Kalyani Desai <[email protected]>
* Update
serverlessworkflow/modules/ROOT/pages/getting-started/java-embedded-workflows.adoc
Co-authored-by: Kalyani Desai <[email protected]>
* Update
serverlessworkflow/modules/ROOT/pages/getting-started/java-embedded-workflows.adoc
Co-authored-by: Kalyani Desai <[email protected]>
* Update
serverlessworkflow/modules/ROOT/pages/getting-started/java-embedded-workflows.adoc
Co-authored-by: Kalyani Desai <[email protected]>
* Update
serverlessworkflow/modules/ROOT/pages/getting-started/java-embedded-workflows.adoc
Co-authored-by: Kalyani Desai <[email protected]>
* Update
serverlessworkflow/modules/ROOT/pages/getting-started/java-embedded-workflows.adoc
Co-authored-by: Kalyani Desai <[email protected]>
* [KOGITO-9454] Minor correction
* Update
serverlessworkflow/modules/ROOT/pages/getting-started/java-embedded-workflows.adoc
Co-authored-by: Dominik Hanák <[email protected]>
* Update
serverlessworkflow/modules/ROOT/pages/getting-started/java-embedded-workflows.adoc
Co-authored-by: Dominik Hanák <[email protected]>
* [KOGITO-9454] Dominik comments
* [KOGITO-9454] Update example reference
---------
Co-authored-by: Kalyani Desai <[email protected]>
Co-authored-by: Dominik Hanák <[email protected]>
---
serverlessworkflow/antora.yml | 1 +
serverlessworkflow/modules/ROOT/nav.adoc | 1 +
.../getting-started/java-embedded-workflows.adoc | 91 ++++++++++++++++++++++
serverlessworkflow/modules/ROOT/pages/index.adoc | 8 ++
4 files changed, 101 insertions(+)
diff --git a/serverlessworkflow/antora.yml b/serverlessworkflow/antora.yml
index a92f79b68..0aff48584 100644
--- a/serverlessworkflow/antora.yml
+++ b/serverlessworkflow/antora.yml
@@ -135,3 +135,4 @@ asciidoc:
workflow_instance: workflow instance
workflow_instances: workflow instances
sonataflow_devmode_devui_url:
/q/dev/org.kie.kogito.kogito-quarkus-serverless-workflow-devui/
+ swf_executor_core_maven_repo:
https://mvnrepository.com/artifact/org.kie.kogito/kogito-serverless-workflow-executor-core
diff --git a/serverlessworkflow/modules/ROOT/nav.adoc
b/serverlessworkflow/modules/ROOT/nav.adoc
index 0daa1601b..4bf331243 100644
--- a/serverlessworkflow/modules/ROOT/nav.adoc
+++ b/serverlessworkflow/modules/ROOT/nav.adoc
@@ -23,6 +23,7 @@
* Getting Started
** xref:getting-started/getting-familiar-with-our-tooling.adoc[]
**
xref:getting-started/create-your-first-workflow-service-with-kn-cli-and-vscode.adoc[]
+** xref:getting-started/java-embedded-workflows.adoc[]
* Core Concepts
** xref:core/cncf-serverless-workflow-specification-support.adoc[]
** xref:core/handling-events-on-workflows.adoc[Events]
diff --git
a/serverlessworkflow/modules/ROOT/pages/getting-started/java-embedded-workflows.adoc
b/serverlessworkflow/modules/ROOT/pages/getting-started/java-embedded-workflows.adoc
new file mode 100644
index 000000000..575b289c9
--- /dev/null
+++
b/serverlessworkflow/modules/ROOT/pages/getting-started/java-embedded-workflows.adoc
@@ -0,0 +1,91 @@
+= Workflow embedded execution in Java
+
+This guide uses a standard Java virtual machine and a small set of Maven
dependencies to execute a link:{spec_doc_url}[CNCF Serverless Workflow]
definition. Therefore, it is assumed you are fluent both in Java and Maven.
+The workflow definition to be executed can be read from a `.json` or `.yaml`
file or programmatically defined using the {product_name} fluent API.
+.Prerequisites
+. Install https://openjdk.org/[OpenJDK] {java_min_version}
+. Install https://maven.apache.org/index.html[Apache Maven]
{maven_min_version}.
+
+[[embedded-file-quick-start]]
+== Hello world (using existing definition file)
+
+The first step is to set up an empty Maven project that includes
link:{swf_executor_core_maven_repo}[Workflow executor core] dependency.
+
+This guide also uses [slf4j
dependency](https://mvnrepository.com/artifact/org.slf4j/slf4j-simple) to avoid
using `System.out.println`
+
+Let's assume you already have a workflow definition written in a JSON file in
your project root directory. For example,
link:{kogito_sw_examples_url}/serverless-workflow-hello-world/src/main/resources/hello.sw.json[Hello
World] definition. To execute it, you must write the following main Java class
(standard Java imports and package declaration are intentionally skipped for
briefness)
+
+[source,java]
+----
+import org.kie.kogito.serverless.workflow.executor.StaticWorkflowApplication;
+import org.kie.kogito.serverless.workflow.models.JsonNodeModel;
+import org.kie.kogito.serverless.workflow.utils.ServerlessWorkflowUtils;
+import org.kie.kogito.serverless.workflow.utils.WorkflowFormat;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import io.serverlessworkflow.api.Workflow;
+
+public class DefinitionFileExecutor {
+ private static final Logger logger =
LoggerFactory.getLogger(DefinitionFileExecutor.class);
+
+ public static void main(String[] args) throws IOException {
+ try (Reader reader = new FileReader("hello.sw.json"); <1>
+ StaticWorkflowApplication application =
StaticWorkflowApplication.create()) { <2>
+ Workflow workflow = ServerlessWorkflowUtils.getWorkflow(reader,
WorkflowFormat.JSON); <3>
+ JsonNodeModel result = application.execute(workflow,
Collections.emptyMap()); <4>
+ logger.info("Workflow execution result is {}",
result.getWorkflowdata()); <5>
+ }
+ }
+}
+----
+<1> Reads the workflow file definition from the project root directory
+<2> Creates a static workflow application object. It is done within the try
block since the instance is `Closeable`. This is the reference that allow you
to execute workflow definitions.
+<3> Reads the Serverless Workflow Java SDK `Workflow` object from the file.
+<4> Execute the workflow, passing `Workflow` reference and no parameters (an
empty Map). The result of the workflow execution: process instance id and
workflow output model, can accessed using `result` variable.
+<5> Prints the workflow model in the configured standard output.
+
+If you compile and execute this Java class, you will see the following log in
your configured standard output:
+----
+Workflow execution result is {"greeting":"Hello World","mantra":"Serverless
Workflow is awesome!"}
+----
+
+[[embedded-fluent-quick-start]]
+== Hello world (using fluent API)
+
+Using the same Maven setup as in the previous section, you can
programmatically generate that workflow definition rather than loading it from
a file definition by using the
link:{kogito_runtimes_url}/kogito-serverless-workflow/kogito-serverless-workflow-fluent/src/main/java/org/kie/kogito/serverless/workflow/fluent[fluent
API]
+
+Therefore, you can modify the previous example to generate the same output
when it is executed, but rather than creating a `FileReader` that reads the
`Workflow` object, we create the `Workflow` object using Java statements. The
resulting modified main method is the following
+
+[source,java]
+----
+ try (StaticWorkflowApplication application =
StaticWorkflowApplication.create()) {
+ Workflow workflow = workflow("HelloWorld"). <1>
+ start( <2>
+ inject( <3>
+
jsonObject().put("greeting", "Hello World").put("mantra","Serverless Workflow
is awesome!"))) <4>
+ .end() <5>
+ .build(); <6>
+ logger.info("Workflow execution result is
{}",application.execute(workflow, Collections.emptyMap()).getWorkflowdata());
<7>
+ }
+----
+<1> Creates a workflow which name is `HelloWorld`
+<2> Indicate that you are going to specify the start state
+<3> A Inject state is the start state
+<4> Inject state accepts static json, therefore this line creates the JSON data
+<5> End the workflow definition
+<6> Build the workflow definition
+<7> Execute and print as in previous example
+
+
+== Further reading
+
+You can find additional and commented examples of fluent API usage (including
jq expression evaluation and orchestration of rest services)
link:{{kogito_sw_examples_url}/sonataflow-fluent[here]
+
+== Additional resources
+
+include::../../pages/_common-content/report-issue.adoc[]
+
+ifeval::["{kogito_version_redhat}" != ""]
+include::../../pages/_common-content/downstream-project-setup-instructions.adoc[]
+endif::[]
\ No newline at end of file
diff --git a/serverlessworkflow/modules/ROOT/pages/index.adoc
b/serverlessworkflow/modules/ROOT/pages/index.adoc
index dd64217f4..2797c1ff4 100644
--- a/serverlessworkflow/modules/ROOT/pages/index.adoc
+++ b/serverlessworkflow/modules/ROOT/pages/index.adoc
@@ -54,6 +54,14 @@
xref:getting-started/create-your-first-workflow-service-with-kn-cli-and-vscode.a
An all-in-one starting guide. Learn how to create, run & deploy your first
{product_name} project on your local environment.
--
+[.card]
+--
+[.card-title]
+xref:getting-started/java-embedded-workflows.adoc[]
+[.card-description]
+Learn about how to executed your workflows (existing files or define them
programatically) using Java and Maven.
+--
+
[.card-section]
== Core Concepts
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]