Play your life !

趣味と実益メモ

Java Day Tokyo 2018 に行ってきた話

Oracle Java Day Tokyo 2018

OracleJavaイベントに参加してきました。
昨年も参加したイベントですが、コンテナを導入していくぜって雰囲気の昨年と比べると、コンテナを実践していくぜ、JVMを改良していくぜといった雰囲気の話が多かった印象です。
私は主にリリースモデルやコンテナ周りのセッションを聞いてました。

概要はこちら

本記事は私のメモ書きと感想です。

keynote

所感

リリースサイクルの話と11に向けて各パラレルで動いているProjectの話が大半だった
昨年との比較としては、昨年はコンテナに注力していくぜ!だったのがコンテナはもう当たり前に使うものだ、みたいな潮流になっていた。
コンテナやサーバーレスといったアーキテクチャの新しい選択肢について、具体的なメリットの説明が加えられるようになっていたので、これからもその流れなんだろうなと。

GCとかフライトレコーダーとかの開発・改善も徐々にオープン化したりして進めているっぽい。 率先してオープンにしていっているのは良い変化なんだろうなと。
フライトレコーダーのデモはeclipseにembedされてた感じのものだったけど、分析結果が明瞭で利用価値がありそうだった。

サーバーレスとかコンテナをサポートするよ!っていうところが強調されてた。特にjava ee
process上にdocker浮かべてってのも紹介されていたけど、処理を分散、パラレルで実行、は良さそう。
検索部分だけでもこういう仕組み仕込むと面白いかもしれない。

[TEC-2] Container Nativeアプリケーション開発とアーキテクチャの勘所

MicroServicesにおける課題を解決するためのContainer、みたいな筋が明確で、一番参考になったかもしれない。

資料

http://otndnld.oracle.co.jp/ondemand/javaday2018/TEC-2

