Bonjour tout le monde! Avec Asakusa Framework!

introduction

Cet article explique comment créer une application batch simple avec le framework Java batch Asakusa Framework. Officiellement, il existe Asakusa Framework Tutorial, mais dans cet article, vous pouvez facilement développer Asakusa. Le but est de vous donner un aperçu de l'opération et de vous en donner une idée.

Environnement d'exploitation

Nous avons confirmé l'opération dans l'environnement suivant.

(Avant d'essayer les étapes ci-dessous, veuillez installer le JDK et Gradle.)

Chose que tu veux faire

L'exemple d'application introduit est une application simple qui lit un fichier d'entrée (le contenu est uniquement «Hello»), met à jour le contenu en «Hello, World!», Et génère le fichier. Le format DFD est le suivant. helloworld_dfd.png

Préparation de l'environnement de développement

Créez le dossier suivant et utilisez-le comme dossier de projet pour l'exemple d'application.

C:¥asakusa-develop¥helloworld

Créez un fichier de script de construction Gradle (build.gradle) sous le dossier de projet créé. Cet exemple d'application est configuré comme Asakusa Vanilla afin de pouvoir être exécuté sur une JVM Windows. Il est également possible de générer des applications pour Hadoop et M3BP en modifiant les paramètres ici. Pour plus d'informations sur le script Gradle que vous avez créé, consultez la référence du plug-in Asakusa Gradle (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
    }
}

La commande Gradle suivante génère un fichier de configuration qui peut être importé en tant que projet Eclipse. (Exécuter sous le dossier du projet)

C:¥asakusa-develop¥helloworld>gradle eclipse

Si vous souhaitez utiliser IntelliJ IDEA, veuillez vous référer au site officiel Utilisation d'IntelliJ IDEA. Si vous utilisez Eclipse, pensez à utiliser Shafu (plug-in Eclipse pour le développement Asakusa).

Génération de classe de modèle de données

DMDL (Data Model Definition Language) Créez un fichier script pour définir le modèle de données. Dans le script ci-dessous, les modèles d'entrée et de sortie sont respectivement nommés ʻinput et ʻoutput, et [Direct I / O CSV](http://docs.asakusafw.com/latest/release/ja/html/directio /csv-format.html) est défini pour effectuer l'entrée et la sortie. Créez le dossier suivant et créez un fichier de script (models.dmdl) en dessous.

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

models.dmdl


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

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

Lorsque vous exécutez la commande Gradle suivante, une classe de modèle de données pouvant être utilisée par Asakusa Framework est générée en fonction du fichier de script créé. (Exécuter sous le dossier du projet)

C:¥asakusa-develop¥helloworld>gradle compileDMDL

Créer une classe d'opérateur

Créez le dossier suivant et créez la classe com.example.operator.HelloWorldOperator en dessous. Puisque le traitement de l'opérateur à implémenter est le traitement de l'ajout d'une valeur (, World!) A la valeur du fichier d'entrée, [@ Update](http://docs.asakusafw.com/latest/release/ja/html /dsl/operators.html#update-operator) Implémente l'opérateur. Pour plus d'informations sur les opérateurs, consultez la référence des opérateurs DSL Asakusa (http://docs.asakusafw.com/latest/release/ja/html/dsl/operators.html). La classe com.example.modelgen.dmdl.model.Input est une classe générée automatiquement à partir du DMDL.

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!");
    }
}

Création d'une classe de définition d'entrée / sortie

Créez une classe de définition d'entrée et une classe de définition de sortie. Il hérite et implémente respectivement ʻAbstractInputCsvInputDescription et ʻAbstractOutputCsvOutputDescription. Ces classes sont également générées automatiquement à partir de DMDL. Pour plus d'informations sur les classes d'E / S de fichier, voir Direct I / O User Guide-File I / O (http://docs.asakusafw.com/latest/release/ja/html/directio/user-guide.html#id41 ) Peut être mentionné.

Création d'une classe de définition d'entrée

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";
    }
}

Création d'une classe de définition de sortie

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";
    }

}

Créer une classe de flux de travaux

