Hallo Welt, mit Asakusa Framework!

Einführung

In diesem Artikel wird erläutert, wie Sie eine einfache Batch-Anwendung mit dem Java-Batch-Framework Asakusa Framework erstellen. Offiziell gibt es Asakusa Framework Tutorial, aber in diesem Artikel können Sie Asakusa problemlos entwickeln. Ziel ist es, Ihnen einen Überblick über die Operation zu geben und Ihnen ein Gefühl dafür zu geben.

Betriebsumgebung

Wir haben den Betrieb in der folgenden Umgebung bestätigt.

(Bevor Sie die folgenden Schritte ausführen, stellen Sie sicher, dass JDK und Gradle installiert sind.)

Was du machen willst

Die eingeführte Beispielanwendung ist eine einfache Anwendung, die eine Eingabedatei liest (Inhalt ist nur "Hallo"), den Inhalt auf "Hallo, Welt!" Aktualisiert und die Datei ausgibt. Das DFD-Format ist wie folgt. helloworld_dfd.png

Vorbereitung der Entwicklungsumgebung

Erstellen Sie den folgenden Ordner und verwenden Sie ihn als Projektordner für die Beispielanwendung.

C:¥asakusa-develop¥helloworld

Erstellen Sie eine Gradle-Build-Skriptdatei (build.gradle) unter dem erstellten Projektordner. Diese Beispielanwendung ist als Asakusa Vanilla konfiguriert und kann auf der Windows-JVM ausgeführt werden. Es ist auch möglich, Anwendungen für Hadoop und M3BP zu generieren, indem Sie die Einstellungen hier ändern. Weitere Informationen zu dem von Ihnen erstellten Gradle-Skript finden Sie in der Asakusa Gradle Plugin-Referenz (http://docs.asakusafw.com/latest/release/ja/html/application/gradle-plugin-reference.html).

build.gradle


group 'com.example'

buildscript {
    repositories {
        maven { url 'http://asakusafw.s3.amazonaws.com/maven/releases' }
        maven { url 'http://asakusafw.s3.amazonaws.com/maven/snapshots' }
    }
    dependencies {
        classpath group: 'com.asakusafw.gradle', name: 'asakusa-distribution', version: '0.10.0'
    }
}

apply plugin: 'asakusafw-sdk'
apply plugin: 'asakusafw-organizer'
apply plugin: 'asakusafw-vanilla'
apply plugin: 'eclipse'

asakusafwOrganizer {
    vanilla.enabled true
    profiles.prod {
        hadoop.embed true
    }
}

Der folgende Gradle-Befehl generiert eine Konfigurationsdatei, die als Eclipse-Projekt importiert werden kann. (Unter dem Projektordner ausführen)

C:¥asakusa-develop¥helloworld>gradle eclipse

Wenn Sie IntelliJ IDEA verwenden möchten, lesen Sie bitte den offiziellen Using IntelliJ IDEA. Wenn Sie Eclipse verwenden, sollten Sie Shafu (Eclipse-Plug-In für die Asakusa-Entwicklung) verwenden.

Generierung von Datenmodellklassen

DMDL (Data Model Definition Language) Erstellen Sie eine Skriptdatei, um das Datenmodell zu definieren. Im folgenden Skript heißen die Eingabe- und Ausgabemodelle "Eingabe" bzw. "Ausgabe" und Direct I / O CSV. /csv-format.html) ist für die Eingabe und Ausgabe festgelegt. Erstellen Sie den folgenden Ordner und erstellen Sie eine Skriptdatei (models.dmdl) darunter.

C:¥asakusa-develop¥helloworld¥src¥main¥dmdl

models.dmdl


@directio.csv
input = {
  value : TEXT;
};

@directio.csv
output = {
  value : TEXT;
};

Wenn Sie den folgenden Gradle-Befehl ausführen, wird basierend auf der erstellten Skriptdatei eine Datenmodellklasse generiert, die von Asakusa Framework verwendet werden kann. (Unter dem Projektordner ausführen)

C:¥asakusa-develop¥helloworld>gradle compileDMDL

Erstellen einer Operatorklasse

