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

以上です。

Thymeleafにて型チェック(instanceof)を行う

Map<String,Object>なんて事をしていたら、

ObjectがMapだったりListだったりして

EL1008E: Property or field ‘********’ cannot be found on object of type ‘java.util.HashMap’ – maybe not public?

なんてエラーを起こしてしまいました。

 

そこで、処理する前に型チェックを行い、チェックが通った場合のみ処理させます。

<td th:if="*{comps instanceof T(java.util.List)}" th:text="*{comps.li}"></td>

javaと同じ様にinstanceofを使ってあげればチェックすることができます。

否定させる場合は、

<td th:if="*{not(comps instanceof T(java.util.List))}" th:text="*{comps.li}"></td>

ですね。