Dans la classe de flux de travaux suivante, la classe de définition d'entrée (ʻInputFile) est définie dans ʻImport du flux de données dans le constructeur, et la classe de définition de sortie (ʻOutputFile) est définie dans ʻExport. Décrivez le flux de données dans la méthode de description. Dans l'exemple, le modèle d'entrée (ʻinput) est connecté à l'opérateur de mise à jour (ʻappendMessage) et le résultat est sorti vers le modèle de sortie (ʻoutput`). Pour plus d'informations, reportez-vous au Guide de l'utilisateur Asakusa DSL --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));
    }
}

Créer une classe batch

La classe de traitement par lots suivante exécute uniquement la classe de flux de travaux (HelloWorldJob). Pour plus d'informations sur les classes de lots, reportez-vous au Guide de l'utilisateur Asakusa DSL-Batch 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();
    }
}

Jusqu'à présent, je pense que le subordonné du dossier source a la structure suivante. source_folder.png

Créer une application

Générez un exemple de fichier d'archive de déploiement d'application avec la commande Gradle suivante. (Exécuter sous le dossier du projet)

C:¥asakusa-develop¥helloworld>gradle assemble

Si l'exécution réussit, le fichier d'archive de déploiement sera créé dans le dossier build.

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

Déployer l'application

Puisque nous déployons sur Windows cette fois (pour un usage commercial, nous déploierons sur l'environnement Hadoop ou M3BP ...) Ajoutez ʻASAKUSA_HOME` à la variable d'environnement Windows.

variable valeur
ASAKUSA_HOME C:¥asakusa-develop¥asakusa

Extrayez le fichier d'archive de déploiement généré (ʻasakusafw-helloworld.tar.gz`) sous ASAKUSA_HOME. Exécutez la commande suivante sous ASAKUSA_HOME.

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

Lancer l'application

Déploiement des fichiers d'entrée

Déployez le fichier d'entrée par lots dans le dossier suivant. Par défaut, il est déployé sous le dossier target \ testing \ directio sous le répertoire de base de l'utilisateur. Assurez-vous qu'il correspond à basePath (valeur de retour de la méthode getBasePath) et resourcePattern (valeur de retour de la méthode getResourcePattern) définies dans la classe de définition d'entrée.

C:¥...<Répertoire de base de l'utilisateur>...¥target¥testing¥directio¥input¥

hello.csv


Hello

Exécuter avec Asakusa CLI

Dans cet exemple, Asakusa CLI est utilisé (à des fins commerciales, [YAESS](http: // docs) Il sera exécuté sur .asakusafw.com / latest / release / ja / html / yaess / index.html)) et ajoutera la valeur suivante à la variable d'environnement Windows PATH.

%ASAKUSA_HOME%¥bin

Exécutez l'application par lots avec la commande suivante.

asakusa run vanilla.example.helloWorld

Confirmez que les fichiers suivants sont générés comme résultat de l'exécution.

C:¥...<Répertoire de base de l'utilisateur>...¥target¥testing¥directio¥output¥

helloworld.csv


"Hello, World!"

finalement

La version d'Asakusa Framework est également devenue 0.10.0, et le seuil de développement et d'exploitation a été abaissé, j'ai donc décidé de le résumer à ce moment et j'ai écrit cet article. Il y a beaucoup de choses que je n'ai pas encore écrites, mais j'espère les présenter dans le prochain article.

Recommended Posts

Bonjour tout le monde! Avec Asakusa Framework!
Hello World avec Micronaut
Hello World avec Spring Boot
Bonjour tout le monde avec Spring Boot!
Bonjour tout le monde avec VS Code!
Hello World avec Spring Boot
Hello World avec SpringBoot / Gradle
Jusqu'à "Hello World" avec Spring Boot
Bonjour tout le monde avec Kotlin et JavaFX
Hello World avec Docker et langage C
Hello World avec GlassFish 5.1 + Servlet + JSP
"Hello world" pour ImageJ avec Eclipse
Hello World avec GWT 2.8.2 et Maven
Créez une application Web Hello World avec Spring Framework + Jetty
Bonjour tout le monde avec le moteur de modèle Java Thymeleaf
Lire "Hello world"
Développement Java avec Codenvy: Hello World! Run
"Hello, World!" Avec Kotlin + CLI en 5 minutes
Java Hello World
Bonjour tout le monde avec Kotlin et Tornado FX
Comment Spring Security fonctionne avec Hello World
(IntelliJ + gradle) Hello World avec Spring Boot
Hello World avec JavaFX 11 (OpenJFX) de Liberica JDK 11
Bonjour tout le monde! Avec Spring Boot (Marven + éditeur de texte)
Hello World à une vitesse explosive avec Spring Initializr! !! !!
Exécutez JSP Hello World avec Tomcat sur Docker
[Java] Hello World avec Java 14 x Spring Boot 2.3 x JUnit 5 ~
Afficher un simple Hello World avec SpringBoot + IntelliJ
Essayez d'afficher Hello World avec Spring + Gradle
Facile à afficher Hello World avec Rails + Docker
"Hello World" en Java
Apprendre Java (1) - Hello World
Lire System.out.println ("bonjour, monde")
Écrivons Hello World
Étudier Java-Partie 1-Hello World
Hello World avec Web Assembly
Hello World (API REST) avec Apache Camel + Spring Boot 2
Comparaison Hello World entre Spark Framework et Spring Boot
Hello World (application console) avec Apache Camel + Spring Boot 2
Micro service facile avec Spark Framework!
[Java] Un type d'alphabet interdit Avec reliure Bonjour tout le monde! [Reliure]
Hello World avec la bibliothèque d'extension Ruby pour le moment
Agréger les journaux Fluentd avec Asakusa
Créez un CRUD simple avec SpringBoot + JPA + Thymeleaf ① ~ Hello World ~
Les débutants en Java lisent Hello World
Visualisez avec les outils de BI en liant Asakusa Framework et Impala
[Swift] Créez un projet avec Xcode (ver 12.1) et affichez "Hello, World!"
Jusqu'à ce que vous exécutiez Hello World of JavaFX avec VSCode + Gradle
Essayez HelloWorld avec la configuration minimale de Heroku Java spring-boot
Comparez Hello, world! Avec Spring Boot avec Java, Kotlin et Groovy
Spring Boot Hello World dans Eclipse
Double soumission de mesures avec Play Framework
Hello World pour le plugin Java ImageJ
Hello World avec AWS Lambda + Java
Bonjour le monde de Java dans Eclipse maintenant
bonjour, monde dans Vanilla Java-EHW2018 "MVP"
Contrôleur de cadre de test Spring avec Junit
Version du système d'exploitation Android (7.1.2) et Hello World
Bonjour tout le monde en Java et Gradle
Développement d'applications Web Spring5 MVC avec Visual Studio Code Hello World Creation