2017 Java One 報告会に行ってきた

2017 Java One 報告会

行ってきました。

後半疲れてメモが取れていませんが、 雑なものでも助かる人はいるかもしれないのでメモを残します。


リリースモデルの変更

従来

  • OpenJDK
    • 仕様のリファレンス実装で、Oracle JDKと技術的な差がある
  • 機能リリース

    • 2年に1度を目標にしていた
      • 守れた例がない
    • Oracle JDKのバイナリで配布
      • 後継バージョンのリリース後1年無償サポート
  • 長期サポート

  • 更新リリース
    • 3ヶ月毎
    • メンテナンス用、機能更新は行われない

新しいリリースモデル

  • OpenJDK

    • Oracle JDKとの技術的な差分をなくなる(2018年後半)
  • 機能リリース

    • 6ヶ月に一度、固定周期でリリース
    • バージョン表記:$YEAR.$MONTH (18.3,18.9)
    • 完成した機能からリリース
    • Open JDKのバイナリで配布
      • 後継バージョンまでの6ヶ月の無償サポート
      • GPlv2 + Vlasspath Exception
  • 長期サポート
    • 2018/9からスタート
    • Oracle JDKのバイナリで配布(有償)
    • 8(5+3)年の長期サポート
  • 更新リリース
    • 3ヶ月毎
    • メンテナンス用、機能更新は行われない

公式アップデート終了のスケジュール

  • 8
    • 2018/9終了
  • 9
    • 2018/3終了
  • 18.3
    • 2018/9終了

Java 9 and Future

今日のお話

  • Java 9の調べ方
  • Java 9のメイン機能について少し詳しく
  • 次のJavaをちら見

Java 9の調べ方

移行する際に注意するポイントは?

より細かく見る

  • SpecificagtionやRelease Noteを読む

メリットの一部

  • モジュール化(Project Jigsaw)
  • RPEL(Jshell)
  • ライブラリ改善
    • Collection 初期化、Stream機能拡張
  • セキュリティ強化
    • ALPN,DRBG,SHA-3
  • 付属ツールの刷新
    • jcmd, jhsdb, jaot(AoT Comppilation)
  • G1 GCコンパイラなどの性能改善

Demo

Jigsaw

  • module名のディレクトリを切って、module-info.javaを書く
    • 同じpublicでも、module-info.javaで公開するしないをきめ細やかに指定できる感じか
    • 依存関係を書くイメージ
  • publicだけど公開されていないAPIを利用しようとするとコンパイル時に検知して、エラーで教えてくれる
  • 依存moduleをmodule-info.javaに書き忘れると、importしてるけどmoduleをmodule-info.javaにdeclareしてないよって教えてくれるよ
  • DDDに有効活用できそう
  • デモの内容はgithubにあるよ

jshell

  • Java言語のRead Eval Print Loop(REPL)ツール
    • like LIST, Python, Ruby, Haskell, Scala, Groovy
    • Java言語のプログラムの一部を入力
    • その場で実行し結果を出力
  • 教育分野ではREPLツールがある環境が人気

    • REPLがないので、Javaの人気の低下
  • 補完機能が協力

    • import
    • 変数定義

Collection Factories

  • List.of(...)
    • Arrays.asList(...)
  • Set.of(...)
    • Collections.unmodifiableSet(new hashSet<>(Arrays.asList(...)))
  • Map.of(...)
    • new hashMap<>(){{put(...);...}}
Properties of Collection Factories
  • imutableになってる
  • フェイルセーフ
    • NPE
    • IAE: Set,Map(key)に重複する要素
  • 最適化されている
Enhancement Stream API
  • Stream.dropWhile
  • Stream.takeWhile
    • 無限loopに終了条件を与えることができる
  • Stream.ofNullable
  • Stream.iterate
    • ほぼfor文

18.3のチラ見

  • Project Amber
    • 型推論が入る
    • 変数の型推論でvarが使えるようになる
    • すごく良さそう!!

Intel's persistent memory

  • 揮発性じゃないメモリ、電源が切れてもデータが保存されてる
  • 市場に出るのが2018
  • Oracle Databaseで使えるように

Oracle DB + PM

  • だいたい5倍早くなった

使いみち

  • Volatile Strage
    • 普通の使い方ではある
      1. Heapを全部のせる
        • メモリアクセス速度<大容量
          • 優先度がひくい
          • BigData application
          • in-memory db
        • 使い方
          • javaコマンドの引数に入れる
      2. heapを一部のせる
        • ユーザが割り当てを指定
        • プロファイリング結句ぉ元に自動で割り当て、移動
        • アクセス頻度が高く、小さい→DRAM
        • アクセス頻度が低く、でかい→PM
        • xmpオプションを追加するxmxとかみたいな感じで。
  • Persistent Strage

まとめ

  • OSS DBが出てくるのはまだまだになりそう

Java EE 8

概要

Java EE 8

source

