This is an automated email from the ASF dual-hosted git repository.
hansva pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hop.git
The following commit(s) were added to refs/heads/master by this push:
new 9777320 HOP-3667 initial adoc version of Stefan Klaffke's tutorial
new cdd00dc Merge pull request #1281 from bamaer/HOP-3667
9777320 is described below
commit 97773206e0fb97be6b7bcc5cfe49a51b4266f838
Author: Bart Maertens <[email protected]>
AuthorDate: Wed Jan 19 21:04:20 2022 +0100
HOP-3667 initial adoc version of Stefan Klaffke's tutorial
---
.../web-services-in-docker/json-output.png | Bin 0 -> 175410 bytes
.../web-services-in-docker/metadata.png | Bin 0 -> 128946 bytes
.../web-services-in-docker/pipeline.png | Bin 0 -> 26079 bytes
.../web-services-in-docker/result.png | Bin 0 -> 19962 bytes
.../simplified-architecture.png | Bin 0 -> 244385 bytes
docs/hop-user-manual/modules/ROOT/nav.adoc | 2 +
.../apache-hop-web-services-docker.adoc | 175 +++++++++++++++++++++
.../modules/ROOT/pages/how-to-guides/index.adoc | 25 +++
8 files changed, 202 insertions(+)
diff --git
a/docs/hop-user-manual/modules/ROOT/assets/images/how-to-guides/web-services-in-docker/json-output.png
b/docs/hop-user-manual/modules/ROOT/assets/images/how-to-guides/web-services-in-docker/json-output.png
new file mode 100644
index 0000000..af31432
Binary files /dev/null and
b/docs/hop-user-manual/modules/ROOT/assets/images/how-to-guides/web-services-in-docker/json-output.png
differ
diff --git
a/docs/hop-user-manual/modules/ROOT/assets/images/how-to-guides/web-services-in-docker/metadata.png
b/docs/hop-user-manual/modules/ROOT/assets/images/how-to-guides/web-services-in-docker/metadata.png
new file mode 100644
index 0000000..6bb9581
Binary files /dev/null and
b/docs/hop-user-manual/modules/ROOT/assets/images/how-to-guides/web-services-in-docker/metadata.png
differ
diff --git
a/docs/hop-user-manual/modules/ROOT/assets/images/how-to-guides/web-services-in-docker/pipeline.png
b/docs/hop-user-manual/modules/ROOT/assets/images/how-to-guides/web-services-in-docker/pipeline.png
new file mode 100644
index 0000000..04140b4
Binary files /dev/null and
b/docs/hop-user-manual/modules/ROOT/assets/images/how-to-guides/web-services-in-docker/pipeline.png
differ
diff --git
a/docs/hop-user-manual/modules/ROOT/assets/images/how-to-guides/web-services-in-docker/result.png
b/docs/hop-user-manual/modules/ROOT/assets/images/how-to-guides/web-services-in-docker/result.png
new file mode 100644
index 0000000..bd8c870
Binary files /dev/null and
b/docs/hop-user-manual/modules/ROOT/assets/images/how-to-guides/web-services-in-docker/result.png
differ
diff --git
a/docs/hop-user-manual/modules/ROOT/assets/images/how-to-guides/web-services-in-docker/simplified-architecture.png
b/docs/hop-user-manual/modules/ROOT/assets/images/how-to-guides/web-services-in-docker/simplified-architecture.png
new file mode 100644
index 0000000..3d6787d
Binary files /dev/null and
b/docs/hop-user-manual/modules/ROOT/assets/images/how-to-guides/web-services-in-docker/simplified-architecture.png
differ
diff --git a/docs/hop-user-manual/modules/ROOT/nav.adoc
b/docs/hop-user-manual/modules/ROOT/nav.adoc
index 8141d6e..821c264 100644
--- a/docs/hop-user-manual/modules/ROOT/nav.adoc
+++ b/docs/hop-user-manual/modules/ROOT/nav.adoc
@@ -424,3 +424,5 @@ under the License.
* xref:best-practices/index.adoc[Best Practices]
* xref:protips/index.adoc[Pro Tips]
* xref:hop-usps.adoc[Unique Selling Propositions]
+* xref:how-to-guides/index.adoc[How-to guides]
+** xref:how-to-guides/apache-hop-web-services-docker.adoc[Hop web services in
Docker]
diff --git
a/docs/hop-user-manual/modules/ROOT/pages/how-to-guides/apache-hop-web-services-docker.adoc
b/docs/hop-user-manual/modules/ROOT/pages/how-to-guides/apache-hop-web-services-docker.adoc
new file mode 100644
index 0000000..13365d8
--- /dev/null
+++
b/docs/hop-user-manual/modules/ROOT/pages/how-to-guides/apache-hop-web-services-docker.adoc
@@ -0,0 +1,175 @@
+////
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+////
+[[HopServer]]
+:imagesdir: ../../assets/images
+:description: This tutorial explains how to run Apache Hop web services from a
Docker container
+
+= Web Services in Apache Hop
+
+== Introduction
+
+Apache Hop is a very flexible tool for developing data flows (so-called
pipelines) with the help of an easy-to-use UI, with which data can be extracted
from different sources, consolidated and loaded into a new system (ETL).
+
+The tool is not only excellently suited for these classic data warehouse tasks
or for database migrations. In the context of low-code software development,
Apache Hop can also be used to provide fast calculations and data queries as a
web service without much programming effort and to link these calculations to
your own web services. Hundreds of lines of source code are eliminated, as the
functionality can be conveniently implemented as a pipeline with its dozens of
transforms (processin [...]
+
+The following illustration shows an example of where Apache HOP can be
integrated with web services in a full-stack architecture (multi-container
application).
+
+image:how-to-guides/web-services-in-docker/simplified-architecture.png[Hop web
services in Docker - simplified architecture, width="45%"]
+
+In order to call the created Hop web services from a Java application, for
example, the Apache Hop server on which the pipelines are executed is required.
The Hop server provides a web interface (servlet) to return the results of the
execution.
+
+It can be run on a dedicated server or inside a Docker container. The latter
option offers the advantage of scaling quickly when needed.
+
+== Running Pipelines as a Web services in a Docker container
+
+This guide covers the steps to create an example web service and subsequent
deployment in a Docker container.
+
+=== Step 0: Requirements for the web service
+
+The task of the fictitious example web service in this tutorial is to provide
data in real time for a project dashboard (specifically: the number of
active/inactive teams per team type), so that after processing in the API
layer, the data can be displayed in the frontend as a stacked bar chart. The
data is available in normalised form in the database and must first be prepared
by the web service.
+
+=== Step 1: Creation of the pipeline
+
+After creating the project and setting up the database connection in HOP, the
following pipeline is created (file name: countTeams.hpl):
+
+image:how-to-guides/web-services-in-docker/pipeline.png[Hop web services in
Docker - pipeline, width="90%"]
+
+The pipeline expects a project ID as an input parameter in order to be able to
read out the teams belonging to the project from the database. The data is
grouped, then the number is calculated and finally denormalised by team type.
The result of the execution should be returned in JSON format.
+
+=== Step 2: Meta Data Configuration
+
+To make the pipeline available as a web service, metadata must be created for
it and later made known to the Hop server. The use of metadata has the
advantage that the calling application only needs to know the web service name,
the details of the underlying implementation (especially the location of the
pipeline) remain hidden.
+
+The following metadata are created for the pipeline under the Web Service tab:
+
+image:how-to-guides/web-services-in-docker/metadata.png[Hop web services in
Docker - metadata, width="75%"]
+
+The **Name** field contains the name of the web service under which the
calling application will call the service. The **Filename** field contains the
assignment to the storage location of the pipeline. The **Output transform**
field contains the name of the transform that provides the result in the output
field to be specified. Content type specifies the output format of the return
stream. In addition, you can further specify in the metadata whether the web
service should be disabled (* [...]
+
+In the pipeline listed above, the content of the output field outputValue of
the Transform JSON Output is to be returned as the result:
+
+image:how-to-guides/web-services-in-docker/json-output.png[Hop web services in
Docker - JSON Output, width="60%"]
+
+After saving the metadata, everything is ready to run the web service in a
Docker container.
+
+=== Step 3: Set up configurations for different runtime environments
+
+In Apache Hop it is possible to set up runtime environments for different
environments (e.g. Development Local, Docker Single, Docker Multi-App) via
so-called configurations and to pass them to the pipeline without having to
adapt or duplicate the pipeline itself (e.g. one pipeline for each environment).
+
+Connection details (e.g. DB server URL) for database connections, etc. can be
stored as variables in configuration files.
+
+For example, to set up a new database connection whose connection details may
differ depending on the environment, enter the name of the environment variable
(e.g. `${DB_HOST}`) instead of a concrete server URL. +
+
+As soon as you select an environment and the variable is contained in its
configuration file, the variable in the DB configuration is replaced by the
value from the environment configuration.
+
+This functionality is very helpful, for example, to test the pipeline against
different environments before you start the deployment on the Hop Server.
+
+This functionality is also essential for multi-container applications (see
above: full-stack architecture), whose service results from the interaction of
different and externally isolated containers.
+
+A separate environment configuration is therefore necessary if you want to
start your application with Docker Compose in addition to your development
environment (in this example, the `${DB_HOST}` variable would have the service
name of the DB Container instead of the IP address of the DB Server).
+
+=== Step 4: Set up and start Docker Container
+
+To start the Hop Server inside a Docker container, you have the following
options for building the container:
+
+* Using the image provided by Apache Hop
+* Use the Apache Hop image as a starting image and add application-specific
customisations in the form of a new image (e.g. include the Hop project with
its workflows and pipelines as well as third-party APIs).
+* Creation of a complete custom image (possibly based on the DOCKERFILES
provided in the Apache Hop Github repository).
+
+
+Depending on the deployment strategy, it may be advisable to include the
project and its source code in the image, e.g. if only containers may be
deployed in a production environment.
+
+
+
+The first option is sufficient for this guide, as all adjustments can be
transferred to the Docker container via environment variables for the example. +
+In addition, changes to pipelines should be made visible immediately without
having to rebuild the image first. +
+For this purpose, it is necessary to mount the location of the project (incl.
subdirectories for JDBC drivers and the metadata configuration) into the Docker
container.
+
+First download the Docker image:
+
+[source, shell script]
+----
+docker pull apache/hop:<tag>
+Example: docker pull apache/hop:1.1.0-SNAPSHOT
+----
+
+To execute the containers afterwards, the following environment variables or
parameters must be set as a minimum:
+
+[%header, width="90%"]
+|===
+|Variable/Docker Parameter|Example value|Description
+|HOP_SERVER_USER|admin|Admin user to log in to the UI of the Hop Server
+|HOP_SERVER_PASS|admin|Password for logging into the UI of the Hop Server
+|HOP_SERVER_PORT|8182|Port of the server (internal)
+|HOP_SERVER_HOSTNAME|0.0.0.0|Docker internal IP address of the host
+|HOP_PROJECT_NAME|Proj1|When the container is created, a project with all
necessary configurations is initially created, therefore the project to be
specified serves as a placeholder.
+|HOP_PROJECT_FOLDER|/files|Root folder containing the project
+|HOP_ENVIRONMENT_NAME|Local|Name of the environment with which the container
is to be started (e.g. local, prod) - see step 3
+|HOP_ENVIRONMENT_CONFIG_FILE_NAME_PATHS|/files/config/localTestConfig.json|Comma
separated list of all environment files (see step 3)
+|HOP_SERVER_METADATA_FOLDER|/files/metadata|Directory containing the metadata
information (in this case, the metadata associated with the web service).
+|HOP_SHARED_JDBC_FOLDER|/files/jdbc|Directory containing all required JDBC
drivers (e.g. for MySQL, Oracle) that are not included in the standard delivery.
+|p|8182:8182|Mapping of the internal Docker port to the port of the Docker host
+|V|/my/path/to/location:/files|Mount path and mapping to a Docker internal path
+|Name||Name of the Docker container
+|===
+
+In the technical documentation for Apache HOP running as Docker Container (pls
see https://hop.apache.org/tech-manual/latest/docker-container.html[docs]),
further parameters are listed (e.g. when using SSL), which have been omitted
here for simplification.
+
+Example call:
+
+[source, shell script]
+----
+docker run -it --rm \
+ --env HOP_SERVER_USER=admin \
+ --env HOP_SERVER_PASS=admin \
+ --env HOP_SERVER_PORT=8182 \
+ --env HOP_SERVER_HOSTNAME=0.0.0.0 \
+ --env HOP_PROJECT_NAME=proj1 \
+ --env HOP_PROJECT_FOLDER=/files \
+ --env HOP_ENVIRONMENT_NAME=Local \
+ --env
HOP_ENVIRONMENT_CONFIG_FILE_NAME_PATHS=/files/config/localTestConfig.json \
+ --env HOP_SERVER_METADATA_FOLDER=/files/metadata \
+ --env HOP_SHARED_JDBC_FOLDER=/files/jdbc \
+ -p 8182:8182 \
+ -v /my/path/to/location:/files \
+ --name test-hop-container \
+ apache/hop:1.1.0-SNAPSHOT
+----
+
+=== Step 5: Call Web Service
+
+If the container has been started successfully, the web server GUI can be
opened via http://<IP_HOST>:<PORT_HOST>/hop/status/ which gives an overview of
the pipelines and workflows called up after logging in (using the administrator
IDs passed).
+
+To call a web service with the name <NameofService>, the following request is
necessary:
+http://<IP_HOST>:<PORT_HOST>/hop/webService?service=<NameofService>&Param1=Value&Param2=Value2....
+
+The WebService **countTeams** from this tutorial expects the parameter
PARAM_PROJECT_ID.
+
+The call is made as follows:
+
+*http://localhost:8182/hop/webService/?service=countTeams&PARAM_PROJECT_ID=63*
+
+image:how-to-guides/web-services-in-docker/result.png[Hop web services in
Docker - result, width="80%"]
+
+As mentioned at the beginning of the tutorial, the API layer above can now
process the JSON output and pass it to the front end, which then uses the
processed data to create the chart.
+
+== Conclusion
+
+Apache Hop Pipelines as web services are easy to set up via meta-data
configurations and can be easily deployed via Docker. They are suitable
everywhere to synchronously return results quickly that do not require a long
processing time. As of version 1.1, Apache Hop also supports the use of
workflows as web services.
+
+Here, the call is asynchronous, i.e. when the service is called, a unique ID
of the workflow to be executed is returned immediately and the execution starts
in the background on the HOP server (for details check
https://hop.apache.org/manual/latest/hop-server/async-web-service.html[the
docs]).
+
diff --git a/docs/hop-user-manual/modules/ROOT/pages/how-to-guides/index.adoc
b/docs/hop-user-manual/modules/ROOT/pages/how-to-guides/index.adoc
new file mode 100644
index 0000000..67bff8b
--- /dev/null
+++ b/docs/hop-user-manual/modules/ROOT/pages/how-to-guides/index.adoc
@@ -0,0 +1,25 @@
+////
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+////
+[[HopServer]]
+:imagesdir: ../../assets/images
+:description: This page contains a collection of how-to guides to perform a
variety of tasks, configurations etc with Apache Hop.
+
+== How-to guides
+
+This page contains a collection of how-to guides to perform a variety of
tasks, configurations etc with Apache Hop.
+
+* xref:how-to-guides/apache-hop-web-services-docker.adoc[using Apache Hop web
services in Docker]
\ No newline at end of file