Erstellen Sie den folgenden Ordner und erstellen Sie die Klasse "com.example.operator.HelloWorldOperator" darunter. Da die Verarbeitung des zu implementierenden Operators die Verarbeitung des Hinzufügens eines Werts (, World!) Zum Wert der Eingabedatei @ Update ist /dsl/operators.html#update-operator) Implementiert den Operator. Weitere Informationen zu Betreibern finden Sie in der Asakusa DSL-Betreiberreferenz (http://docs.asakusafw.com/latest/release/ja/html/dsl/operators.html). Die Klasse com.example.modelgen.dmdl.model.Input ist eine automatisch aus der DMDL generierte Klasse.

C:¥asakusa-develop¥helloworld¥src¥main¥java

java:com.example.operator.HelloWorldOperator


package com.example.operator;

import com.asakusafw.vocabulary.operator.Update;
import com.example.modelgen.dmdl.model.Input;

public abstract class HelloWorldOperator {

    @Update
    public void appendMessage(Input input) {
        input.setValueAsString(input.getValueAsString() + ", World!");
    }
}

Erstellen einer Eingabe- / Ausgabedefinitionsklasse

Erstellen Sie eine Eingabedefinitionsklasse und eine Ausgabedefinitionsklasse. Es erbt und implementiert "AbstractInputCsvInputDescription" bzw. "AbstractOutputCsvOutputDescription". Diese Klassen werden auch automatisch aus DMDL generiert. Weitere Informationen zu Datei-E / A-Klassen finden Sie im Direct I / O-Benutzerhandbuch - Datei-E / A (http://docs.asakusafw.com/latest/release/ja/html/directio/user-guide.html#id41) ) Kann erwähnt werden.

Erstellen einer Eingabedefinitionsklasse

java:com.example.jobflow.InputFile


package com.example.jobflow;

import com.example.modelgen.dmdl.csv.AbstractInputCsvInputDescription;

public class InputFile extends AbstractInputCsvInputDescription {

    @Override
    public String getBasePath() {
        return "input";
    }

    @Override
    public String getResourcePattern() {
        return "hello.csv";
    }
}

Erstellen einer Ausgabedefinitionsklasse

java:com.example.jobflow.OutputFile


package com.example.jobflow;

import com.example.modelgen.dmdl.csv.AbstractOutputCsvOutputDescription;

public class OutputFile extends AbstractOutputCsvOutputDescription {

    @Override
    public String getBasePath() {
        return "output";
    }

    @Override
    public String getResourcePattern() {
        return "helloworld.csv";
    }

}

Erstellen einer Jobflussklasse

In der folgenden Jobflussklasse wird die Eingabedefinitionsklasse (InputFile) in Import des Datenflusses im Konstruktor und die Ausgabedefinitionsklasse ( OutputFile) in Export festgelegt. Beschreiben Sie den Datenfluss in der Beschreibungsmethode. Im Beispiel ist das Eingabemodell ("Eingabe") mit dem Aktualisierungsoperator ("appendMessage") verbunden und das Ergebnis wird an das Ausgabemodell ("Ausgabe") ausgegeben. Weitere Informationen finden Sie unter Asakusa DSL-Benutzerhandbuch - Flow DSL.

java:com.example.jobflow.HelloWorldJob


package com.example.jobflow;

import com.asakusafw.vocabulary.flow.Export;
import com.asakusafw.vocabulary.flow.FlowDescription;
import com.asakusafw.vocabulary.flow.Import;
import com.asakusafw.vocabulary.flow.In;
import com.asakusafw.vocabulary.flow.JobFlow;
import com.asakusafw.vocabulary.flow.Out;
import com.asakusafw.vocabulary.flow.util.CoreOperatorFactory;
import com.example.modelgen.dmdl.model.Input;
import com.example.modelgen.dmdl.model.Output;
import com.example.operator.HelloWorldOperatorFactory;
import com.example.operator.HelloWorldOperatorFactory.AppendMessage;

@JobFlow(name = "helloWorldJob")
public class HelloWorldJob extends FlowDescription {

    final In<Input> input;
    final Out<Output> output;
    
    public HelloWorldJob(
            @Import(name = "input", description = InputFile.class)
            In<Input> input,
            @Export(name = "output", description = OutputFile.class)
            Out<Output> output) {
        this.input = input;
        this.output = output;
    }
    
    @Override
    protected void describe() {
        CoreOperatorFactory core = new CoreOperatorFactory();
        HelloWorldOperatorFactory operator = new HelloWorldOperatorFactory();
        AppendMessage appendedMessage = operator.appendMessage(input);
        output.add(core.restructure(appendedMessage.out, Output.class));
    }
}

Erstellen einer Stapelklasse

Die folgende Stapelklasse führt nur die Jobflussklasse (HelloWorldJob) aus. Informationen zu Stapelklassen finden Sie unter Asakusa DSL-Benutzerhandbuch - Stapel-DSL. ..

java:com.example.batch.HelloWorldBatch


package com.example.batch;

import com.asakusafw.vocabulary.batch.Batch;
import com.asakusafw.vocabulary.batch.BatchDescription;
import com.example.jobflow.HelloWorldJob;

@Batch(name = "example.helloWorld")
public class HelloWorldBatch extends BatchDescription {

    @Override
    protected void describe() {
        run(HelloWorldJob.class).soon();
    }
}

Bis zu diesem Punkt denke ich, dass der Untergebene des Quellordners die folgende Struktur hat. source_folder.png

Anwendung erstellen

Generieren Sie mit dem folgenden Gradle-Befehl eine Beispielarchivdatei für die Anwendungsbereitstellung. (Unter dem Projektordner ausführen)

C:¥asakusa-develop¥helloworld>gradle assemble

Wenn die Ausführung erfolgreich ist, wird die Bereitstellungsarchivdatei im Ordner "build" erstellt.

C:¥asakusa-develop¥helloworld¥build¥asakusafw-helloworld.tar.gz

Anwendung bereitstellen

Da wir diesmal unter Windows bereitstellen (für den kommerziellen Gebrauch werden wir in einer Hadoop- oder M3BP-Umgebung bereitstellen ...), fügen Sie der Windows-Umgebungsvariablen "ASAKUSA_HOME" hinzu.

Variable Wert
ASAKUSA_HOME C:¥asakusa-develop¥asakusa

Extrahieren Sie die generierte Bereitstellungsarchivdatei (asakusafw-helloworld.tar.gz) unter ASAKUSA_HOME. Führen Sie den folgenden Befehl unter ASAKUSA_HOME aus.

C:¥asakusa-develop¥asakusa>java -jar tools¥bin¥setup.jar
setup: C:¥asakusa-develop¥asakusa
framework version: 0.10.0
installation path is not a POSIX file system: C:¥asakusa-develop¥asakusa

Führen Sie die Anwendung aus

Bereitstellung von Eingabedateien

Stellen Sie die Batch-Eingabedatei im folgenden Ordner bereit. Standardmäßig wird es im Ordner "target \ testing \ directio" unter dem Basisverzeichnis des Benutzers bereitgestellt. Stellen Sie sicher, dass es mit dem in der Eingabedefinitionsklasse festgelegten basePath (Rückgabewert der getBasePath-Methode) und resourcePattern (Rückgabewert der getResourcePattern-Methode) übereinstimmt.

C:¥...<Benutzer-Home-Verzeichnis>...¥target¥testing¥directio¥input¥

hello.csv


Hello

Führen Sie mit Asakusa CLI aus

In diesem Beispiel wird Asakusa CLI verwendet (für kommerzielle Zwecke [YAESS](http: // docs) Es wird unter .asakusafw.com / latest / release / ja / html / yaess / index.html) ausgeführt und fügt der Windows-Umgebungsvariablen PATH den folgenden Wert hinzu.

%ASAKUSA_HOME%¥bin

Führen Sie die Stapelanwendung mit dem folgenden Befehl aus.

asakusa run vanilla.example.helloWorld

Stellen Sie sicher, dass die folgenden Dateien als Ausführungsergebnis ausgegeben werden.

C:¥...<Benutzer-Home-Verzeichnis>...¥target¥testing¥directio¥output¥

helloworld.csv


"Hello, World!"

Schließlich

Die Version von Asakusa Framework wurde ebenfalls zu 0.10.0 und der Schwellenwert für Entwicklung und Betrieb wurde gesenkt. Deshalb habe ich beschlossen, sie zu diesem Zeitpunkt zusammenzufassen und diesen Artikel zu schreiben. Wie war es? Es gibt viele Dinge, die ich noch nicht geschrieben habe, aber ich hoffe, sie im nächsten Artikel vorstellen zu können.

Recommended Posts

Hallo Welt, mit Asakusa Framework!
Hallo Welt mit Micronaut
Hallo Welt mit Spring Boot
Hallo Welt mit Spring Boot!
Hallo Welt mit VS Code!
Hallo Welt mit Spring Boot
Hallo Welt mit SpringBoot / Gradle
Bis "Hallo Welt" mit Spring Boot
Hallo Welt mit Kotlin und JavaFX
Hallo Welt mit Docker und C Sprache
Hallo Welt mit GlassFish 5.1 + Servlet + JSP
"Hallo Welt" für ImageJ mit Eclipse
Hallo Welt mit GWT 2.8.2 und Maven
Erstellen Sie eine Hello World-Webanwendung mit Spring Framework + Jetty
Hallo Welt mit Java Template Engine Thymeleaf
Lesen Sie "Hallo Welt"
Java-Entwicklung mit Codenvy: Hello World! Run
"Hallo Welt!" Mit Kotlin + CLI in 5 Minuten
Java Hallo Welt
Hallo Welt mit Kotlin und Tornado FX
Wie Spring Security mit Hello World funktioniert
(IntelliJ + gradle) Hallo Welt mit Spring Boot
Hallo Welt mit JavaFX 11 (OpenJFX) von Liberica JDK 11
Hallo Welt! Mit Spring Boot (Marven + Texteditor)
Hallo Welt mit explosiver Geschwindigkeit mit Spring Initializr! !! !!
Führen Sie JSP Hello World mit Tomcat auf Docker aus
[Java] Hallo Welt mit Java 14 x Spring Boot 2.3 x JUnit 5 ~
Zeigen Sie eine einfache Hallo Welt mit SpringBoot + IntelliJ
Versuchen Sie, Hallo Welt mit Frühling + Gradle anzuzeigen
Mit Rails + Docker einfach Hallo Welt anzuzeigen
"Hallo Welt" in Java
Java lernen (1) -Hallo Welt
Lesen Sie System.out.println ("Hallo Welt")
Schreiben wir Hello World
Java-Teil 1-Hallo Welt studieren
Hallo Welt mit Web Assembly
Hallo Welt (REST API) mit Apache Camel + Spring Boot 2
Hallo Welt Vergleich zwischen Spark Framework und Spring Boot
Hallo Welt (Konsolen-App) mit Apache Camel + Spring Boot 2
Einfacher Mikroservice mit Spark Framework!
[Java] Eine Art von Alphabet verboten Mit Bindung Hallo, Welt! [Bindung]
Hallo Welt mit Ruby-Erweiterungsbibliothek vorerst
Fließen Sie Fluentd-Protokolle mit Asakusa zusammen
Erstellen Sie mit SpringBoot + JPA + Thymeleaf ein einfaches CRUD ~ ~ Hallo Welt ~
Java-Anfänger lesen Hello World
Visualisieren Sie mit BI-Tools, indem Sie Asakusa Framework und Impala verbinden
[Swift] Erstellen Sie ein Projekt mit Xcode (Version 12.1) und zeigen Sie "Hallo Welt!"
Bis Sie Hello World of JavaFX mit VSCode + Gradle ausführen
Probieren Sie HelloWorld mit der Mindestkonfiguration von Heroku Java Spring-Boot aus
Vergleiche Hallo Welt! Mit Spring Boot mit Java, Kotlin und Groovy
Frühlingsstiefel Hallo Welt in Eclipse
Doppelte Übermittlung von Maßnahmen mit Play Framework
Hallo Welt für ImageJ Java Plugin
Hallo Welt mit AWS Lambda + Java
Hallo Welt von Java in Eclipse jetzt
Hallo, Welt in Vanille Java-EHW2018 "MVP"
Testen Sie den Spring Framework Controller mit Junit
Android OS (7.1.2) Build und Hello World
Hallo Welt in Java und Gradle
Spring5 MVC-Webanwendungsentwicklung mit Visual Studio-Code Hello World Creation