Glassfish

  • 5.0が出た
  • ほぼ4.1.2の機能はサポートしてる
  • Java 8はサポートできてる
  • Java 9はGlass fish 5.1.0からサポートするつもり
  • Dockerイメージあるよ

Weblogic

  • Java EE 8サポート版は来年出す予定になってる

Eclipse Enterprise for Java(EE4J)

  • 以下にしたい
    • 8 available
    • open
    • nimble
  • eclipseに移管
  • 移管プロジェクトの名前がEE4J
    • Java EEの後がまではない(ブランド名は決まってない)
    • もしかしたらそのままEE4Jになるかもしれないけど、現時点でそうとは決まってない

どうありたいか

  • Open
    • たくさんのひとに参加してもらいたい
    • コミュニティドリブンなプロセスを作っていきたい
    • oracleはリーダーの立ち位置ではなくメンバーに変わる
  • Comppatible
    • 互換性
    • transition from java ee 8 to new offering
    • javaxパッケージはそのまま移管するのでご完成はある
    • 新規で作るのはeclipseの流儀で作る
    • 今まであったものはそのまま使えるよ、新しいものはEclipseのやり方に変わるよ
  • Flexible
    • Modern open source process and licensing
  • Nimble
    • Morerapid evoution of the technology
    • リリースサイクルを早くする、仕様作成プロセスとかも。

その他

  • Micro Profileと(Next) Java EEはマージする予定
  • JSRのやり方は踏襲する

まとめ

  • Java EE 8 was released.
  • EE4J has started.

Microservices topic & approach

ゴール

  • いってみてわかったこ
  • 今、全体的に何が議論されているのか

行ってみてわかったこ

  • 10月のサンフランシスコはホテルは高い(普段の2〜3倍)
  • 会場近くのホテルはすぐ埋まるし、高い
  • 疲れたらすぐ戻れるように会場近くがよし
    • 長丁場で、体力勝負

なるべく疲れないようにする

  • 16時間の時差、慣れない環境で5日間は体力勝負
  • きつければ、適宜休むこと
  • 割と寒い
  • 移動はUberが楽

必ずセッションは事前登録

  • 優先で入れる
  • 未登録の場合は、並んで空いてたら入れる

技術系・資料ありセッションはわかりやすい

  • 技術系のお話や資料に沿って解説は英語でもわかる
  • 資料がタイトル程度だったりパネルディスカッション系はしんどい

Microserviesの話題や取り組み事例

モノリスからMiroservicesへ

  • まずモノリスだった
  • サービスの拡大によりスケールする必要に
  • Microservicesアーキテクチャ
  • 組織と文化もそれに合わせてかわった
  • 数年かけて継続していて、なお続く

組織、文化

  • システムのスケールに合わせて組織のスケール
  • コンウェイの法則
    • 組織のコミュニケーション構造がシステムに反映
    • 逆法則も(Service間コミュニケーションの形が組織に反映)
  • Automy(自主・自立性)を何より重視
    • Squad(分隊)と呼ぶチームにメンバーが所属
    • 独立リリース可能な状態を維持する、破壊的な変更はちゃんと手続きを経る
      • 同期型APIならエンドポイントの移行期間を設ける
      • 非同期型を同期型よりも推奨

Microservicesをとりまく仕組みについて

  • CI/CD
    • 小さく、頻繁にデプロイする
  • Container, Orchestration
    • Docker,kubernetesが常に登場
  • Service Registry
    • Serviceのホスト名・ポート番号を名前で抽象化
  • Asynchronous
    • 可能な限り同期より非同期
  • Fault Tolerant
    • 一部のエラーで全体が影響を受けないように
  • Monitoring
    • 現状がどうなっているかを可視化する
  • Tracing

議論の対象の変化

  • FrameworkやLibraryは自前で開発したりラッピングするものではない
  • それらはConsumeするもの
  • 議論の対象はServiceという部品をどう協調動作させるか?になっている

同期 < 非同期

データ処理パターン

Eventual Consistency(結果整合性)
  • 異なるデータストア間の内容の整合性がEcentual Consistencyでも良い場合は非同期連携で各データストアに反映すれば良いため、相性が良い
Event sourcing
  • データストアをイベント記録に使う
  • insertのみし、updateはしない
  • ひたすらログを取っていくやり方
CQRS
  • 更新用のStrageと参照用のStrageは別だったりもする
    • 更新用のStrageからEvent sourcingで参照用のStrageに現状のデータを反映する?
複数ServiceにまたがったTransaction
  • Long running action

考察

必要性を考える

  • スケーラビリティやリリースの速度アップの必要性に迫られてそうなった
  • どこでもスモールスタートだった、そしてMicroserviceを想定していない
  • 必要に迫られてるか?を自問したほうが良い

組織や文化とセットで考える

トレードオフも考える

以上! Java 9の話が特に勉強になりました。 パッケージの一つ上の階層としてモジュールって概念が登場して設計の選択肢が広がるのかなって思ったの一番強く残った印象です。