52
Rightsize Your Java EE Apps 田邊 義真 @emaggame http://morec.at 2016-06-27 JJUG ナイトセミナー Java フレームワーク特集

WildFly Swarm - Rightsize Your Java EE Apps

Embed Size (px)

Citation preview

Page 1: WildFly Swarm - Rightsize Your Java EE Apps

Rightsize Your Java EE Apps

田邊 義真 @emaggamehttp://morec.at

2016-06-27 JJUG ナイトセミナー Java フレームワーク特集

Page 2: WildFly Swarm - Rightsize Your Java EE Apps

Topics● WildFly/WildFly Swarm ?● 基本的な使い方● Fractions● 便利な機能● コミュニティ

Page 3: WildFly Swarm - Rightsize Your Java EE Apps

WildFly?WildFly Swarm??

Page 4: WildFly Swarm - Rightsize Your Java EE Apps

● wildfly.org● Java EE 7 対応 AP サーバ● 高速な起動● 高度な管理インタフェース● Module Class Loader

Page 5: WildFly Swarm - Rightsize Your Java EE Apps

● wildfly-swarm.io● WildFly を組込んだ uber jar を作成可能● 機能 (Fraction) に応じた構成の実現● 各種インテグレーション ( 例 Netflix OSS)

Page 6: WildFly Swarm - Rightsize Your Java EE Apps

Monolithic Application Server

All In One のため、スリム化は自身で行う必要がある

https://wildfly-swarm.gitbooks.io/wildfly-swarm-users-guide/content/getting-started/basics.html

Page 7: WildFly Swarm - Rightsize Your Java EE Apps

WildFly Swarm Uberjar

● 分割と再構築● Fraction という単位で構成● アプリケーションに必要なもののみ利用できる

https://wildfly-swarm.gitbooks.io/wildfly-swarm-users-guide/content/getting-started/basics.html

Page 8: WildFly Swarm - Rightsize Your Java EE Apps

基本的な使い方

Page 9: WildFly Swarm - Rightsize Your Java EE Apps

利用したい Fraction を選択

<dependency> <groupId>org.wildfly.swarm</groupId> <artifactId>jaxrs</artifactId></dependency>

Page 10: WildFly Swarm - Rightsize Your Java EE Apps

Java EE アプリケーションを書く

@Path("/hello")public class HelloWorld {

@GET @Produces(MediaType.APPLICATION_JSON) public String hello() { return "{\"message\" : \"Hello, WildFly Swarm!\"}"; }

}

Page 11: WildFly Swarm - Rightsize Your Java EE Apps

main() メソッド

