Upload
yoshimasa-tanabe
View
889
Download
2
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 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/