23
Introduction to WildFly Swarm 2015-05-30(土) 第十一回 #渋谷java http://shibuya-java.connpass.com/event/14755/ 田邊 義真(たなべ よしまさ) @emaggame http://morec.at

Introduction to WildFly Swarm

Embed Size (px)

Citation preview

Introduction to WildFly Swarm

2015-05-30(土) 第十一回 #渋谷java

http://shibuya-java.connpass.com/event/14755/

田邊 義真(たなべ よしまさ)

@emaggame

http://morec.at

2015-05-30(土) 第十一回 #渋谷java 2

目次● WildFly● Java EE でのアプリケーションと AP サーバの関係● WildFly Swarm● デモ● 個人的な感想● 参考

2015-05-30(土) 第十一回 #渋谷java 3

WildFly● Java EE 7 対応の Java EE アプリケーションサーバ

– http://wildfly.org/– 以前の名称は JBoss Application Server

● そろそろ最新の 9.0.0 がリリースされる予定– 2015-05-30 現在、9.0.0.CR1

● WildFly 9.0.0.CR1 Release Notes

2015-05-30(土) 第十一回 #渋谷java 4

従来の Java EE● アプリケーションを AP サーバにデプロイ

– アプリケーションは AP サーバの機能を利用する● Java EE 実装ライブラリ(Servlet, EJB, JMS, ...)● インフラ(スレッド, コネクションプール, JMS ブローカ...)

– APサーバはまた、アプリケーションが必要とする設定を読み込む(例: DB 接続設定)

● なんだかんだ密結合しているので、例えば複数アプリのデプロイなどをすると、AP サーバのアップデートは気軽にできない

2015-05-30(土) 第十一回 #渋谷java 5

アプリケーション + AP サーバで 1 コンポーネント?

出典: Java application servers are dead!

アプリケーションとAPサーバに循環した関係があるのならば、1つのコンポーネントとみなせるのでは?

2015-05-30(土) 第十一回 #渋谷java 6

WildFly Swarm● WildFly のもろもろのライブラリをかき集めて、Java EE アプリ

ケーションを fat-jar として実行できるようにしたもの– https://github.com/wildfly-swarm/wildfly-swarm

● 要は Spring Boot のようなもの を目指している● WildFly 9 から入った feature-pack の機構を利用し、どの API

を使いたいかによって依存ライブラリを取捨選択できる● 今年の JavaOne でセッションするらしい

– http://bit.ly/1SHfJPL

2015-05-30(土) 第十一回 #渋谷java 7

Microservices Ready?● fat-jar とすることで、依存性を自己完結し、独立し

たサービスとして作りやすくなる– 複数アプリのデプロイを強制的に禁止できる

● もちろん fat-jar = Microservices ではなく、実際にはいろいろな仕組み(Service Discovery など)が必要になる

2015-05-30(土) 第十一回 #渋谷java 8

WildFly Swarm 現状● Java EE API として JAX-RS, CDI, JPA, JMS が利用可

– EJB, WebSocket, JSF など、主要 API にも未サポートのものあり– ちょっとした API サーバは作れそう

● 以下のような起動方法が可能– java -jar app-swarm.jar– mvn wildfly-swarm:run– IDE > Run

● プロダクション投入はおすすめできない– 今のところ機能不足感が否めない。また、現在開発中の Alpha2-SNAPSHOT で

Alpha1 とで API が変わっており、今後もいろいろと変更されそう(な予感)

2015-05-30(土) 第十一回 #渋谷java 9

WildFly Swarm で挙がっている要望例

● Gradle など、Maven 以外のサポート– https://github.com/wildfly-swarm/wildfly-swarm/issues/5

● 現在は Maven プラグインが必須

● Netflix OSS サポート– https://github.com/wildfly-swarm/wildfly-swarm/issues/29

● 何かアイデアがあれば、是非 issue 登録を!– https://github.com/wildfly-swarm/wildfly-swarm/issues

2015-05-30(土) 第十一回 #渋谷java 10

デモ● JAX-RS + CDI + JPA の単純なアプリケーション

– https://github.com/emag/wildfly-swarm-quickstarts/tree/master/jaxrs-cdi-jpa

● 2015-05-30 現在、Alpha1 は CDI, JPA が使えず、対応した Alpha2 もまだリリースされていないので、自分で master ブランチの Alpha2-SNAPSHOTをインストールする必要あり$ git clone https://github.com/wildfly-swarm/wildfly-swarm$ mvn install

