忙しい人のためのJavaの近況とOpenJDKについて #Corretto #Zulu #Adopt

OracleからJava11がリリースされましたが

私自身、色々と誤解していた部分があったので、まとめてみました。

まとめてみると、今後はAdoptかZuluのOpenJDKがサポート期間も長く主流になるかも?と思えます。

OracleのOpenJDKも、LTSで3年サポートされれば、、、Oracle嫌いだけど。

(個人的には、流れ的にOracleのOpenJDKもLTSで3年サポートされるでしょーって思います。)

因みにサポートとは、バグフィックスやセキュリティパッチを入手できるか?ということです。

11/15 Correttoを追記。OpenJDKの戦国時代になりそうな、選択肢の豊富さになってきました。

  • Oracle JDK11
    • OracleのJDK、今までのJDKといえばほぼコレ。
    • Java12が出るまで(6ヶ月)のサポートは無償(開発・テストやプロトタイプ、デモ用途に限定)。Java12が出てからのサポートや実運用は有償。
  • Oracle OpenJDK11
    • OracleがOpenJDKをビルドして提供
    • Java12が出るまで(6ヶ月)のサポートは無償。Java12が出てからのサポート(LTS期間の3年)はチーフアーキテクトのMark Reinhold氏が宣言しているが、公式発表はなし。jdk.java.netで提供。
  • Adopt OpenJDK
    • AdoptOpenJDKコミュニティがOpenJDKをビルドして提供
    • Java8は2023年9月まで、Java11は2022年9月まで(最低4年間)サポート。
      • IBMやMS?がスポンサー
    • AdoptOpenJDK+HotspotVMと、AdoptOpenJDK+OpenJ9がある
      • Linux、AIX、Windows向けに提供されている。
      • HotspotVMのみ、MacOSとLinux ARM向けが提供されている。
    • DockerHubでも配信。 
    • IBMが、AdoptOpenJDKを4年間サポートする意向を示している。
  • RedHat OpenJDK11
    • RedHatがOpenJDKをビルドして提供
    • OpenJDK8をRed Hatが2020年10月までサポート、OpenJDK11はRed Hatが独自のサポート期間を設ける
      • Red Hat Linuxのエンタープライズ版で利用する事ができる。
  • IBM JDK + OpenJ9
    • IBMのJDK。ランタイムのOpenJ9が最近OSS化された。
    • Java8は2022年4月までサポート
      • Windows向けのバイナリは単体で提供されていない。
      • LinuxやAIX向けは単体提供あり。
      • DockerStoreで無料配信されているが、実運用は有償。
  • Zulu OpenJDK
    • AZUL SystemsがOpenJDKをビルドして提供
    • 商用サポートは8年のLTSサポートで、セキュリティとバグ修正を迅速に入手できる
    • 非商用の提供は明確にされていない。
      • JDK10、JDK9の32bit版があり、JDK6u113、JDK7u191、JDK8u181がある。
        • 非商用もサポート長いかもしれない?
      • ダウンロードページ
    • カスタマーにMicrosoft
    • 元OracleのSimon Ritter氏が所属している
  • Amazon Corretto
    • AmazonがOpenJDKをビルドして無償提供、今はプレビュー版。正式は2019年1月を予定。
    • JDK8は2023年6月(4年半)、JDK11は2024年6月(4年半)、セキュリティとバグ修正を入手できる?
    • 現在、Amazon Linux、Windows7~10、MacOSのインストーラ、Docker版が提供中、Windowsの32bit版の有無は不明。
      • 正式リリース時には、UbuntuやRed Hat Enterprise Linuxが含まれる
      • 個人的には、zip版も欲しい、、、
      • ダウンロードページ 
      • AWSにJavaの神様と言われているJames Gosling氏が所属している

以上

AntのJavaタスクでCLASSPATHを引き継ぐ

baseDirを変えて、外部のAntスクリプトを呼び出したい事があったので

javaタスクで新しいAntプロセスを起動し、build.xmlを実行することにしました。

その際に欠点があり、Ant実行時に指定したCLASSPATHが引き継がれません。

Antのドキュメントを調べてみると、VM引数に“-Dbuild.sysclasspath=last”を追加すると良さそうです。

因みに、javaタスクのcloneVm=”true”も目的を達成できそうでしたが、

対象のビルドファイル指定(-buildFile)が無効になってしまったので、

別のbuild.xmlを呼ぶことには使えなさそうです。

これで、長々とJavaタスクのclasspathを書く必要がなくなりました。

#Tinkerboard にオンラインIDEをインストール #eclipse #Che #Docker #iPad

iPad上でIDEを使ったプログラミングがしたい!人向けです。

Docker版のeclipse Cheが公開されてますが、
armに非対応で、Tinkerboardへのインストールに失敗します。

今回は仕方がないので、eclipse Cheの本体をそのままインストールしました。

“#Tinkerboard にオンラインIDEをインストール #eclipse #Che #Docker #iPad” の続きを読む

ボタンのSubmitで処理分岐 #Struts #Java

input type="submit"は、valueが表示と値(value)を兼ねているので、

表示される日本語を含む文字が、サーバ側に送信されます。

そのため、日本語でどのボタンが押下されたか判別する必要がありました。

(別途、非表示の値をJavaScriptで修正してSubmitする方法もあります。)

最近のブラウザのbuttonタグでは、サーバへ送信する値(value)とラベルの定義(タグの内容)が完全に別けられており、

ボタンの定義だけで、日本語を含む文字の判定が不要になります。

“ボタンのSubmitで処理分岐 #Struts #Java” の続きを読む

ダウンロード開始の検出 #Java #JQuery

サーバサイドで、巨大なExcelファイル(Apache POI利用)を長時間作成するので、
ダウンロードの開始を画面で検知し、処理中の状態を表示できるようにしました。

ServletとJQueryでCookieをやり取りするレガシーな処理です。
Cookieはダウンロードするファイルと一緒に、レスポンス(Header)として返す事ができます。

ダウンロード中に表示されるプログレスボタンは、JQuery-UIのプログレスを想定しています。

“ダウンロード開始の検出 #Java #JQuery” の続きを読む

個人的によく使う #Java オプション

  1. 簡単に主要なオプションを解説させていただくと、
  •  常駐型のプログラムでは-serverを明示的に指定
  •  メモリサイズ(New・Old・Perm領域)を際限なく拡がらない様に固定
    • メモリサイズはプログラムによって最適な値をあらかじめ決める
  •  コンカレントGCとパラレルGCを明示的に有効化
  •  GCログとJMX設定は管理・運用の為に必須。

実際のオプションは下記になります。

“個人的によく使う #Java オプション” の続きを読む

ヒープダンプの取得方法 #Java

  1. OutOfMemoryError時取得(VMオプション指定)
    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./dump.hprof
  2. 手動取得(PID指定)
    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./dump.hprof
  3. 手動取得を簡単に行う(Windows)Javaのパスとか環境に合わせて適宜変えてください。