まとめると

  • MicroServicesには課題がいっぱい
    • アーキテクチャ
      • 障害対応、スケール、全体的にかかるオーバーヘッド
    • 運用
      • 横断的な監視、デバッグの困難さ、セキュリティ
    • 開発プロセス
      • 複数サービスの組み合わせテスト
      • CI/CD
      • カナリーデプロイメントやグリーン・ブルーデプロイメント
  • 課題を解決する一つの手段がConainerとそのオーケストレーションツールを利用した方法。Kubernatesがその実装の一つ。
    • 活かせない例
      • 一つのコンテナに多くの機能を詰め込みすぎるケース
      • Container自体の品質が悪いケース
    • 活かせる例
      • 低レイヤーの共通処理は別コンテナに切り出す
      • initContainerパターン
    • 様々なデザインパターン
  • Oracle Cloudのツールを使うと比較的容易に実践できる。
      - [Oracle COnteiner Pipelines Werker[(http://www.wercker.com/)
    

[TEC-3] Running Java applications on Docker: practical tips and valuable insights

dockerでjavaを動かす際のメモリやCPU周りについてのTIPSについて。

資料

http://otndnld.oracle.co.jp/ondemand/javaday2018/TEC-3

まとめ

  • 3つの問題
    • アプリから実際に使えるメモリが見えない
    • アプリから実際に使えるCPUが見えない
    • docker上だとエントロピーに基づくランダム数を出すことが出来ない
  • 解決策
    • 実行時の変数でメモリ指定
    • ライブラリの中に明確にCPUを指定できるものがあるのでその該当する環境変数をオーバライドする
    • エントロピーを引き渡せるように設定を変更する
  • デバッグとインテグレーションテスト
    • 基本的にはmavenを活用すれば大丈夫そう。
  • サンプル

[JSE-3] JDKの新しいリリースモデル

OpenJDKとOracle JDKのリリースモデルについて。
独特なサイクルになるので注意すべきって話と、11LTSになるといろいろ話が変わるという話。

資料

http://otndnld.oracle.co.jp/ondemand/javaday2018/JSE-3

まとめ

  • 機能か、リリースか
    • 大規模な更新を待つとどうしてもリリースが不定期になる
    • 小規模な機能開発でもリリースしていきたい
  • クラウド環境に適応しているか
    • マイクロサービスを意識したモデルに変更したい
    • コンテナイメージも配布を始めた。
  • フィーチャーリリース
    • 年6回のリリースで、3月9月に機能リリース
    • SE 8 の商用機能の利用が可能に
  • LTSリリース
    • 3年ごとのフィーチャーリリースのバージョンに設定
  • 利用可能になる商用機能
    • ZGC
    • Flight Recorder
    • 他。
  • JDKに含まれなくなるものも一部ある
  • Java Plugin から移行のお願い
    • 切実な雰囲気。
  • JRE
    • 基本的には配布するアプリケーションベンダー側でアップデートしてほしい雰囲気
  • リリースに対する要望
    • より速く計画的に完成した機能をリリースする
    • よりシンプルかつ再配布可能なバイナリのライセンス体系
  • Oracleのバイナリ配布サイクル
    • 9,10は移行期間
      • 11移行は安定して半年ごとのアップとLTSになる。
      • 12~15について長期サポートされない。=結局次のLTSまで待ったほうが良い、
      • 無償版の脆弱性対策→機能追加のところでそういう対応はしない、今までのサイクルどおりで脆弱性対応はしていく
  • これからの開発について
    • 利用しない新機能よりも、非推奨APIなど、使えなくなる機能について対応することが優先
    • セキュリティロードマップを注意しておくこと。
    • Java SE Javaとしての振る舞いをチューニングしていく
      • Graal 多言語対応

[JSE-5] Java SE 10、そしてJava SE 11への移行ガイド

現場目線での移行のポイント解説

資料

http://otndnld.oracle.co.jp/ondemand/javaday2018/JSE-5

まとめ

  • CHECK1 Deprecated
    • Deprecated;forRemovalなもの 絶対消えるので修正しないといけない
    • NO MORE Applet No More Java Web Star
  • CHECK2 Prohibit Access to JDK Internal APIs
    • sun~,com.sun~など・・・ -
    • 一応、command lineからは --add-exportしてあげると公開できるので、普通に動かせるようにはなる。
  • CHECK3 Reflection
    • illegal rflctive access operation has occuredと出る
    • --add-opens すると一応実行できる
  • CHECK4 Remove Java EE Module
    • packageを複数のモジュールに紐付けられなくなるので、ちゃんとjava eeの方の本流の方に戻していかないと使えなくなってしまう
    • JAXBとかJAXWS → 11では使えない
    • --add-modulesで追加してあげると、一応動く。追加でモジュールを使えるようにする。
      • つまり標準のモジュールパスを拡張してあげればよい
        • ただし11では完全になくなる
  • CHECK5 Module Defines* Dependency Disclosure scope
    • jarファイルのメタ情報としてモジュールの情報を付与できる
    • この辺ちょっとうろ覚え...
  • CHECK6 Module path class path
    • Class Pathの世界とModule Pathの世界を両立させる必要がある
      • ライブラリの依存関係的に、モジュールパスだけではうまくいかない
      • 一方で、class pathというのだけではうまくいかない
        • 直接アクセスするか、間接的にアクセスするのか、でmodule,non moduleを分けて考える
        • --add-moduleds ALL-MODULE-PATHといった呪文で解決してやる。
  • CHECK7 JavaFXがない
  • CHECK8 Incubator Module
    • 名前が変わる場合がある。
      • 例えばIncubator 配下のモジュールがリネームされることがある。
      • ModuleInfo とかで注意しとかないとまずい

[BN-3] 50分で最新技術学習の基礎を身に付ける

爆速で技術用語を総ざらいする感じ。

資料

http://otndnld.oracle.co.jp/ondemand/javaday2018/BN-3

まとめ

  • マイクロサービスについてそれっぽいことが言えるようになる。
    • 大体資料の通り。お見事。

総括的な感想

ざっくり言えば、Containerを利用してマイクロサービスを実践していく流れと、それによって要請されるJavaの方向性との両方に気を配っていくべきだと感じた。
dockerやkubernatesなどサポートする環境が整ってきたこともあり、そろそろ自分でも触ってみることが大事かなと。

書籍やセッションを聞くと、わかった気にはなるし、[BN-3]セッションの内容のように、それっぽいことは言えるようにはなる。
ただその一方で、それを形にしてどう?と言えないと現場で使えるとは言えないんだろうなと。

そんな感じ!!