2015-05-30(土) 第十一回 #渋谷java 11

デモ● Java EE な部分(JAX-RS)

@ApplicationScoped@Path("/employees")public class EmployeeController {

@Inject private EmployeeService employeeService;

@GET @Produces(MediaType.APPLICATION_JSON) public List<Employee> findAll() { return employeeService.findAll(); }

2015-05-30(土) 第十一回 #渋谷java 12

デモ● Java EE な部分(CDI)

@ApplicationScoped@Path("/employees")public class EmployeeController {

@Inject private EmployeeService employeeService;

@GET @Produces(MediaType.APPLICATION_JSON) public List<Employee> findAll() { return employeeService.findAll(); }

2015-05-30(土) 第十一回 #渋谷java 13

デモ● Java EE な部分(Service的なクラス)

@ApplicationScopedpublic class EmployeeService {

@Inject private EmployeeRepository employeeRepository;

public List<Employee> findAll() { return employeeRepository.findAll(); }

2015-05-30(土) 第十一回 #渋谷java 14

デモ● Java EE な部分(JPA)

@ApplicationScopedpublic class EmployeeRepository {

@PersistenceContext private EntityManager em;

public List<Employee> findAll() { return em.createQuery( "SELECT e FROM Employee e", Employee.class) .getResultList(); }

2015-05-30(土) 第十一回 #渋谷java 15

デモ● Java EE な部分(JPA の Entity)

@Entity@Table(name = "employees")public class Employee implements Serializable {

@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;

...}

2015-05-30(土) 第十一回 #渋谷java 16

デモ● Java EE な部分は...

@Entity@Table(name = "employees")public class Employee implements Serializable {

@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;

...}

何の変哲もなし。ふつうの Java EE

2015-05-30(土) 第十一回 #渋谷java 17

デモ● WildFly Swarm 独自の部分(ここで色々設定)

public class App {

public static void main(String[] args) throws Exception { Container container = new Container();

container.subsystem(new DatasourcesFraction() ... ); container.start();

JAXRSDeployment jaxRsDeployment = new JAXRSDeployment(container); ... container.deploy(jaxRsDeployment); }

}

2015-05-30(土) 第十一回 #渋谷java 18

デモ● アプリケーション実行 その1

– java -jar app-swarm.jar● mvn package すると <app-name>-swarm.jar という fat-

jar ができる

$ java -jar target/jaxrs-cdi-jpa-1.0.0-swarm.jar<date> INFO [org.jboss.msc] (main) JBoss MSC version 1.2.4.Final<date> INFO [org.jboss.as] (MSC service thread 1-8) WFLYSRV0049: ......

2015-05-30(土) 第十一回 #渋谷java 19

デモ● アプリケーション実行 その2

– mvn wildfly-swarm:run● WildFly Swarm Maven プラグイン提供の goal

$ mvn wildfly-swarm:run[INFO] Scanning for projects......<date> INFO [org.jboss.msc] (main) JBoss MSC version 1.2.4.Final<date> INFO [org.jboss.as] (MSC service thread 1-8) WFLYSRV0049: ......

2015-05-30(土) 第十一回 #渋谷java 20

デモ● アプリケーション実行 その3

– IDE > Run● IDE から main() 指定で実行できる

2015-05-30(土) 第十一回 #渋谷java 21

デモ● API にアクセス

$ curl localhost:8080/employees | jq ....[ { "name": "emp01", "id": 1 }, { "name": "emp02", "id": 2 }]

2015-05-30(土) 第十一回 #渋谷java 22

個人的な感想● Java EE を fat-jar で動かせるのが単純にうれしい

– Spring Boot を触って、正直うらやましかった。。● WildFly ダウンロード, アプリデプロイは正直めんどくさい。。

● WildFly の機能(Java EE API, 設定関連)を完全には扱えていないので、今後に注目したい

● とにかく応援したい

2015-05-30(土) 第十一回 #渋谷java 23

参考● GitHub

– https://github.com/wildfly-swarm/wildfly-swarm

● WildFly Swarm Initial Release(blog)– http://wildfly.org/news/2015/05/05/WildFly-Swarm-Released/

● WildFly Swarm: Building Microservices with Java EE– http://blog.arungupta.me/wildfly-swarm-microservices-javaee/