JJUGナイトセミナー Javaフレームワーク特集 に行ってきた
6/27に開催されたJJUGナイトセミナーに行ってきたのでその参加レポートというか自分用メモです。
かなり長くなった。。。
まとめる能力(´・ω・`)
【東京】JJUGナイトセミナー Javaフレームワーク特集 - WildFly Swarm / Play Framework / Spring Boot
会場 日本オラクル株式会社 本社 13階
https://jjug.doorkeeper.jp/events/46954
ハッシュタグ:#jjug
Togetter:http://togetter.com/li/992744
WildFly Swarm - Rightsize Your Java EE Apps
田邊 義真さん (@emaggame)
以下メモ
WildFly / WildFly Swarm??
WildFly
Java EE7 対応APサーバ
Java9で入るJigsaw的なModule class loader
WildFly Swarm
各種インテグレーション:NetFlixとか
SpringBootっぽいよね?
Wildfly-bootというrepositoryがあるので元々はこういう名前だったのではないか
All In One のためスリム化は自身で行う必要がある
削ることはできるけど依存してたりするので大変
分割と再構築Fractionという単位で構成されていて必要な物だけ使えるぜ
基本的な使い方
WildFlyを表すcontainerというものをnewする
スライドはmvnだけですがgradleもあるよ
普通のWildFly: 1.ダウンロード/インストール 2.設定 3.起動&デプロイ
通常のWildFlyと比較すると依存性で解決できて、
設定・起動・デプロイはmain()で記述できて楽
Fractions
機能や設定の単位
とりあえず有効にすると、いい感じに設定してくれる
色々あるけど今回は一部紹介
※ここは実際にコード見ながらの説明だったのでスライドを見たほうが良い(15ページから)
core
JavaEEやWildFlyのsubsystem相当
jpaを指定すればdatasourceも付いてくる
Arquillian(テスト)
Mockを使わず本物のEJPやCDIコンテナを利用できる
WildFly を事前にインストールする必要があるけどSwarmは不要
Netflix OSS
現状はRibbonとHystrixのみ
使う下準備を支援
必要なライブラリの用意とか
Spring Bootみたいに annotation 1発で色々やってくれるわけではない
→issueが上がっている
興味ある人は公式tutorialへ
Topology
サービスディスカバリ
jgroups consul openshiftの3種類の実装が利用できる
3種類の実装があるが、意識せずにサービス登録可能
keycloak
認証/認可に対応した SSOサーバ
認証クライアント設定用APIを提供
マイクロサービスで1個1個認証書いているとツラいので認証サーバ用意するときに使える
Swagger
APIからドキュメントやモックを生成
JAX-RSで利用する場合下準備がかなり必要だがそれをやってくれる
annotationを追加することで動作を登録できる
Swagger UIを使ってドキュメント化が可能
Spring/Spring Boot
Spring + WildFlyはよく見かける組み合わせ
「対立する必要はないと思っている」
ユーザガイド未記載のためサンプル参照
便利な機能
project-stages.yml
ステージごとに設定が可能
起動時にステージを指定する
コミュニティ
最後に
一通り WildFly Swarm を触ってみるガイドを作ってみたとのこと
WildFly Swarm Tour
まだGAではないものの大分安定してきた
開発から1年で今後活かすも殺すもコミュニティ次第
Q&A(曖昧)
Q:Arquillianはサーバ立ててやりますが、一部だけモック化して行うことは可能ですか?
A:一気通貫でやるのがArquillianの方針であると思っていて一部モック化というものはやったことがない
The High Velocity Web Framework For Java and Scala
株式会社 DTS 梅澤 雄一郎さん (@garbagetown)
PlayFrameworkドキュメント翻訳仲間募集してますとのこと
スライドは後日公開?
公開されてた
免責事項:PlayはWebのフレームワークであり、Javaのフレームワークではない。
以下メモ
Playの歴史
Frameworkは登場の背景とかを知ってないと間違ったところに適応されることがある
1系は 1.2 で終わったと思ったら、最近エストニアの方がメンテしている
Play1の歴史
Java6とかSAStrutsとかの時代、傍でRailsが絶好調
Java全体で停滞感
SunもOracleに買収された
WebはステートレスだからServletやめたった的な感じ
http://ikeike443.hatenablog.com/entry/20120107/p1
Javaではないなにか
Javaの非合理な慣習や機能不足への調整
長ったらしいパッケージ名とか言ってたけどメモ追いつかなかった
そしてPlay2へ
これからリアルタイムWebだから非同期に
Play2の歴史
2012~
フレームワークの世代交代
当時はJamesが牽引していたがLagomに専念するらしい
Scalaで全面的に書き直し
2.0 当初は不十分で品質も不安定でメーリングリストが荒れた
2.3 から品質が安定
Akka統合
Akka:並行分散処理フレームワーク
特徴
Webフレームワーク
- Servlet API非依存
warも出来ないこともないけど茨の道
組み込みNettyで動作(ここがAkka HTTPに変わるかも) - ステートレスアーキテクチャ
サーバ側セッションなし
Railsと同じでクライアント側Cookieセッション、Flash
ホットリロード
- サーバを再起動せずに開発
組み込みECJでcompile
クラスローダ差し替え - Java/Scalaソース以外も静的検査
アセット、トランスファイルしてくれる
基本的にScalaにcompileされる
スキーマ管理
Evolutions
フルスタック
Web開発に必要な機能をデフォルト提供
- ORM
- バッチジョブ
- Test
- WebSocket
- MVC
モジュール
便利な機能をモジュールで提供
Java/Scala API
非同期処理
Akka Actorに委譲する
「lagomとの統合も進むとPlayの役割がなくなっていくのでは」
lagom
マイクロサービスフレームワーク
サーキットブレイカー搭載
Java APIが搭載
使い方
Play2.4/Javaでの紹介
黒い画面苦手な人向けにActivatorUIもあるよ
PlayはRailsみたいにmodelの方にfinderを作ることが多い
View は Scala で書くのでScalaは避けられない
テンプレート名.renderでビューをレンダリングできる
conf/routesでルーティング情報を一元管理
router.Routes.scalaにcompileされる
利点/欠点
Play1
- 大きな仕様変更はない見込み
- 軽快な開発(ホットリロード)
- Lombokとの相性が悪いらしい
- ギヨームがコミッターを外れたのでサポート体制が不安
Play2
- Scala Webフレームワークのデファクトスタンダード
- Play2を追いかければリアクティブを追っていくことになる
- 下位非互換性
- compile速度 「APIサーバとして利用すればいいんじゃない?」とのこと
Q&A
Q:Play2とServlet使ってるSpringとかとの性能の差はありますか? A:単純なHTTPサーバならそんなに差はない モバイルからとかDBにバンバン書き込む場合はAkkaに丸投げするのがいいでしょう
From Zero to Hero with REST and OAuth2
Pivotalジャパン株式会社 槙 俊明さん (@making)
当初は「Spring Bootで作る簡単OAuth2 SSOシステム」でしたがタイトル変更
時間延長で1時間の枠に
9割ライブコーディングで、正直言ってかなり速かったので全然メモが追いつかなかった(´・ω・`)
メモ追いつかないどころか内容もほぼ追いつけなかった orz
速すぎてついていけないのにとりあえずSpring BootでSSOしてみようと思わせるプレゼンでした
とりあえずコチラに従えば同じものが作れるのでやりましょうってことで
OAuth2
トークンを払い出すためのフローがいくつかある
- Resource Owner Password Credentials
UserID と Passwordを使ってトークンを払い出す
認証サーバにアクセスしてトークンを払い出してもらってそれを保持 - AuthorizationCode
Web UI -> authorize認証サーバ -> redirect -> loginpage -> Web UIがcode取得 -> redirect
以下なんかとってたメモ
簡単なメッセージを登録するものを作成
CrudRepositoryをextendすれば自動でCRUDできる
HAL
HAL Browser(Swaggerみたいなもの)
@RepositoryEventHandler(Entity.class)
eventでのトランザクションも
@Transactionalつけとけば一緒なトランザクション
つけなければ別トランザクション
@EnableResourceServerつけて
@RequestMapping(path = "/userinfo", method = RequestMethod.GET) Object userinfo(Authentication authentication) { return authentication; }
作ればTokenを払い出した人の情報を返すAPIを作成できる
resourceserverに「security.oauth2.resource.user-info-uri」を追加すればtokenを持ってアクセスしてきた人の情報を取得できるようになる
HATEOASを使うと _link とかの形式のJSONを、Javaのオブジェクトにデシリアライズできる
Twitter連携とかで出てくる許可しますか画面出てくるけど設定で出さないようにも出来るよ
「@EnableOAuth2Ssoをつければいろんなことやってくれます」
JWT
GitHub 連携したら遅く感じたのはREST APIが毎回ユーザ情報をAuthorizatioon Serverに問い合わせているせい
JWTを使うと解決する
Spring の自動設定から外れる
鍵の情報を設定する必要あり、propertiesだとつらいので yaml
Maki Home UAA
「槙家のAuthorization Server を使えるようにしてある。OAuth2に準拠していて、拡張しやすい」
「家庭内システムあるでしょ?アカウント毎回作ると嫁が怒るからSSOするしかない」
感想
ちゃんと全部真面目に聞いてたけど正直、槙さんのライブコーディングが速すぎてスゴすぎて全てをそこに持ってかれた感
ライブコーディング見てたけどもう何が起きてるのか全然ついていけなかったのでとりあえず写経して動かしてみるところからやらないとダメだなという結論
Spring Bootは触ったことあるけど、WildFly SwarmとPlayは触ったことないのでとりあえずなんか動かしてみよう
梅澤さんが仰っていた
「Frameworkは登場の背景とかを知ってないと間違ったところに適応されることがある」
という言葉がグサッときた