public class App { public static void main(String[] args) ... { // WildFlyを表す Container container = new Container(args); // デプロイするアプリケーション JAXRSArchive deployment = ...; // WildFlyの起動とアプリケーションのデプロイ container.start().deploy(deployment); }}

Page 12: WildFly Swarm - Rightsize Your Java EE Apps

uber jar にするためのプラグイン

<plugin> <groupId>org.wildfly.swarm</groupId> <artifactId>wildfly-swarm-plugin</artifactId> <configuration> <mainClass>your.awesome.App</mainClass> </configuration> <executions><execution> <goals><goal>package</goal></goals> </execution> </executions></plugin>

Page 13: WildFly Swarm - Rightsize Your Java EE Apps

あとは実行するだけ● mvn package && java -jar yourapp-swarm.jar● mvn wildfly-swarm:run● Run main() from IDE

$ curl localhost:8080/hello{"message" : "Hello, WildFly Swarm!"}

Gradle も利用できますhttps://wildfly-swarm.gitbooks.io/wildfly-swarm-users-guide/content/getting-started/tooling/gradle-plugin.html

Page 14: WildFly Swarm - Rightsize Your Java EE Apps

通常の WildFly との比較● WildFly

1.Download/Install

2.設定

3.起動 & デプロイ

● WildFly Swarm1.依存性で解決

2.設定・起動・デプロイはすべて main() で記述

Page 15: WildFly Swarm - Rightsize Your Java EE Apps

Fractions

Page 16: WildFly Swarm - Rightsize Your Java EE Apps

Fraction● 機能や設定の単位● Convention over configuration

Page 17: WildFly Swarm - Rightsize Your Java EE Apps

Fractions 一覧※

core

jolokia

vertx

drools

netflix

springspring-boot

topology-jgroupstopology-consultopology-openshift

swaggerkeycloak

logstash

serverscamel

※ これは大まかな ( リポジトリの ) 単位。実際に依存性を追加する単位を知りたい場合は以下サイトの View all available dependencies をクリックhttp://wildfly-swarm.io/generator/

Page 18: WildFly Swarm - Rightsize Your Java EE Apps

Fractions 一覧※

core

jolokiavertx

droolsnetflix

springspring-boot

topology-jgroupstopology-consultopology-openshift

swaggerkeycloak

logstashservers

camelこの資料で紹介

※ これは大まかな ( リポジトリの ) 単位。実際に依存性を追加する単位を知りたい場合は以下サイトの View all available dependencies をクリックhttp://wildfly-swarm.io/generator/

Page 19: WildFly Swarm - Rightsize Your Java EE Apps

core● Java EE や WildFly の subsystem 相当

– JAX-RS, CDI, JPA, …– Undertow, Datasources, Logging, ...

Page 20: WildFly Swarm - Rightsize Your Java EE Apps

Datasources(core)

<dependency> <groupId>org.wildfly.swarm</groupId> <artifactId>datasources</artifactId></dependency>

※jpaを利用する場合は自動的に追加される<dependency> <groupId>org.wildfly.swarm</groupId> <artifactId>jpa</artifactId></dependency>

Page 21: WildFly Swarm - Rightsize Your Java EE Apps

Datasources(core)

Container container = ...container.fraction(new DatasourcesFraction() .jdbcDriver(<jdbc driver settings>) .dataSource(myDS, ds -> ds .driverName(...) .connectionUrl(...) .userName(...) .password(...) ));

WildFly の設定内容がそのまま API になっている

Page 22: WildFly Swarm - Rightsize Your Java EE Apps

テスト書いてないとか ...

Page 23: WildFly Swarm - Rightsize Your Java EE Apps

!!!

Page 24: WildFly Swarm - Rightsize Your Java EE Apps

Arquillian(core)● arquillian.org● 実際に AP サーバを起動 / デプロイしてテストする

本物の EJB や CDI コンテナを利用できる● 通常 WildFly を事前にインストールする必要あり

– WildFly Swarm では不要

Page 25: WildFly Swarm - Rightsize Your Java EE Apps

Arquillian(core)

<dependency> <groupId>org.wildfly.swarm</groupId> <artifactId>arquillian</artifactId> <scope>test</scope></dependency><dependency> <groupId>org.jboss.arquillian.junit</groupId> <artifactId>arquillian-junit-container</artifactId> <scope>test</scope></dependency>

Page 26: WildFly Swarm - Rightsize Your Java EE Apps

Arquillian(core)

@RunWith(Arquillian.class)public class AwesomeIT implements ContainerFactory { @Deployment public static Archive createDeployment() {...} @Override public Container newContainer(String... args) {...} @Test public void test() {...}}

1.0.0.CR2 で ContainerFactory を implements しない方法も追加http://wildfly-swarm.io/posts/announcement-1-0-0-cr2/#_arquillian_testing_improvements

Page 27: WildFly Swarm - Rightsize Your Java EE Apps

テストもばっちり !

∩ ∩

Page 28: WildFly Swarm - Rightsize Your Java EE Apps

Ribbon/Hystrix(Netflix OSS)● github.com/Netflix

Ribbon

Service A

Service A'

クライアントサイド ロードバランシング

Hystrix

Service A

サーキットブレーカ

Service Afallback

Page 29: WildFly Swarm - Rightsize Your Java EE Apps

Ribbon/Hystrix(Netflix OSS)

<dependency> <groupId>org.wildfly.swarm</groupId> <artifactId>ribbon</artifactId></dependency><dependency> <groupId>org.jboss.arquillian.junit</groupId> <artifactId>hystrix</artifactId></dependency>

Page 30: WildFly Swarm - Rightsize Your Java EE Apps

Ribbon/Hystrix(Netflix OSS)● Ribbon や Hystrix を使う下準備を支援● 現状、アノテーションで有効というわけではなく、

Ribbon/Hystrix の API を書く必要あり※● 利用例としては公式チュートリアルがわかりやすい

– http://wildfly-swarm.io/tutorial/

※ ボイラープレートを減らすための issue は切られているhttps://issues.jboss.org/browse/SWARM-521

Page 31: WildFly Swarm - Rightsize Your Java EE Apps

Topology● サービスディスカバリ

Service A

ServiceDiscovery

Page 32: WildFly Swarm - Rightsize Your Java EE Apps

Topology● サービスディスカバリ● 実装として以下の 3 種類が利用できる

– jgroups– consul– openshift

<dependency> <groupId>org.wildfly.swarm</groupId> <artifactId>topology-x</artifactId></dependency>

Page 33: WildFly Swarm - Rightsize Your Java EE Apps

Topology● 実装によらず同じようにサービス登録可能※

JAXRSArchive deployment = …deployment .as(TopologyArchive.class) .advertise("awesome-service");

※consul の URL などは別途 API ないしシステムプロパティなどで渡す

Page 34: WildFly Swarm - Rightsize Your Java EE Apps

Topology(consul での例 )

consul-ui の画面サービスを 8080/8180 ポートで 2 インスタンスで立ち上げている

Page 35: WildFly Swarm - Rightsize Your Java EE Apps

Keycloak● keycloak.org● いろいろな認証 / 認可に対応した SSO サーバ● WildFly Swarm では認証クライアント設定用 API

を提供

Page 36: WildFly Swarm - Rightsize Your Java EE Apps

Keycloak

JAXRSArchive deployment = …deployment.as(Secured.class) .protect("/entries/*") .withMethod("POST", "PUT", "DELETE") .withRoles("author");

<dependency> <groupId>org.wildfly.swarm</groupId> <artifactId>keycloak</artifactId></dependency>

Page 37: WildFly Swarm - Rightsize Your Java EE Apps

Swagger● swagger.io● API からドキュメントやモックを生成● Swagger を JAX-RS で利用する場合の下準備を

いろいろやってくれる

Page 38: WildFly Swarm - Rightsize Your Java EE Apps

Swagger<dependency> <groupId>org.wildfly.swarm</groupId> <artifactId>swagger</artifactId></dependency>

Page 39: WildFly Swarm - Rightsize Your Java EE Apps

Swagger@Path("/time")@Api(...)public class TimeResource { @GET @Path("/now") @Produces(MediaType.APPLICATION_JSON) @ApiOperation(...) public String get() {…}}

Page 40: WildFly Swarm - Rightsize Your Java EE Apps

Swagger$ curl localhost:8080/swagger.json...{ "swagger": "2.0", ... "paths": { "/time/now": { "get": { "summary": "Get the current time", "description": "Returns the time as a string", "produces": ["application/json"], "responses": {"200": ... ...}

Page 41: WildFly Swarm - Rightsize Your Java EE Apps

Swagger UI によるドキュメント化

Page 42: WildFly Swarm - Rightsize Your Java EE Apps

Swagger UI によるドキュメント化

Page 43: WildFly Swarm - Rightsize Your Java EE Apps

Spring/Spring Boot● Spring + WildFly はよく見かける組み合わせ

現状ユーザガイド未記載なので、サンプルを参照https://github.com/wildfly-swarm/wildfly-swarm-examples/tree/master/springhttps://github.com/wildfly-swarm/wildfly-swarm-examples/tree/master/spring-boot

突然現れるバナー

Page 44: WildFly Swarm - Rightsize Your Java EE Apps

便利な機能

Page 45: WildFly Swarm - Rightsize Your Java EE Apps

project-stages.yml

https://wildfly-swarm.gitbooks.io/wildfly-swarm-users-guide/content/configuration/#_configuration_overlays_using_stage_properties

# defualtステージdatabase: connection: url: jdbc:h2:mem:dev---project: stage: productiondatabase: connection: url: jdbc:postgresql://localhost:5432/awesome-db

Page 46: WildFly Swarm - Rightsize Your Java EE Apps

project-stages.yml● 起動時にステージ名を渡す

– -Dswarm.project.stage=<stage name>

Container container = …container .stageConfig() .resolve("database.connection.url") .getValue()

https://wildfly-swarm.gitbooks.io/wildfly-swarm-users-guide/content/configuration/#_configuration_overlays_using_stage_properties

Page 47: WildFly Swarm - Rightsize Your Java EE Apps

コミュニティ

Page 48: WildFly Swarm - Rightsize Your Java EE Apps

コミュニティ● @wildflyswarm● Google Groups● IRC(#wildfly-swarm on Freenode)● ドキュメント

– https://wildfly-swarm.gitbooks.io/wildfly-swarm-users-guide/content/

● サンプル– https://github.com/wildfly-swarm/wildfly-swarm-examples

Page 49: WildFly Swarm - Rightsize Your Java EE Apps

コミュニティ

http://wildfly-swarm.io/posts/announcement-1-0-0-cr2/

● わかる範囲での質問の受け答え● バグ報告● ちょっとした p-r

● ヘルパーメソッド追加● バグフィックス● サンプル追加

● 最初のバージョンが出てからウォッチ

自分がやったこと

Page 50: WildFly Swarm - Rightsize Your Java EE Apps

さいごに

Page 51: WildFly Swarm - Rightsize Your Java EE Apps

WildFly Swarm Tour

● ひととおり WildFly Swarm を触ってみるガイド– 最新の WildFly Swarm に追従– JAX-RS/CDI/JPA– Arquillian– Keycloak– Docker

https://emag.gitbooks.io/wildfly-swarm-tour/content/

Page 52: WildFly Swarm - Rightsize Your Java EE Apps

所感● まだ GA ではないもののだいぶ安定してきた● 開発からまだ 1年、そこまで色がついておらず、今後生かすも殺すもコミュニティ次第と感じる

● ぜひ応援お願いします !!