2017 Java One 報告会に行ってきた
2017 Java One 報告会
行ってきました。
後半疲れてメモが取れていませんが、 雑なものでも助かる人はいるかもしれないのでメモを残します。
リリースモデルの変更
従来
- OpenJDK
機能リリース
長期サポート
- 更新リリース
- 3ヶ月毎
- メンテナンス用、機能更新は行われない
新しいリリースモデル
OpenJDK
機能リリース
- 6ヶ月に一度、固定周期でリリース
- バージョン表記:$YEAR.$MONTH (18.3,18.9)
- 完成した機能からリリース
Open JDKのバイナリ
で配布- 後継バージョンまでの6ヶ月の無償サポート
- GPlv2 + Vlasspath Exception
- 長期サポート
- 更新リリース
- 3ヶ月毎
- メンテナンス用、機能更新は行われない
公式アップデート終了のスケジュール
- 8
- 2018/9終了
- 9
- 2018/3終了
- 18.3
- 2018/9終了
Java 9 and Future
今日のお話
Java 9の調べ方
- Java Enhancement Proposal(JEP)を見る
- http://openjdk.java.net/projects/jdk9
- bugzilla
- fixVersion = "9" AND labels = release-note
移行する際に注意するポイントは?
- Migration Guideを読む
- https://docs.oracle.com/javase/9/migrate/toc.htm
- メジャーバージョン毎の非互換性ポイントが書いてある
より細かく見る
- 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
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のチラ見
Intel's persistent memory
- 揮発性じゃないメモリ、電源が切れてもデータが保存されてる
- 市場に出るのが2018
- Oracle Databaseで使えるように
Oracle DB + PM
- だいたい5倍早くなった
使いみち
- Volatile Strage
- Persistent Strage
- https://github.com/pmem.pcj
- 永続化可能なクラス、コレクション
- API,トランザクション
- クラスの定義方法
- PMを直接叩くAPI(Low levelAPI, Panama API)
まとめ
- OSS DBが出てくるのはまだまだになりそう
Java EE 8
概要
- 2017/9に出た
Java EE 8
source
- java.net -> githubに移行 ‐java.net : https://javaee.github.io/
Glassfish
Weblogic
- Java EE 8サポート版は来年出す予定になってる
Eclipse Enterprise for Java(EE4J)
- 以下にしたい
- 8 available
- open
- nimble
- eclipseに移管
- 移管プロジェクトの名前がEE4J
- Java EEの後がまではない(ブランド名は決まってない)
- もしかしたらそのままEE4Jになるかもしれないけど、現時点でそうとは決まってない
どうありたいか
- Open
- たくさんのひとに参加してもらいたい
- コミュニティドリブンなプロセスを作っていきたい
- oracleはリーダーの立ち位置ではなくメンバーに変わる
- Comppatible
- 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へ
組織、文化
- システムのスケールに合わせて組織のスケール
- コンウェイの法則
- 組織のコミュニケーション構造がシステムに反映
- 逆法則も(Service間コミュニケーションの形が組織に反映)
- Automy(自主・自立性)を何より重視
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の話が特に勉強になりました。 パッケージの一つ上の階層としてモジュールって概念が登場して設計の選択肢が広がるのかなって思ったの一番強く残った印象です。