openjdk-9にてElasticsearchが起動しなかった時の解決方法

Elasticsearchを新規インストールした際に起動しないなーと思って、

journalctl –unit elasticsearch

を確認してみても、ヒントも得られなかったので

/usr/share/elasticsearch/bin/elasticsearch

を叩いてみた所、下記エラーが出ておりました。

[0.000s][error][logging] Invalid decorator 'utctime'.

githubに解決方法載ってました。

どうも、java9のバージョンが古く対応していなかったみたいなので、

OpenJDK-9からOracle-JDK-10に変更して対応しました。

Oracle-JDK-10に変更の記事はこちら

UbuntuにてJava10を導入する(Oracle JDK)

既存環境

まず、現Java環境がどうなっているか見ておきます。

java -version
openjdk version "9-internal"
OpenJDK Runtime Environment (build 9-internal+0-2016-04-14-195246.buildd.src)
OpenJDK 64-Bit Server VM (build 9-internal+0-2016-04-14-195246.buildd.src, mixed mode)
javac -version
openjdk version "9-internal"

ダウンロード

Oracleからjdk 10を落としてきましょう

http://www.oracle.com/technetwork/java/javase/downloads/index.html

落として来たら解凍して/usr/local/libに移動してあげます。

tar zxvf jdk-10_linux-x64_bin.tar.gz
mv jdk-10 /usr/local/lib/

現行の環境に影響を与えないよう、すぐ切り替えられるように

update-altenativesを使用します。

パスの確認

which java
/usr/bin/java

登録

update-alternatives --install /usr/bin/java java /usr/local/lib/jdk-10/bin/java 10
update-alternatives --install /usr/bin/javac javac /usr/local/lib/jdk-10/bin/javac 10

切り替え

update-alternatives --config java

->今回設定したjavaを選択

update-alternatives --config javac

->今回設定したjavacを選択

チェック

java --version
java version "10" 2018-03-20
Java(TM) SE Runtime Environment 18.3 (build 10+46)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10+46, mixed mode)
javac --version
javac 10

以上です。

ISBNコード(EAN13/JAN)をJavaで画像出力する

今回はJavaに文字列を引き渡しISBNコードを画像出力します。

早速、各種バーコードを取り扱うZXingライブラリを利用します。

// https://mvnrepository.com/artifact/com.google.zxing/core
compile group: 'com.google.zxing', name: 'core', version: '3.3.2'
// https://mvnrepository.com/artifact/com.google.zxing/javase
compile group: 'com.google.zxing', name: 'javase', version: '3.3.2'

下記がEAN13/JANを出力するコード例です。

makeEAN13に12桁の文字列を渡す事で、プロジェクト内に画像を出力してくれます。

13桁でも大丈夫ですが、最終桁のチェックサムが間違っているとエラーを起こします。(ちゃんと計算してくれているのですね)

    void makeEAN13(String code){
        EAN13Writer ean13Writer = new EAN13Writer();
        try {
            BitMatrix bitMatrix = ean13Writer.encode(code, BarcodeFormat.EAN_13, width, height);
            BufferedImage image = MatrixToImageWriter.toBufferedImage(bitMatrix);
            ImageIO.write(image, image_format, new File("barcode.png"));
        }catch(IOException | WriterException e){
            e.printStackTrace();
        }
    }

※出力されたコード

ISBN、EAN13、JANなどなど詳しい情報は別途調べて戴ければと思います。