Java Day Tokyo 2017に行ってきた
5/17(水) 仕事は有給休暇を取って品川までJava Day Tokyo 2017に行ってきた。
http://www.oracle.co.jp/events/javaday/2017/
参加した感想
参加するのは今年が初めて。
平日の朝、スーツを着ずに会社とは別の方向に向かうのは新鮮である。
D1-KY Java Day Tokyo 2017 基調講演
最初はOracleの社長の話。
Javaすごいって話。
日本のITは人手不足。2017年は21.9万にも不足しているとのこと。人材は90万人。
Javaで生産性向上しようとか。
そのあとは、Oracleの外国人の方々。
同時通訳のイヤホンを初めて使った。
JavaはOracleに買収されてから、Javaが存続するかの話題が減ったらしい。
オープンソースのOpenJDKに支えられていて、いろんなプラットフォームに展開されている。
みんなも参加しよう。
その他、Java9の新機能の話。
お昼休憩
ステッカー欲しさに、Java認定試験のサンプル問題に挑戦。
Upgrade Java SE 7 to Java SE 8 OCP Prorammerを選択。
5問中1問正解。。。。 ラムダ式とか全然わからなかった。
Java7で止まってしまっているのを改めて実感。
D1-A1 Java 9 and Beyond: Java Renaissance in the Cloud
Java9の話。あまりついていけなかった。
D1-B2 Java EEにおけるフロントエンド開発とJSF2.3アップデート
最初にここ数年よくある話で、Struts, seasar2のEOLに伴い、JavaEEに移行が増えているという話。
説明は、淡々とアップデート内容を話していく感じ。
- JSFの特徴
- ステート管理ははステートフル
- 仕様策定はJCPにより決定、Springは独自
- MVCアーキテクチャ: コンポーネントベース
- 理容ユースケース:安定性重視のアプリケーション、UIを簡単に開発
- フレームワークの利用の方針を明確にすることが重要
- Webアプリケーション開発のフロントエンド開発に求められているもの
- 開発容易性
- デザイン・操作性
- レスポンス向上
- モバイルデバイス対応
*JSFの開発容易性 - JSF2で改善
- JSF2.3のアップデートも開発容易性が多い
これもよく聞く話。
JSF1にトラウマがあるだけにJSF2.3のアップデートの内容を聞いてると、
現状のJSF2.2もいまいちで2.3もまだまだという感じに思えてしまう。
D1-A3 Introduction to Shell: Official REFL Tool for Java Platform
- 概要
- API, 構文挙動確認、プロトタイプ開発、プレゼン・教育で利用を想定
- Mainクラス作成、コンパイルなどを適用が面倒
- 他の言語ではREPL(Read-Eval-Print Loop)ツールがある
- 教育分野ではREPLツールがある言語が人気
- JDK9 EAで利用可能。正式版は7/29予定
- 利用できるコード
- package文以外は利用可能
- セミコロン省略可能
- final, publicなどは無視
- メソッドやクラスの定義は後から変えられる
- 前方参照が可能。
*動作 - JShell用のjvmとは別のjvm上で実行する
- コード補完機能がある
- JavaFXをJShellから使えるプラグインがある。これを使うとFXもコマンド打つとすぐに反映確認ができる。
説明後にQAの場があったが、スクリプトファイル化出来るかというのが多くあった。
なんとかすればできなくもないというのが回答。
RubyやPythonなどのスクリプト言語のようにJavaのバッチをスクリプトで書きたいという需要があるのかなと思った。
確かにビルド、パッケージングなど面倒なので出来ると便利だなと思った。←出来ないわけだが。
D1-C4 Java EE開発者のための今から取り組むMicroservice開発
今はマイクロソフトの寺田さんのセッション。
Javaならではの話ではないけど、マイクロサービスに取り組むにあたって気をつけるべきことの話。
- マイクロサービス化は必要か
- 考えて作らないと管理できなくなる
- マイクロサービスでなければいけないのかは考える必要がある
- 提唱者もやりすぎも気をつけるようにすべき
- 寺田さんの考え
- 耐障害性のためが一番ではないかと思ったとのこと
なぜ、必要なのか考える必要がある。
運用するにもDevOpsができていることが前提というのが印象的。
とはいえ、マイクロサービスに限らず取り組んだ方がいいのもあるということで
初級、中級の内容を話してくれた。
- 初級
- 新機能は既存に追加しない。そこからマイクロサービス化。
- ソース管理
- サービス毎にリポジトリを分ける
- アプリケーションサーバ
- warから実行可能jarに
- 共有ライブラリ呪縛からの解放
- プライベートリポジトリを建てる。
- ビューとロジックを分離する
- 中級
- 非同期処理
- 同期、非同期(ブロッキング)、非同期(ノンブロッキング)を考えてプログラミングする必要がある
- ブロッキングだとリソースが待ちになる
- どこでも動くサービスを作る
- 外部リソースの設定
- プロパティでDB接続設定 → 環境変数に設定する
- 環境変数を読むようなプログラミングにする
- セッション管理
- アプリケーションサーバ依存の排除
- サーバHTTPセッション共有 → Inmemory Grid
- 運用監視は重要
- 外のシステムでログを見れるようにしましょう
- Elasstic Searchとか
- 各システム内に行かないと見れないようにしない
- データベース管理
- サービス毎にデータベースを分けていく
- データベース連携 → メッセージ連携
- CQRS
- ReadとWriteを分ける
- Event Hub
- サービス導入
- ホット・デプロイから継続的デプロイ
- すべての変更を自動的に本番での検証
- 障害は起きる
- 起きても大丈夫なように作る
- マイクロサービスはサービスも増えるため、障害にはさらに敏感になる必要がある
D1-D5 Spring Framework 5.0によるReactive Web Application
Reactive Javaというキーワードは聞いたことあったけど、少し内容がわかったきがする。
- Reactive
- non-blocking
- event-driven
- back pressure
- ブロッキング
- I/Oが入るとブロッキングされる
- 非同期でブロッキング
- 非同期でノンブロッキング
- Event loop。イベント起動で待ち時間に実行する
- Servletを使うと必然的にブロッキングになる
- non-bockingを Nettyというアプリケーションサーバがある
- Apple、Twitterで使用されている
- スレッド数はCPU数で多くのリクエストを捌ける
- SpringがReactive対応する理由
- マイクロサービスで少ないリソース、早くで動作するため
- slow client(遅い回線からのクライアント) の処理をさばく
- Web Socket
- HTTP/2
*スケーラビリティ、安定性 - Reactiveにするための方法
- ブロッキング処理をコールバックなイベント処理に。
- Reactive Stream
- Publisher (ストリームのデータ)
- Subscriber (Publisherを呼び出すクラス)
- backpressureで読み出す量を調整する
Spring5.0ではSpring MVCと同じような感じで書ける Spring WebFluxで対応。
基本Netty. Servlet 3.1でも実装しているのでTomcatでも動くとのこと。
WebFluxを使うかはさておき、JavaEEよりSpringの方がやはりいいかなと思った。
さいごに
ここで18時。
最後のスペシャルセッションは参加せず、帰宅しました。
今仕事では使ってない技術ですが、イベント参加することで新しい技術に触れたり
先を行く人の話をきくことで、新鮮な気持ちになれた。