SlideShare ist ein Scribd-Unternehmen logo
1 von 56
© 2015 IBM Corporation
#devsumiD
ついに始まる
Java EE 7時代のアプリケーション開発
2014年 2月 19日
日本アイ・ビー・エム株式会社
IBMシステムズ・ソフトウェア事業部
© 2015 IBM Corporation
#devsumiD
なぜ,いま
Java EE 7なのか
2
© 2015 IBM Corporation
#devsumiD
Java Enterprise Edition 7 (Java EE 7)
3
一昨年5月に
正式版に
© 2015 IBM Corporation
#devsumiD
2015年夏
4
Java EE 7 Full Profile対応
WebSphere Application Server
公開予定
詳細は後半で
© 2015 IBM Corporation
#devsumiD
国内で普及率の高かったフレームワークの世代交代
 Struts 1.x
–2013年 EoL(End of Life)の発表
–2014年 脆弱性発見による混乱(CVE-2014-0114)
 Seaser2
–主要開発者のプロジェクト離脱により新機能追加の停止
–Ajax/HTML5連携やRESTful Webサービス対応の不備
5
© 2015 IBM Corporation
#devsumiD
2000年代前半のWebアプリケーション
まだまだ未完成で力不足のJ2EE仕様
→多くの「アンチJ2EE技術」の登場
コンテナ上にフレームワークを追加し
その上にアプリケーションを構築することが主流に
– Open Sourceフレームワーク
– ベンダー製フレームワーク
– 独自フレームワーク
6
© 2015 IBM Corporation
#devsumiD
2015年のWebアプリケーション事情
Java EE提供の各種仕様の機能増強・完成度の向上
「標準仕様で十分」
–CDI 1.x :依存性注入
• HibernateやSeaser2の提供していた機能をとりこみ
–JSF 2.x :Webアプリケーション・フレームワーク
–JPA 2.x :O/Rマッピング
• いずれもVersion 1.xから大幅な機能強化
7
→ Java EEへの回帰
© 2015 IBM Corporation
#devsumiD
JSF
EL
Java EE 7の標準的なアプリケーション構成
画面デザイン
–JSF / EL
外部連携
–JAX-RS / WebSocket
8
JAX-RS
WebSocket
CDI .
EJB / JTA
JPA Database
依存性注入・ビジネスロジック
–CDI / EJB / JTA
DB連携・ORマッピング
–JPA
© 2015 IBM Corporation
#devsumiD
Java EE 7の三つのゴール
HTML5環境への対応
開発生産性の向上
エンタープライズ・ニーズへの対応
9
© 2015 IBM Corporation
#devsumiD
三つのゴールとJava EE仕様群との対応
 HTML5環境への対応
– JSR 344: JavaServer Faces (JSF) 2.2
– JSR 353: Java API for JSON Processing (JSONP) 1.0
– JSR 356: Java API for WebSocket 1.0
– JSR 339: Java API for RESTful Web Services (JAX-RS) 2.0
 開発生産性の向上
– JSR 345: Enterprise JavaBeans (EJB) 3.2
– JSR 346: Contexts and Dependency Injection
for Java EE (CDI) 1.1
– JSR 907: Java Transaction API (JTA) 1.2
– JSR 349: Bean Validation 1.1
 エンタープライズ・ニーズへの対応
– JSR 343: Java Message Service (JMS) 2.0
– JSR 338: Java Persistence API (JPA) 2.1
– JSR 236: Concurrency Utilities for Java EE 1.0
– JSR 352: Batch Applications for the Java Platform 1.0
10
© 2015 IBM Corporation
#devsumiD
WebSocketとは
11
© 2015 IBM Corporation
#devsumiD
2014年10月 ついに正式勧告となったHTML5
従来のHTML
–画面をレンダリングするための規格
HTML5(+ CSS3 / JavaScript)
–アプリケーションを記述するための規格
12
© 2015 IBM Corporation
#devsumiD
HTML5環境の新しいアプリケーションスタイル
「サーバーサイドMVC」から「クライアントMVC」へ
13
Web Browser
Application Server
Application
HTTP
Request
HTML/JS
Controller Session
Data
View
Business
LogicModel
DomainDomain
Web Browser
Application Server
Application
View
HTML/JS
Controller
Data
Store
Model
Model
DomainDomain
RESTful or
WebSocket JSON
Business Logic
従来のWebアプリケーション Single Page Application (SPA)
© 2015 IBM Corporation
#devsumiD
HTML5におけるクライアント・サーバー連携
 通信方法
–RESTful (JAX-RS 2.0)
• HTTPの原則にしたがった
簡潔なシステム間連携の設計手法
–WebSocket (WebSocket 1.0)
• ブラウザとWebサーバーの間で
双方向通信を可能にする
通信プロトコル
 データ型
–JSON:JavaScript Object Notation
(JSONP 1.0)
• JavaScriptのオブジェクトとして
そのままパースできる
テキスト形式のデータ表記法
14
Web Browser
Application Server
Application
View
HTML/JS
Controller
Data
Store
Model
Model
DomainDomain
RESTful or
Web Socket
JSON
Business Logic
© 2015 IBM Corporation
#devsumiD
新しい双方向通信:WebSocket
WebSocketを使用すると双方向通信を自然な形で実現
–HTTPで通信を開始して,
Protocol SwitchingによりWebSocketに移行
–サーバー側からもクライアント側からもメッセージを送信
可能
15
© 2015 IBM Corporation
#devsumiD
既存技術との比較
Ajax
–定期的にポーリング
–最大でポーリング間隔の
タイムラグが発生する
–あまりポーリング間隔を
短くするとサーバーに負荷が
16
Comet
–イベントが発生するまで
応答を遅延させる
–クライアントからの
イベント通知には不向き
HTML
JS
クライアント サーバー
CSS
Data#2
Data#1画面遷移
Dataなし
Data#3
HTML
JS
クライアント サーバー
CSSData#1画面遷移
イベント
発生
待機
イベント
発生
待機
Data#2
Data#3
© 2015 IBM Corporation
#devsumiD
WebSocket プロトコルの現状
プロトコルはIETF / RFCで標準化
– 2010年2月 draft-hixie-thewebsocketprotocol-75
– 2010年5月 draft-ietf-hybi-thewebsocketprotocol-00
– 2011年4月 draft-ietf-hybi-thewebsocketprotocol-07
– 2011年7月 draft-ietf-hybi-thewebsocketprotocol-10
– 2011年12月 RFC 6455 "The WebSocket Protocol"
W3CでJavaScript APIを仕様化
– 2009年4月 First Public Draft
– 2009年10月〜2012年8月 Working Draft
– 2012年9月 W3C Candidate Recommendation
17
© 2015 IBM Corporation
#devsumiD
ブラウザの対応状況
18
モダンなブラウザの大部分がサポート
MSIE
10 (2013/2) 〜
Chrome
16 (2011/12) 〜
Firefox
11 (2012/3) 〜
Safari
6 (2012/7) 〜
iOS
6.0 (2012/9) 〜
Android
4.4 (2013/10) 〜
© 2015 IBM Corporation
#devsumiD
対応ブラウザのシェア
19
70%以上のブラウザがWebSocketに対応
出典:NetMarketShare.com Market Share Reports October, 2014
© 2015 IBM Corporation
#devsumiD
Java EE 7での
WebSocketアプリ開発
20
© 2015 IBM Corporation
#devsumiD
JSR 356: Java API for WebSocket 1.0
JavaでWebSocket通信を実装するためのAPI
クライアントとサーバーの両方をサポート
Java SE環境での実行も考慮された仕様
アノテーションをベースとした
モダンなプログラミングスタイル
Encoder / Decoderにより
扱うデータ型を柔軟に制御
21
© 2015 IBM Corporation
#devsumiD
Endpoint:ServerEndpointとClientEndpoint
WebSocket通信の両端となるEndpointの作成が必須
–WebSocket通信の開始・終了・エラー発生と
メッセージ受信をトリガーにEndpointのメソッドが呼び
出される
クライアントはブラウザで実装することが多いので,
多くの場合Java EEではサーバー側のEndpointを実装する
22
ClientEndpoint ServerEndpoint
Session @OnMessage
public void
message(... )
@OnOpen
public void open(... )
@OnClose
public void close(... )
@OnMessage
public void
message(... )
@OnError
public void error(... )
© 2015 IBM Corporation
#devsumiD
Endpointの作成
二つの実装方法
–アノテーションをつけたPOJO
•@javax.websocket.server.ServerEndpoint
•@javax.websocket.ClientEndpoint
–javax.websocket.Endpointを継承したクラス
アノテーションベースのPOJOで実装するほうが簡単
23
© 2015 IBM Corporation
#devsumiD
アノテーションによるEndpoint実装の例
24
@ServerEndpoint("/echo")
public class EchoServiceEndpoint{
Session currentSession = null;
//接続がオープンしたとき
@OnOpen
public void onOpen(Session session, EndpointConfig ec) {
currentSession = session;
}
//メッセージを受信したとき
@OnMessage
public void receiveMessage(String msg) throws IOException {
//メッセージをクライアントに送信する
currentSession.getBasicRemote().sendText("Hello" + msg);
}
//接続がクローズしたとき
@OnClose
public void onClose(Session session, CloseReason reason) { ・・・ }
//接続エラーが発生したとき
@OnError
public void onError(Throwable t) {・・・ }
}
© 2015 IBM Corporation
#devsumiD
JVMJVM
Endpointのインスタンス
Endpointのインスタンスは
WebSocketのセッションごとに別個に作成される
–Servletのインスタンスが,サーバーに一つ作成されて
複数のリクエスト・セッションで共有されるのと対照的
25
Endpoint
インスタンス
Servlet
インスタンス
© 2015 IBM Corporation
#devsumiD
Endpointのコーディング(1)
セッションの情報をインスタンス変数に保存できる
–多くの場合,javax.websocket.Sessionの保存は必須
「時間のかかる初期化処理」はEndpoint毎には書かない
–@Singletonの@EJBなどに実装しておいて呼び出す
26
@ServerEndpoint(value = "/echo")
public class EchoServiceEndpoing {
private Session currentSession;
@OnOpen
public void onOpen(Session session, EndpointConfig ec) {
currentSession = session;
© 2015 IBM Corporation
#devsumiD
Endpointのコーディング(2)
マルチスレッドを考える必要はない
–それぞれのインスタンスの@OnOpenメソッドなどが
複数スレッドから同時に呼ばれることはない
–ただし複数のEndpoint / Sessionにまたがる処理では,
状況に応じて排他制御が必要
27
© 2015 IBM Corporation
#devsumiD
ピアへのメッセージの送信
SessionからRemoteEndpointを取得して使用する
RemoteEndpointは,2種類
–RemoteEndpoint.Async 非同期通信
–RemoteEndpoint.Basic 同期通信
Sessionは
他のスレッドで稼働しているServlet / EJBからも利用可能
–複数スレッドから一つのSessionを同時に利用することは
避ける
28
if (session.isOpen())
session.getBasicRemote().sendText(msg);
© 2015 IBM Corporation
#devsumiD
HTTPヘッダ・HttpSessionへのアクセス
 ConfiguratorのmodifyHandshakeメソッドを利用する
–HandshakeRequestからHTTPヘッダやHttpSessionが取得できる
 @ServerEndpoint / @ClientEndpoint に追記
29
import javax.websocket.server.ServerEndpointConfig.Configurator;
public class ChatConfig extends Configurator {
@Override
public void modifyHandshake(ServerEndpointConfig sec,
HandshakeRequest req,
HandshakeResponse resp) {
@ServerEndpoint(value = "/chat", configurator = ChatConfig.class)
public class ChatService {
© 2015 IBM Corporation
#devsumiD
ConfiguratorからEndpointへの情報伝達
EndpointConfigのUserPropertiesを利用する
30
public void modifyHandshake(ServerEndpointConfig config,
HandshakeRequest request, HandshakeResponse response) {
HttpSession session = (HttpSession)request.getHttpSession();
Map<String,Object> userProps = config.getUserProperties();
userProps.put("MyID",
(session != null)? session.getAttribute("MyID") : "No ID");
@OnOpen
public void onOpen(Session session, EndpointConfig config) {
Map<String,Object> userProps = config.getUserProperties();
String myID = (String)userProps.get("MyID");
Configurator
Endpoint
© 2015 IBM Corporation
#devsumiD
ConfiguratorやEndpointでHttpSessionを書き換えない
HandshakeRequestからHttpSessionは取得できるが,
Attributeのセット・更新・削除は危険
–分散環境では,HttpSessionの内容は複数サーバー間で共有される
–多くのアプリケーションサーバーでは,サーバー間の
HttpSession情報の更新はリクエスト処理が完了した時に実行
–WebSocketでは,セッションが短時間で終了しない
→ 変更内容が他のサーバーになかなか伝搬しない
Configuratorでは,
HttpSessionから読み取りのみをおこなうのが安全
31
© 2015 IBM Corporation
#devsumiD
さらに詳細に知りたい場合は
IBM developerWorksでWebSocketを検索
32
Java EE 7 アプリケーション設計ガイド – WebSocket編
http://www.ibm.com/developerworks/jp/websphere/library/was/javaee7_appguide/1.html
© 2015 IBM Corporation
#devsumiD
CDI 1.2
33
© 2015 IBM Corporation
#devsumiD
開発生産性の向上:CDI
依存性注入(DI)の標準仕様:
Context and Dependency Injection(CDI)
34
@ApplicationScoped
public class HelloServiceImpl implements HelloService {
public void sayHello() {
System.out.println("Hello!");
}
}
public class HelloWorld extends HttpServlet {
@Inject HelloService service;
© 2015 IBM Corporation
#devsumiD
CDIの使用例(1)
外部接続のパラメーターのハードコーディングの防止
–ネーミングサービス利用からアノテーション指定へ
コンポーネント間の依存性の除去
–モックやスタブを利用したテストが容易に
35
@Inject
Service s;
実際の
サービス実装
テスト用の
スタブ
業務DB
ダミーデータ
本番環境で
インジェクション
テスト環境で
インジェクション
© 2015 IBM Corporation
#devsumiD
CDIの使用例(2)
 コンテナによるライフサイクルの管理
– リクエスト内の各種コンポーネント間の情報共有・キャッシュ
– セッション情報・アプリケーション構成情報などの保持
 インターセプターによるアスペクトの注入
– ロギング・監査処理などの動的な追加
36
Servlet
EJB lite
JSP
Ojb Ojb Ojb
@RequestScoped のオブジェクト
Local
呼び出し
呼び出し
注入 注入 注入
リクエストごとに
固有のオブジェクトが
生成されて
注入される
同一同一
© 2015 IBM Corporation
#devsumiD
CDIの歴史
Context and Dependency Injection 1.0 (Java EE 6)
–最初の仕様
Context and Dependency Injection 1.1 (Java EE 7)
–Bean-Discovery-Modeの追加
Context and Dependency Injection 1.2
–1.1のメンテナンス・リリース
Context and Dependency Injection 2.0
–2016年を目標に策定中の次期リリース
37
© 2015 IBM Corporation
#devsumiD
WebSphereの使用している実装
CDI 1.0 (WAS V8.x)
–Apache Open WebBeans
CDI 1.2 (WAS V9.x)
–JBoss Weld(参照実装)
38
© 2015 IBM Corporation
#devsumiD
CDIでインジェクション可能な場所
コンテナ管理Beanに対してインジェクション可能
–サーブレットクラス
–サーブレット・フィルター
–サーブレット・ライフサイクル・リスナー
–EJB Session Bean
–JAX-RS/WebSocketエンドポイント
–CDIでインジェクションされるクラス
39
Servlet
注入 注入
© 2015 IBM Corporation
#devsumiD
CDIでインジェクション可能なBean
 CDI 1.0
–beans.xmlが含まれるアーカイブの全てのクラス
 CDI 1.1/1.2
–beans.xmlで指定されたBean-Discovery-Modeによって変化
• all
• annotated
• none
–beans.xmlが存在していないアーカイブ
• カオス・・・
40
CDIを使用する場合は,
beans.xmlを使用してBean-Discovery-Modeを指定しましょう
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
bean-discovery-mode="annotated">
</beans>
© 2015 IBM Corporation
#devsumiD
Bean-Discovery-Mode
アーカイブに含まれるbeans.xmlによって指定される
 all
–(@Ventedアノテーションが指定されたもの以外)
アーカイブ内の全てのクラスがインジェクションの対象となる
 annotated (デフォルト,かつ強く推奨)
–Bean定義アノテーションが指定されたもの
(スコープアノテーションが指定されたもの)が
インジェクション対象となる
 none
–アーカイブ内のクラスはインジェクションの対象とならない
41
© 2015 IBM Corporation
#devsumiD
Bean-Discovery-Modeによる恩恵
CDI 1.0では,
アーカイブに大量のクラス(数万〜)が入っていると・・・
–全てのクラスがCDIコンテナの管理下に
–起動時間の遅延
–Javaヒープの大量使用
CDI 1.1以降では,
–Bean定義されたクラスが多くなければ問題なく使用可能
42
© 2015 IBM Corporation
#devsumiD
Bean定義アノテーション
 インジェクションされるBeanのスコープを定義する
–@RequestScoped
リクエストごとに異なるインスタンス
–@ConversationScoped
(JSFなどの)会話処理ごとに異なるインスタンス
–@SessionScoped
セッションごとに異なるインスタンス
–@ApplicationScoped
アプリケーション全体で単一のインスタンス
–@Dependent
インジェクション先と同一のスコープ
 デフォルトのannotatedモードでは,
スコープアノテーションを使用するとインジェクション対象となる
 @Singletonはインジェクション対象とならなくなりました
43
© 2015 IBM Corporation
#devsumiD
インジェクション対象となるクラスの実装方法
デフォルトコンストラクタが必要です
@SessionScoped指定されたクラスは
java.io.Serializableを実装している必要があります
DI候補が複数ある状況では型解決を実装する必要があります
–静的な型解決 @Qualifier
–動的な型解決 @Produce
44
@Qualifier
@Retention(RUNTIME)
@Target({FIELD, TYPE, METHOD, PARAMETER})
public @interface DB2 {}
@Qualifier
@Retention(RUNTIME)
@Target({FIELD, TYPE, METHOD, PARAMETER})
public @interface Oracle {}
© 2015 IBM Corporation
#devsumiD
Libertyプロファイル
45
© 2015 IBM Corporation
#devsumiD
46
Libertyプロファイルの特長
WAS V8.5.5 Liberty & WDT
自動化ツールとの連携
多くのOSSツールに
無償でプラグインを提供
Unzipによる導入とデプロイ
パッケージをした
サーバー + アプリ + 構成情報を
Unzipでデプロイ可能
簡単な構成と動的変更
最低限必要な構成ファイルは
server.xmlひとつだけ
デフォルトベースで簡単構成
構成変更は再起動なしに反映
軽量ランタイム
メモリー使用量が小さい: 60MB程度~
ディスク使用量も100MB以下
起動が速い
起動時間: 5秒程度
統合ツール(WDT)
高機能なEclipse用の連携ツールを無償で提供
Eclipseから簡単に使用可能
Web Profile準拠
Java EE 6のWeb Profile標準に
準拠したアプリを完全サポート
JAX-WS, JAX-RS, JMSもサポート
© 2015 IBM Corporation
#devsumiD
47
必要な機能(Feature)だけを組み合わせて利用
Java EEなどの標準仕様に定義されたAPIや
サーバーが提供する多くの機能のうち
Servlet JSP JSF SSL
JAX-RS JSON JPA
JAX-WS JAX-B JDBC JTA
JMS CDI JNDI
EJB lite EJB MDB Blueprint WAB
ユーザーが必要な機能だけを
自由に組み合わせることができる
Servlet JSP JSF SSL
JAX-RS JSON JPA
JAX-WS JAX-B JDBC JTA
JMS CDI JNDI
EJB lite EJB MDB Blueprint WAB
© 2015 IBM Corporation
#devsumiD
API・サーバー機能をFeatureとして定義
48
• 必要なものだけを構成
– 設定されたものだけがメモリにロード・初期化される
→ 最小限の起動時間・メモリー使用
ServletJSPJDBCSSL
JAX-RS
sessionDatabase
<featureManager>
<feature>jsp-2.2</feature>
<feature>jdbc-4.0</feature>
<feature>jaxrs-1.1</feature>
<feature>sessionDatabase-1.0</feature>
<feature>ssl-1.0</feature>
</featureManager>
構成ファイル server.xml 依存関係も
自動的に解決
JSON
© 2015 IBM Corporation
#devsumiD
新しいFeatureを,順次Liberty Repositoryで提供
 Liberty Repositoryで新しいFeatureを入手可能
–Java EE 7を構成する
仕様も順次公開中
–GUI管理画面や
z/OS Connectなど
 featureManagerコマンドで
ランタイム環境に直接
ダウンロード・組み込みが
可能
49
https://developer.ibm.com/wasdev/downloads/
© 2015 IBM Corporation
#devsumiD
ゼロ・マイグレーション
 新しい仕様のバージョンに対応するフィーチャーが
追加されても,従来のバージョンも提供されます
–例) 現在はServlet 3.1フィーチャーが提供されていますが,
Servlet 3.0フィーチャーも引き続き利用できます
 アプリケーションで新仕様が必要なければ
従来のフィーチャーをそのまま利用可能
–ただし,
対応するJDKのバージョンは変更される可能性があります
50
servlet-3.0 servlet-3.1
© 2015 IBM Corporation
#devsumiD
WebSphere Application Server Liberty Beta
• 2013年11月: Alpha
• 2014年2月: Alpha (February update)
• 2014年3月: Beta (March 2014)
• WebSocket 1.1, EJB lite 3.2, Java EE Concurrency Utilities 1.0,JCA 1.6
• 2014年4月: April Beta
• Servlet 3.1, EJB 3.2 (local)
• 2014年5月: May Beta
• JMS 2.0, JPA 2.1, JSON-P 1.0, Bean Validation 1.1
• 2014年6月: June/July Beta
• WebRTC,CouchDB
• 2014年7月: July/August Beta
• 2014年8月: August/September Beta
• JAX-RS 2.0
• 2014年9月: September Beta
• Java Batch 1.0
• 2014年10月: October Beta
• 2014年11月: November Beta
• SIP Servlet 1.1,JDBC 4.1,
• 2014年12月: December Beta
• 2015年1月: January Beta
• 2015年2月: February Beta
• CDI 1.2,JSP 2.3,EL 3.0,Java EE Application Client,
JASPIC 1.1,JACC 1.5,JCA 1.7,JavaMail
51
© 2015 IBM Corporation
#devsumiD
52
2015年2月末現在のβの提供状況
•Enterprise JavaBeans (EJB) 3.2
•Java Message Service (JMS) API 2.0
•Java EE Connector Architecture (JCA) 1.7
•Concurrency Utilities for Java EE 1.0
•JavaMail 1.4
•Java Batch 1.0
•Web Services for Java EE 1.3
•Java API for XML-Based Web Services (JAX-WS) 2.2
•Java Architecture for XML Binding (JAXB) 2.2
•Web Services Metadata for the Java Platform 2.1
•Java Authorization Service Provider
Contract for Containers (JACC) 1.4
•Java Authentication Service Provider
Interface for Containers (JASPIC) 1.0
•Java EE Management 1.1
Web Profile
•Java Servlet 3.1
•JavaServer Pages (JSP) 2.3
and Expression Language (EL) 3.0
•Standard Tag Library for JavaServer Pages (JSTL) 1.2
•JavaServer Faces (JSF) 2.2
•Debugging Support for Other Languages 1.0
•Java API for RESTful Web Services (JAX-RS) 2.0
•Java API for WebSocket (WebSocket) 1.0
•Java API for JSON Processing (JSON-P) 1.0
•Common Annotations for the Java Platform 1.2
•Contexts and Dependency Injection
for the Java EE Platform 1.2
•Dependency Injection for Java 1.0
•Enterprise JavaBeans 3.2 (EJB Lite)
•Java Persistence API 2.1
•Java Transaction API (JTA) 1.2
•Bean Validation 1.1
Java EE full Profile
正式版として利用可能 Betaを提供中
© 2015 IBM Corporation
#devsumiD
でも,お高いんでしょう?
"WebSphere Application Server for everyone"
https://developer.ibm.com/wasdev/docs/websphere-application-server-everyone/
3月出荷予定のWAS V8.5.5.5より
Libertyプロファイルの本番使用が無料に!!!
–Javaヒープの総量が2Gに制限
• 「2G×1 JVM」「1G×2 JVMs」や「512M×4 JVMs」など
–クラウドでもオンプレミスでも使用可能
–Liberty Repositoryで提供されている
Java EE+αの機能の全てが利用可能
–サポートは公開Forumなどを使用
53
© 2015 IBM Corporation
#devsumiD
もちろん製品の購入もできます
WebSphere Application Server Liberty Core
– Java EE Web Profileの機能を使用可能
WebSphere Application Server
– Java EE Full Profileの機能を使用可能(予定)
– 従来から提供されているランタイムも併せて使用可能
WebSphere Application Server Network Deployment
– Java EE Full Profileの機能を使用可能(予定)
– 従来から提供されているランタイムも併せて使用可能
– クラスター環境の統合管理が可能
• 従来から提供されているNDセルによる統合管理
• Liberty Collectiveによる統合管理
54
© 2015 IBM Corporation
#devsumiD
製品購入のメリット
Javaヒープやインスタンス数を無制限に使用可能
日本語スタッフによる電話で障害サポートを提供
(回数無制限)
関連ソフトもサポート付きで提供
–IBM Java SDK(Linux/Windows/AIX/IBM i/zOS)
–IBM HTTP Server
–セッション共有用のDBMS
55
© 2015 IBM Corporation
#devsumiD
まとめ
いよいよ2015年から,
Java EE 7を業務で使用できるようになります
Java EE 7では,モダンな業務フレームワークに必要な
多くの機能が提供されています
–JPA / JSF / CDI / JAX-RS / WebSocket / etc.
IBMのJava EE実行環境である
WebSphere Application Serverは
新しいランタイムとしてLibertyプロファイルを提供
–Java EE 7アプリケーションを実行する最適な環境です
56

Weitere ähnliche Inhalte

Was ist angesagt?

Webアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうか
Webアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうかWebアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうか
Webアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうかChihiro Ito
 
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発 夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発 Takakiyo Tanaka
 
Java EE 再入門
Java EE 再入門Java EE 再入門
Java EE 再入門minazou67
 
Java EE 6で復活するエンタープライズJavaの世界
Java EE 6で復活するエンタープライズJavaの世界Java EE 6で復活するエンタープライズJavaの世界
Java EE 6で復活するエンタープライズJavaの世界Takakiyo Tanaka
 
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新Masatoshi Tada
 
INF-009_PowerShell を 使いこなして、自動化対応 エンジニア になろう!!
INF-009_PowerShell を 使いこなして、自動化対応 エンジニア になろう!!INF-009_PowerShell を 使いこなして、自動化対応 エンジニア になろう!!
INF-009_PowerShell を 使いこなして、自動化対応 エンジニア になろう!!decode2016
 
Java EEの話(仮)
Java EEの話(仮)Java EEの話(仮)
Java EEの話(仮)Satoshi Kubo
 
1st step LogicFlow
1st step LogicFlow1st step LogicFlow
1st step LogicFlowTomoyuki Obi
 
JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」
JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」
JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」Takakiyo Tanaka
 
Java EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行についてJava EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行についてShigeru Tatsuta
 
20170624 interact2017 open shift on azure
20170624 interact2017 open shift on azure20170624 interact2017 open shift on azure
20170624 interact2017 open shift on azureTakayoshi Tanaka
 
Java8でhttpサーバを実装してみた
Java8でhttpサーバを実装してみたJava8でhttpサーバを実装してみた
Java8でhttpサーバを実装してみた夕人 江熊
 
Google Compute EngineとGAE Pipeline API
Google Compute EngineとGAE Pipeline APIGoogle Compute EngineとGAE Pipeline API
Google Compute EngineとGAE Pipeline APImaruyama097
 
MVC 1.0 JSR-371を通してAdopt a JSRに知ろう #jjug_ccc #ccc_r57
MVC 1.0 JSR-371を通してAdopt a JSRに知ろう #jjug_ccc #ccc_r57MVC 1.0 JSR-371を通してAdopt a JSRに知ろう #jjug_ccc #ccc_r57
MVC 1.0 JSR-371を通してAdopt a JSRに知ろう #jjug_ccc #ccc_r57Toshiaki Maki
 
Java on Microsoft Azure
Java on Microsoft AzureJava on Microsoft Azure
Java on Microsoft AzureYoshio Terada
 
Java 20年史 (JJUG CCC 2015 春 基調講演)
Java 20年史 (JJUG CCC 2015 春 基調講演)Java 20年史 (JJUG CCC 2015 春 基調講演)
Java 20年史 (JJUG CCC 2015 春 基調講演)Kazuyuki Kawamura
 
OCHaCafe Season 2 #4 - Cloud Native時代のモダンJavaの世界
OCHaCafe Season 2 #4 - Cloud Native時代のモダンJavaの世界OCHaCafe Season 2 #4 - Cloud Native時代のモダンJavaの世界
OCHaCafe Season 2 #4 - Cloud Native時代のモダンJavaの世界オラクルエンジニア通信
 
JavaScript.Next
JavaScript.NextJavaScript.Next
JavaScript.Nextdynamis
 
Application Platform としての Windows Server 2019
Application Platform としての Windows Server 2019Application Platform としての Windows Server 2019
Application Platform としての Windows Server 2019Kazuki Takai
 

Was ist angesagt? (20)

Webアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうか
Webアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうかWebアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうか
Webアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうか
 
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発 夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
 
Java EE 再入門
Java EE 再入門Java EE 再入門
Java EE 再入門
 
Java EE 6で復活するエンタープライズJavaの世界
Java EE 6で復活するエンタープライズJavaの世界Java EE 6で復活するエンタープライズJavaの世界
Java EE 6で復活するエンタープライズJavaの世界
 
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
 
INF-009_PowerShell を 使いこなして、自動化対応 エンジニア になろう!!
INF-009_PowerShell を 使いこなして、自動化対応 エンジニア になろう!!INF-009_PowerShell を 使いこなして、自動化対応 エンジニア になろう!!
INF-009_PowerShell を 使いこなして、自動化対応 エンジニア になろう!!
 
Java EEの話(仮)
Java EEの話(仮)Java EEの話(仮)
Java EEの話(仮)
 
1st step LogicFlow
1st step LogicFlow1st step LogicFlow
1st step LogicFlow
 
JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」
JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」
JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」
 
Java EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行についてJava EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行について
 
20170624 interact2017 open shift on azure
20170624 interact2017 open shift on azure20170624 interact2017 open shift on azure
20170624 interact2017 open shift on azure
 
Java8でhttpサーバを実装してみた
Java8でhttpサーバを実装してみたJava8でhttpサーバを実装してみた
Java8でhttpサーバを実装してみた
 
Springの今
Springの今Springの今
Springの今
 
Google Compute EngineとGAE Pipeline API
Google Compute EngineとGAE Pipeline APIGoogle Compute EngineとGAE Pipeline API
Google Compute EngineとGAE Pipeline API
 
MVC 1.0 JSR-371を通してAdopt a JSRに知ろう #jjug_ccc #ccc_r57
MVC 1.0 JSR-371を通してAdopt a JSRに知ろう #jjug_ccc #ccc_r57MVC 1.0 JSR-371を通してAdopt a JSRに知ろう #jjug_ccc #ccc_r57
MVC 1.0 JSR-371を通してAdopt a JSRに知ろう #jjug_ccc #ccc_r57
 
Java on Microsoft Azure
Java on Microsoft AzureJava on Microsoft Azure
Java on Microsoft Azure
 
Java 20年史 (JJUG CCC 2015 春 基調講演)
Java 20年史 (JJUG CCC 2015 春 基調講演)Java 20年史 (JJUG CCC 2015 春 基調講演)
Java 20年史 (JJUG CCC 2015 春 基調講演)
 
OCHaCafe Season 2 #4 - Cloud Native時代のモダンJavaの世界
OCHaCafe Season 2 #4 - Cloud Native時代のモダンJavaの世界OCHaCafe Season 2 #4 - Cloud Native時代のモダンJavaの世界
OCHaCafe Season 2 #4 - Cloud Native時代のモダンJavaの世界
 
JavaScript.Next
JavaScript.NextJavaScript.Next
JavaScript.Next
 
Application Platform としての Windows Server 2019
Application Platform としての Windows Server 2019Application Platform としての Windows Server 2019
Application Platform としての Windows Server 2019
 

Andere mochten auch

JavaEE7徹底入門 プレゼンテーション層の開発 JSF
JavaEE7徹底入門 プレゼンテーション層の開発 JSFJavaEE7徹底入門 プレゼンテーション層の開発 JSF
JavaEE7徹底入門 プレゼンテーション層の開発 JSFMasuji Katoda
 
3.Java EE7 徹底入門 CDI&EJB
3.Java EE7 徹底入門 CDI&EJB3.Java EE7 徹底入門 CDI&EJB
3.Java EE7 徹底入門 CDI&EJBTsunenaga Hanyuda
 
BTS/ITSの近況とあれこれ 2015
BTS/ITSの近況とあれこれ 2015BTS/ITSの近況とあれこれ 2015
BTS/ITSの近況とあれこれ 2015minazou67
 
クロスプラットフォーム開発入門
クロスプラットフォーム開発入門クロスプラットフォーム開発入門
クロスプラットフォーム開発入門minazou67
 
第2回webデザイナー向けcake php勉強会
第2回webデザイナー向けcake php勉強会第2回webデザイナー向けcake php勉強会
第2回webデザイナー向けcake php勉強会Shusuke Otomo
 
[超初心者向け無料セミナー] 1時間でまるわかり!CakePHP概説&WordPress応用事例
[超初心者向け無料セミナー] 1時間でまるわかり!CakePHP概説&WordPress応用事例[超初心者向け無料セミナー] 1時間でまるわかり!CakePHP概説&WordPress応用事例
[超初心者向け無料セミナー] 1時間でまるわかり!CakePHP概説&WordPress応用事例TechGardenSchool
 
JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要Shumpei Shiraishi
 
はじめてのJPA
はじめてのJPAはじめてのJPA
はじめてのJPAkawaba
 
NashornとServerSideJavaScript
NashornとServerSideJavaScriptNashornとServerSideJavaScript
NashornとServerSideJavaScriptMizuho Sakamaki
 
EJB3 ABC
EJB3 ABCEJB3 ABC
EJB3 ABCbose999
 
CakePHP PHP Framework
CakePHP PHP FrameworkCakePHP PHP Framework
CakePHP PHP Frameworkryota ichie
 
Cake Php開発事例
Cake Php開発事例Cake Php開発事例
Cake Php開発事例柴田 篤志
 
O/R Mapping の話をするよ。ActiveRecord の話をしたかった。
O/R Mapping の話をするよ。ActiveRecord の話をしたかった。O/R Mapping の話をするよ。ActiveRecord の話をしたかった。
O/R Mapping の話をするよ。ActiveRecord の話をしたかった。Tomohiko Himura
 
Java EE 7技術アップデート & 逆引き JSF 2.2
Java EE 7技術アップデート & 逆引き JSF 2.2 Java EE 7技術アップデート & 逆引き JSF 2.2
Java EE 7技術アップデート & 逆引き JSF 2.2 Hirofumi Iwasaki
 
Oracle talk 20131213
Oracle talk 20131213Oracle talk 20131213
Oracle talk 20131213Arshal Ameen
 
Beginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_studyBeginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_studyToshiaki Maki
 
CakePHP を使ってよかったこと
CakePHP を使ってよかったことCakePHP を使ってよかったこと
CakePHP を使ってよかったことWataru Terada
 
これからのNashorn
これからのNashornこれからのNashorn
これからのNashornLogico
 

Andere mochten auch (19)

JavaEE7徹底入門 プレゼンテーション層の開発 JSF
JavaEE7徹底入門 プレゼンテーション層の開発 JSFJavaEE7徹底入門 プレゼンテーション層の開発 JSF
JavaEE7徹底入門 プレゼンテーション層の開発 JSF
 
3.Java EE7 徹底入門 CDI&EJB
3.Java EE7 徹底入門 CDI&EJB3.Java EE7 徹底入門 CDI&EJB
3.Java EE7 徹底入門 CDI&EJB
 
BTS/ITSの近況とあれこれ 2015
BTS/ITSの近況とあれこれ 2015BTS/ITSの近況とあれこれ 2015
BTS/ITSの近況とあれこれ 2015
 
クロスプラットフォーム開発入門
クロスプラットフォーム開発入門クロスプラットフォーム開発入門
クロスプラットフォーム開発入門
 
第2回webデザイナー向けcake php勉強会
第2回webデザイナー向けcake php勉強会第2回webデザイナー向けcake php勉強会
第2回webデザイナー向けcake php勉強会
 
[超初心者向け無料セミナー] 1時間でまるわかり!CakePHP概説&WordPress応用事例
[超初心者向け無料セミナー] 1時間でまるわかり!CakePHP概説&WordPress応用事例[超初心者向け無料セミナー] 1時間でまるわかり!CakePHP概説&WordPress応用事例
[超初心者向け無料セミナー] 1時間でまるわかり!CakePHP概説&WordPress応用事例
 
JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要
 
はじめてのJPA
はじめてのJPAはじめてのJPA
はじめてのJPA
 
NashornとServerSideJavaScript
NashornとServerSideJavaScriptNashornとServerSideJavaScript
NashornとServerSideJavaScript
 
EJB3 ABC
EJB3 ABCEJB3 ABC
EJB3 ABC
 
CakePHP PHP Framework
CakePHP PHP FrameworkCakePHP PHP Framework
CakePHP PHP Framework
 
Cake Php開発事例
Cake Php開発事例Cake Php開発事例
Cake Php開発事例
 
O/R Mapping の話をするよ。ActiveRecord の話をしたかった。
O/R Mapping の話をするよ。ActiveRecord の話をしたかった。O/R Mapping の話をするよ。ActiveRecord の話をしたかった。
O/R Mapping の話をするよ。ActiveRecord の話をしたかった。
 
Java EE 7技術アップデート & 逆引き JSF 2.2
Java EE 7技術アップデート & 逆引き JSF 2.2 Java EE 7技術アップデート & 逆引き JSF 2.2
Java EE 7技術アップデート & 逆引き JSF 2.2
 
Slick入門
Slick入門Slick入門
Slick入門
 
Oracle talk 20131213
Oracle talk 20131213Oracle talk 20131213
Oracle talk 20131213
 
Beginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_studyBeginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_study
 
CakePHP を使ってよかったこと
CakePHP を使ってよかったことCakePHP を使ってよかったこと
CakePHP を使ってよかったこと
 
これからのNashorn
これからのNashornこれからのNashorn
これからのNashorn
 

Ähnlich wie ついに始まるJava EE 7時代のアプリケーション開発

App controllerとSPFで実現するハイブリッドクラウド
App controllerとSPFで実現するハイブリッドクラウドApp controllerとSPFで実現するハイブリッドクラウド
App controllerとSPFで実現するハイブリッドクラウドTakashi Kanai
 
Windows Server 2012 で管理をもっと自動化する
Windows Server 2012 で管理をもっと自動化するWindows Server 2012 で管理をもっと自動化する
Windows Server 2012 で管理をもっと自動化するjunichi anno
 
VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発
VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発
VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発tomotoshi
 
クライアントサイドMVVMアーキテクチャとVue.jsをまとめたよ
クライアントサイドMVVMアーキテクチャとVue.jsをまとめたよクライアントサイドMVVMアーキテクチャとVue.jsをまとめたよ
クライアントサイドMVVMアーキテクチャとVue.jsをまとめたよSeki Yousuke
 
App012 linux java_にも対応!_azure_service_fabric_を
App012 linux java_にも対応!_azure_service_fabric_をApp012 linux java_にも対応!_azure_service_fabric_を
App012 linux java_にも対応!_azure_service_fabric_をTech Summit 2016
 
App012 linux java_にも対応!_azure_service_fabric_を
App012 linux java_にも対応!_azure_service_fabric_をApp012 linux java_にも対応!_azure_service_fabric_を
App012 linux java_にも対応!_azure_service_fabric_をTech Summit 2016
 
オープンクラウド基盤に最適! EMCのElastic Cloudソリューション
オープンクラウド基盤に最適! EMCのElastic Cloudソリューションオープンクラウド基盤に最適! EMCのElastic Cloudソリューション
オープンクラウド基盤に最適! EMCのElastic CloudソリューションEMC Japan
 
話題のNode-REDでIoTアプリを作ってみよう
話題のNode-REDでIoTアプリを作ってみよう話題のNode-REDでIoTアプリを作ってみよう
話題のNode-REDでIoTアプリを作ってみようKimihiko Kitase
 
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること 【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること 日本マイクロソフト株式会社
 
ASP.NET MVC プログラミング入門の入門
ASP.NET MVC プログラミング入門の入門ASP.NET MVC プログラミング入門の入門
ASP.NET MVC プログラミング入門の入門Masuda Tomoaki
 
App controllerとwindows azure packで作る大規模プライベートクラウド
App controllerとwindows azure packで作る大規模プライベートクラウドApp controllerとwindows azure packで作る大規模プライベートクラウド
App controllerとwindows azure packで作る大規模プライベートクラウドTakashi Kanai
 
2012 OpenStack + KVM = onamae.com VPS #2 ~ vnc and snapshot ~
2012 OpenStack + KVM = onamae.com VPS #2 ~ vnc and snapshot ~2012 OpenStack + KVM = onamae.com VPS #2 ~ vnc and snapshot ~
2012 OpenStack + KVM = onamae.com VPS #2 ~ vnc and snapshot ~Naoto Gohko
 
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介david9142
 
実プロジェクトの経験から学ぶazureサービス適用パターン
実プロジェクトの経験から学ぶazureサービス適用パターン実プロジェクトの経験から学ぶazureサービス適用パターン
実プロジェクトの経験から学ぶazureサービス適用パターンKuniteru Asami
 
Beginning java ee 6 13章メッセージ通信
Beginning java ee 6 13章メッセージ通信Beginning java ee 6 13章メッセージ通信
Beginning java ee 6 13章メッセージ通信zuisener .
 
Beginning java ee 6 13章メッセージ通信up
Beginning java ee 6 13章メッセージ通信upBeginning java ee 6 13章メッセージ通信up
Beginning java ee 6 13章メッセージ通信upzuisener .
 

Ähnlich wie ついに始まるJava EE 7時代のアプリケーション開発 (20)

App controllerとSPFで実現するハイブリッドクラウド
App controllerとSPFで実現するハイブリッドクラウドApp controllerとSPFで実現するハイブリッドクラウド
App controllerとSPFで実現するハイブリッドクラウド
 
Windows Server 2012 で管理をもっと自動化する
Windows Server 2012 で管理をもっと自動化するWindows Server 2012 で管理をもっと自動化する
Windows Server 2012 で管理をもっと自動化する
 
20021007
2002100720021007
20021007
 
VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発
VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発
VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発
 
110409 slintky lt
110409 slintky lt110409 slintky lt
110409 slintky lt
 
Amazon Web Servicesブース:UI×API×AWS 横田 聡
Amazon Web Servicesブース:UI×API×AWS 横田 聡Amazon Web Servicesブース:UI×API×AWS 横田 聡
Amazon Web Servicesブース:UI×API×AWS 横田 聡
 
クライアントサイドMVVMアーキテクチャとVue.jsをまとめたよ
クライアントサイドMVVMアーキテクチャとVue.jsをまとめたよクライアントサイドMVVMアーキテクチャとVue.jsをまとめたよ
クライアントサイドMVVMアーキテクチャとVue.jsをまとめたよ
 
App012 linux java_にも対応!_azure_service_fabric_を
App012 linux java_にも対応!_azure_service_fabric_をApp012 linux java_にも対応!_azure_service_fabric_を
App012 linux java_にも対応!_azure_service_fabric_を
 
App012 linux java_にも対応!_azure_service_fabric_を
App012 linux java_にも対応!_azure_service_fabric_をApp012 linux java_にも対応!_azure_service_fabric_を
App012 linux java_にも対応!_azure_service_fabric_を
 
オープンクラウド基盤に最適! EMCのElastic Cloudソリューション
オープンクラウド基盤に最適! EMCのElastic Cloudソリューションオープンクラウド基盤に最適! EMCのElastic Cloudソリューション
オープンクラウド基盤に最適! EMCのElastic Cloudソリューション
 
話題のNode-REDでIoTアプリを作ってみよう
話題のNode-REDでIoTアプリを作ってみよう話題のNode-REDでIoTアプリを作ってみよう
話題のNode-REDでIoTアプリを作ってみよう
 
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること 【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
 
ASP.NET MVC プログラミング入門の入門
ASP.NET MVC プログラミング入門の入門ASP.NET MVC プログラミング入門の入門
ASP.NET MVC プログラミング入門の入門
 
App controllerとwindows azure packで作る大規模プライベートクラウド
App controllerとwindows azure packで作る大規模プライベートクラウドApp controllerとwindows azure packで作る大規模プライベートクラウド
App controllerとwindows azure packで作る大規模プライベートクラウド
 
2012 OpenStack + KVM = onamae.com VPS #2 ~ vnc and snapshot ~
2012 OpenStack + KVM = onamae.com VPS #2 ~ vnc and snapshot ~2012 OpenStack + KVM = onamae.com VPS #2 ~ vnc and snapshot ~
2012 OpenStack + KVM = onamae.com VPS #2 ~ vnc and snapshot ~
 
Mvc conf session_5_isami
Mvc conf session_5_isamiMvc conf session_5_isami
Mvc conf session_5_isami
 
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
 
実プロジェクトの経験から学ぶazureサービス適用パターン
実プロジェクトの経験から学ぶazureサービス適用パターン実プロジェクトの経験から学ぶazureサービス適用パターン
実プロジェクトの経験から学ぶazureサービス適用パターン
 
Beginning java ee 6 13章メッセージ通信
Beginning java ee 6 13章メッセージ通信Beginning java ee 6 13章メッセージ通信
Beginning java ee 6 13章メッセージ通信
 
Beginning java ee 6 13章メッセージ通信up
Beginning java ee 6 13章メッセージ通信upBeginning java ee 6 13章メッセージ通信up
Beginning java ee 6 13章メッセージ通信up
 

Mehr von Takakiyo Tanaka

MicroProfile Starterで簡単スタート Open Liberty
MicroProfile Starterで簡単スタート Open LibertyMicroProfile Starterで簡単スタート Open Liberty
MicroProfile Starterで簡単スタート Open LibertyTakakiyo Tanaka
 
オープンソースで提供される第二のJVM:OpenJ9 VMとIBM Javaについて
オープンソースで提供される第二のJVM:OpenJ9 VMとIBM Javaについてオープンソースで提供される第二のJVM:OpenJ9 VMとIBM Javaについて
オープンソースで提供される第二のJVM:OpenJ9 VMとIBM JavaについてTakakiyo Tanaka
 
自分のDocker/Kubernetes環境を手に入れる ICP Community Editionで簡単構築
自分のDocker/Kubernetes環境を手に入れる ICP Community Editionで簡単構築自分のDocker/Kubernetes環境を手に入れる ICP Community Editionで簡単構築
自分のDocker/Kubernetes環境を手に入れる ICP Community Editionで簡単構築Takakiyo Tanaka
 
クラウド、クラウドというけれどJavaのシステムにとってクラウドってメリットあるの?
クラウド、クラウドというけれどJavaのシステムにとってクラウドってメリットあるの?クラウド、クラウドというけれどJavaのシステムにとってクラウドってメリットあるの?
クラウド、クラウドというけれどJavaのシステムにとってクラウドってメリットあるの?Takakiyo Tanaka
 
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。Takakiyo Tanaka
 
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-Takakiyo Tanaka
 
エンタープライズJava環境におけるマイクロサービス・アーキテクチャーの必要性 #natsumiB4
エンタープライズJava環境におけるマイクロサービス・アーキテクチャーの必要性 #natsumiB4エンタープライズJava環境におけるマイクロサービス・アーキテクチャーの必要性 #natsumiB4
エンタープライズJava環境におけるマイクロサービス・アーキテクチャーの必要性 #natsumiB4Takakiyo Tanaka
 
JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57
JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57
JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57Takakiyo Tanaka
 

Mehr von Takakiyo Tanaka (9)

OutOfMemoryErrorとは
OutOfMemoryErrorとは OutOfMemoryErrorとは
OutOfMemoryErrorとは
 
MicroProfile Starterで簡単スタート Open Liberty
MicroProfile Starterで簡単スタート Open LibertyMicroProfile Starterで簡単スタート Open Liberty
MicroProfile Starterで簡単スタート Open Liberty
 
オープンソースで提供される第二のJVM:OpenJ9 VMとIBM Javaについて
オープンソースで提供される第二のJVM:OpenJ9 VMとIBM Javaについてオープンソースで提供される第二のJVM:OpenJ9 VMとIBM Javaについて
オープンソースで提供される第二のJVM:OpenJ9 VMとIBM Javaについて
 
自分のDocker/Kubernetes環境を手に入れる ICP Community Editionで簡単構築
自分のDocker/Kubernetes環境を手に入れる ICP Community Editionで簡単構築自分のDocker/Kubernetes環境を手に入れる ICP Community Editionで簡単構築
自分のDocker/Kubernetes環境を手に入れる ICP Community Editionで簡単構築
 
クラウド、クラウドというけれどJavaのシステムにとってクラウドってメリットあるの?
クラウド、クラウドというけれどJavaのシステムにとってクラウドってメリットあるの?クラウド、クラウドというけれどJavaのシステムにとってクラウドってメリットあるの?
クラウド、クラウドというけれどJavaのシステムにとってクラウドってメリットあるの?
 
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
 
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
 
エンタープライズJava環境におけるマイクロサービス・アーキテクチャーの必要性 #natsumiB4
エンタープライズJava環境におけるマイクロサービス・アーキテクチャーの必要性 #natsumiB4エンタープライズJava環境におけるマイクロサービス・アーキテクチャーの必要性 #natsumiB4
エンタープライズJava環境におけるマイクロサービス・アーキテクチャーの必要性 #natsumiB4
 
JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57
JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57
JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57
 

ついに始まるJava EE 7時代のアプリケーション開発

  • 1. © 2015 IBM Corporation #devsumiD ついに始まる Java EE 7時代のアプリケーション開発 2014年 2月 19日 日本アイ・ビー・エム株式会社 IBMシステムズ・ソフトウェア事業部
  • 2. © 2015 IBM Corporation #devsumiD なぜ,いま Java EE 7なのか 2
  • 3. © 2015 IBM Corporation #devsumiD Java Enterprise Edition 7 (Java EE 7) 3 一昨年5月に 正式版に
  • 4. © 2015 IBM Corporation #devsumiD 2015年夏 4 Java EE 7 Full Profile対応 WebSphere Application Server 公開予定 詳細は後半で
  • 5. © 2015 IBM Corporation #devsumiD 国内で普及率の高かったフレームワークの世代交代  Struts 1.x –2013年 EoL(End of Life)の発表 –2014年 脆弱性発見による混乱(CVE-2014-0114)  Seaser2 –主要開発者のプロジェクト離脱により新機能追加の停止 –Ajax/HTML5連携やRESTful Webサービス対応の不備 5
  • 6. © 2015 IBM Corporation #devsumiD 2000年代前半のWebアプリケーション まだまだ未完成で力不足のJ2EE仕様 →多くの「アンチJ2EE技術」の登場 コンテナ上にフレームワークを追加し その上にアプリケーションを構築することが主流に – Open Sourceフレームワーク – ベンダー製フレームワーク – 独自フレームワーク 6
  • 7. © 2015 IBM Corporation #devsumiD 2015年のWebアプリケーション事情 Java EE提供の各種仕様の機能増強・完成度の向上 「標準仕様で十分」 –CDI 1.x :依存性注入 • HibernateやSeaser2の提供していた機能をとりこみ –JSF 2.x :Webアプリケーション・フレームワーク –JPA 2.x :O/Rマッピング • いずれもVersion 1.xから大幅な機能強化 7 → Java EEへの回帰
  • 8. © 2015 IBM Corporation #devsumiD JSF EL Java EE 7の標準的なアプリケーション構成 画面デザイン –JSF / EL 外部連携 –JAX-RS / WebSocket 8 JAX-RS WebSocket CDI . EJB / JTA JPA Database 依存性注入・ビジネスロジック –CDI / EJB / JTA DB連携・ORマッピング –JPA
  • 9. © 2015 IBM Corporation #devsumiD Java EE 7の三つのゴール HTML5環境への対応 開発生産性の向上 エンタープライズ・ニーズへの対応 9
  • 10. © 2015 IBM Corporation #devsumiD 三つのゴールとJava EE仕様群との対応  HTML5環境への対応 – JSR 344: JavaServer Faces (JSF) 2.2 – JSR 353: Java API for JSON Processing (JSONP) 1.0 – JSR 356: Java API for WebSocket 1.0 – JSR 339: Java API for RESTful Web Services (JAX-RS) 2.0  開発生産性の向上 – JSR 345: Enterprise JavaBeans (EJB) 3.2 – JSR 346: Contexts and Dependency Injection for Java EE (CDI) 1.1 – JSR 907: Java Transaction API (JTA) 1.2 – JSR 349: Bean Validation 1.1  エンタープライズ・ニーズへの対応 – JSR 343: Java Message Service (JMS) 2.0 – JSR 338: Java Persistence API (JPA) 2.1 – JSR 236: Concurrency Utilities for Java EE 1.0 – JSR 352: Batch Applications for the Java Platform 1.0 10
  • 11. © 2015 IBM Corporation #devsumiD WebSocketとは 11
  • 12. © 2015 IBM Corporation #devsumiD 2014年10月 ついに正式勧告となったHTML5 従来のHTML –画面をレンダリングするための規格 HTML5(+ CSS3 / JavaScript) –アプリケーションを記述するための規格 12
  • 13. © 2015 IBM Corporation #devsumiD HTML5環境の新しいアプリケーションスタイル 「サーバーサイドMVC」から「クライアントMVC」へ 13 Web Browser Application Server Application HTTP Request HTML/JS Controller Session Data View Business LogicModel DomainDomain Web Browser Application Server Application View HTML/JS Controller Data Store Model Model DomainDomain RESTful or WebSocket JSON Business Logic 従来のWebアプリケーション Single Page Application (SPA)
  • 14. © 2015 IBM Corporation #devsumiD HTML5におけるクライアント・サーバー連携  通信方法 –RESTful (JAX-RS 2.0) • HTTPの原則にしたがった 簡潔なシステム間連携の設計手法 –WebSocket (WebSocket 1.0) • ブラウザとWebサーバーの間で 双方向通信を可能にする 通信プロトコル  データ型 –JSON:JavaScript Object Notation (JSONP 1.0) • JavaScriptのオブジェクトとして そのままパースできる テキスト形式のデータ表記法 14 Web Browser Application Server Application View HTML/JS Controller Data Store Model Model DomainDomain RESTful or Web Socket JSON Business Logic
  • 15. © 2015 IBM Corporation #devsumiD 新しい双方向通信:WebSocket WebSocketを使用すると双方向通信を自然な形で実現 –HTTPで通信を開始して, Protocol SwitchingによりWebSocketに移行 –サーバー側からもクライアント側からもメッセージを送信 可能 15
  • 16. © 2015 IBM Corporation #devsumiD 既存技術との比較 Ajax –定期的にポーリング –最大でポーリング間隔の タイムラグが発生する –あまりポーリング間隔を 短くするとサーバーに負荷が 16 Comet –イベントが発生するまで 応答を遅延させる –クライアントからの イベント通知には不向き HTML JS クライアント サーバー CSS Data#2 Data#1画面遷移 Dataなし Data#3 HTML JS クライアント サーバー CSSData#1画面遷移 イベント 発生 待機 イベント 発生 待機 Data#2 Data#3
  • 17. © 2015 IBM Corporation #devsumiD WebSocket プロトコルの現状 プロトコルはIETF / RFCで標準化 – 2010年2月 draft-hixie-thewebsocketprotocol-75 – 2010年5月 draft-ietf-hybi-thewebsocketprotocol-00 – 2011年4月 draft-ietf-hybi-thewebsocketprotocol-07 – 2011年7月 draft-ietf-hybi-thewebsocketprotocol-10 – 2011年12月 RFC 6455 "The WebSocket Protocol" W3CでJavaScript APIを仕様化 – 2009年4月 First Public Draft – 2009年10月〜2012年8月 Working Draft – 2012年9月 W3C Candidate Recommendation 17
  • 18. © 2015 IBM Corporation #devsumiD ブラウザの対応状況 18 モダンなブラウザの大部分がサポート MSIE 10 (2013/2) 〜 Chrome 16 (2011/12) 〜 Firefox 11 (2012/3) 〜 Safari 6 (2012/7) 〜 iOS 6.0 (2012/9) 〜 Android 4.4 (2013/10) 〜
  • 19. © 2015 IBM Corporation #devsumiD 対応ブラウザのシェア 19 70%以上のブラウザがWebSocketに対応 出典:NetMarketShare.com Market Share Reports October, 2014
  • 20. © 2015 IBM Corporation #devsumiD Java EE 7での WebSocketアプリ開発 20
  • 21. © 2015 IBM Corporation #devsumiD JSR 356: Java API for WebSocket 1.0 JavaでWebSocket通信を実装するためのAPI クライアントとサーバーの両方をサポート Java SE環境での実行も考慮された仕様 アノテーションをベースとした モダンなプログラミングスタイル Encoder / Decoderにより 扱うデータ型を柔軟に制御 21
  • 22. © 2015 IBM Corporation #devsumiD Endpoint:ServerEndpointとClientEndpoint WebSocket通信の両端となるEndpointの作成が必須 –WebSocket通信の開始・終了・エラー発生と メッセージ受信をトリガーにEndpointのメソッドが呼び 出される クライアントはブラウザで実装することが多いので, 多くの場合Java EEではサーバー側のEndpointを実装する 22 ClientEndpoint ServerEndpoint Session @OnMessage public void message(... ) @OnOpen public void open(... ) @OnClose public void close(... ) @OnMessage public void message(... ) @OnError public void error(... )
  • 23. © 2015 IBM Corporation #devsumiD Endpointの作成 二つの実装方法 –アノテーションをつけたPOJO •@javax.websocket.server.ServerEndpoint •@javax.websocket.ClientEndpoint –javax.websocket.Endpointを継承したクラス アノテーションベースのPOJOで実装するほうが簡単 23
  • 24. © 2015 IBM Corporation #devsumiD アノテーションによるEndpoint実装の例 24 @ServerEndpoint("/echo") public class EchoServiceEndpoint{ Session currentSession = null; //接続がオープンしたとき @OnOpen public void onOpen(Session session, EndpointConfig ec) { currentSession = session; } //メッセージを受信したとき @OnMessage public void receiveMessage(String msg) throws IOException { //メッセージをクライアントに送信する currentSession.getBasicRemote().sendText("Hello" + msg); } //接続がクローズしたとき @OnClose public void onClose(Session session, CloseReason reason) { ・・・ } //接続エラーが発生したとき @OnError public void onError(Throwable t) {・・・ } }
  • 25. © 2015 IBM Corporation #devsumiD JVMJVM Endpointのインスタンス Endpointのインスタンスは WebSocketのセッションごとに別個に作成される –Servletのインスタンスが,サーバーに一つ作成されて 複数のリクエスト・セッションで共有されるのと対照的 25 Endpoint インスタンス Servlet インスタンス
  • 26. © 2015 IBM Corporation #devsumiD Endpointのコーディング(1) セッションの情報をインスタンス変数に保存できる –多くの場合,javax.websocket.Sessionの保存は必須 「時間のかかる初期化処理」はEndpoint毎には書かない –@Singletonの@EJBなどに実装しておいて呼び出す 26 @ServerEndpoint(value = "/echo") public class EchoServiceEndpoing { private Session currentSession; @OnOpen public void onOpen(Session session, EndpointConfig ec) { currentSession = session;
  • 27. © 2015 IBM Corporation #devsumiD Endpointのコーディング(2) マルチスレッドを考える必要はない –それぞれのインスタンスの@OnOpenメソッドなどが 複数スレッドから同時に呼ばれることはない –ただし複数のEndpoint / Sessionにまたがる処理では, 状況に応じて排他制御が必要 27
  • 28. © 2015 IBM Corporation #devsumiD ピアへのメッセージの送信 SessionからRemoteEndpointを取得して使用する RemoteEndpointは,2種類 –RemoteEndpoint.Async 非同期通信 –RemoteEndpoint.Basic 同期通信 Sessionは 他のスレッドで稼働しているServlet / EJBからも利用可能 –複数スレッドから一つのSessionを同時に利用することは 避ける 28 if (session.isOpen()) session.getBasicRemote().sendText(msg);
  • 29. © 2015 IBM Corporation #devsumiD HTTPヘッダ・HttpSessionへのアクセス  ConfiguratorのmodifyHandshakeメソッドを利用する –HandshakeRequestからHTTPヘッダやHttpSessionが取得できる  @ServerEndpoint / @ClientEndpoint に追記 29 import javax.websocket.server.ServerEndpointConfig.Configurator; public class ChatConfig extends Configurator { @Override public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest req, HandshakeResponse resp) { @ServerEndpoint(value = "/chat", configurator = ChatConfig.class) public class ChatService {
  • 30. © 2015 IBM Corporation #devsumiD ConfiguratorからEndpointへの情報伝達 EndpointConfigのUserPropertiesを利用する 30 public void modifyHandshake(ServerEndpointConfig config, HandshakeRequest request, HandshakeResponse response) { HttpSession session = (HttpSession)request.getHttpSession(); Map<String,Object> userProps = config.getUserProperties(); userProps.put("MyID", (session != null)? session.getAttribute("MyID") : "No ID"); @OnOpen public void onOpen(Session session, EndpointConfig config) { Map<String,Object> userProps = config.getUserProperties(); String myID = (String)userProps.get("MyID"); Configurator Endpoint
  • 31. © 2015 IBM Corporation #devsumiD ConfiguratorやEndpointでHttpSessionを書き換えない HandshakeRequestからHttpSessionは取得できるが, Attributeのセット・更新・削除は危険 –分散環境では,HttpSessionの内容は複数サーバー間で共有される –多くのアプリケーションサーバーでは,サーバー間の HttpSession情報の更新はリクエスト処理が完了した時に実行 –WebSocketでは,セッションが短時間で終了しない → 変更内容が他のサーバーになかなか伝搬しない Configuratorでは, HttpSessionから読み取りのみをおこなうのが安全 31
  • 32. © 2015 IBM Corporation #devsumiD さらに詳細に知りたい場合は IBM developerWorksでWebSocketを検索 32 Java EE 7 アプリケーション設計ガイド – WebSocket編 http://www.ibm.com/developerworks/jp/websphere/library/was/javaee7_appguide/1.html
  • 33. © 2015 IBM Corporation #devsumiD CDI 1.2 33
  • 34. © 2015 IBM Corporation #devsumiD 開発生産性の向上:CDI 依存性注入(DI)の標準仕様: Context and Dependency Injection(CDI) 34 @ApplicationScoped public class HelloServiceImpl implements HelloService { public void sayHello() { System.out.println("Hello!"); } } public class HelloWorld extends HttpServlet { @Inject HelloService service;
  • 35. © 2015 IBM Corporation #devsumiD CDIの使用例(1) 外部接続のパラメーターのハードコーディングの防止 –ネーミングサービス利用からアノテーション指定へ コンポーネント間の依存性の除去 –モックやスタブを利用したテストが容易に 35 @Inject Service s; 実際の サービス実装 テスト用の スタブ 業務DB ダミーデータ 本番環境で インジェクション テスト環境で インジェクション
  • 36. © 2015 IBM Corporation #devsumiD CDIの使用例(2)  コンテナによるライフサイクルの管理 – リクエスト内の各種コンポーネント間の情報共有・キャッシュ – セッション情報・アプリケーション構成情報などの保持  インターセプターによるアスペクトの注入 – ロギング・監査処理などの動的な追加 36 Servlet EJB lite JSP Ojb Ojb Ojb @RequestScoped のオブジェクト Local 呼び出し 呼び出し 注入 注入 注入 リクエストごとに 固有のオブジェクトが 生成されて 注入される 同一同一
  • 37. © 2015 IBM Corporation #devsumiD CDIの歴史 Context and Dependency Injection 1.0 (Java EE 6) –最初の仕様 Context and Dependency Injection 1.1 (Java EE 7) –Bean-Discovery-Modeの追加 Context and Dependency Injection 1.2 –1.1のメンテナンス・リリース Context and Dependency Injection 2.0 –2016年を目標に策定中の次期リリース 37
  • 38. © 2015 IBM Corporation #devsumiD WebSphereの使用している実装 CDI 1.0 (WAS V8.x) –Apache Open WebBeans CDI 1.2 (WAS V9.x) –JBoss Weld(参照実装) 38
  • 39. © 2015 IBM Corporation #devsumiD CDIでインジェクション可能な場所 コンテナ管理Beanに対してインジェクション可能 –サーブレットクラス –サーブレット・フィルター –サーブレット・ライフサイクル・リスナー –EJB Session Bean –JAX-RS/WebSocketエンドポイント –CDIでインジェクションされるクラス 39 Servlet 注入 注入
  • 40. © 2015 IBM Corporation #devsumiD CDIでインジェクション可能なBean  CDI 1.0 –beans.xmlが含まれるアーカイブの全てのクラス  CDI 1.1/1.2 –beans.xmlで指定されたBean-Discovery-Modeによって変化 • all • annotated • none –beans.xmlが存在していないアーカイブ • カオス・・・ 40 CDIを使用する場合は, beans.xmlを使用してBean-Discovery-Modeを指定しましょう <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd" bean-discovery-mode="annotated"> </beans>
  • 41. © 2015 IBM Corporation #devsumiD Bean-Discovery-Mode アーカイブに含まれるbeans.xmlによって指定される  all –(@Ventedアノテーションが指定されたもの以外) アーカイブ内の全てのクラスがインジェクションの対象となる  annotated (デフォルト,かつ強く推奨) –Bean定義アノテーションが指定されたもの (スコープアノテーションが指定されたもの)が インジェクション対象となる  none –アーカイブ内のクラスはインジェクションの対象とならない 41
  • 42. © 2015 IBM Corporation #devsumiD Bean-Discovery-Modeによる恩恵 CDI 1.0では, アーカイブに大量のクラス(数万〜)が入っていると・・・ –全てのクラスがCDIコンテナの管理下に –起動時間の遅延 –Javaヒープの大量使用 CDI 1.1以降では, –Bean定義されたクラスが多くなければ問題なく使用可能 42
  • 43. © 2015 IBM Corporation #devsumiD Bean定義アノテーション  インジェクションされるBeanのスコープを定義する –@RequestScoped リクエストごとに異なるインスタンス –@ConversationScoped (JSFなどの)会話処理ごとに異なるインスタンス –@SessionScoped セッションごとに異なるインスタンス –@ApplicationScoped アプリケーション全体で単一のインスタンス –@Dependent インジェクション先と同一のスコープ  デフォルトのannotatedモードでは, スコープアノテーションを使用するとインジェクション対象となる  @Singletonはインジェクション対象とならなくなりました 43
  • 44. © 2015 IBM Corporation #devsumiD インジェクション対象となるクラスの実装方法 デフォルトコンストラクタが必要です @SessionScoped指定されたクラスは java.io.Serializableを実装している必要があります DI候補が複数ある状況では型解決を実装する必要があります –静的な型解決 @Qualifier –動的な型解決 @Produce 44 @Qualifier @Retention(RUNTIME) @Target({FIELD, TYPE, METHOD, PARAMETER}) public @interface DB2 {} @Qualifier @Retention(RUNTIME) @Target({FIELD, TYPE, METHOD, PARAMETER}) public @interface Oracle {}
  • 45. © 2015 IBM Corporation #devsumiD Libertyプロファイル 45
  • 46. © 2015 IBM Corporation #devsumiD 46 Libertyプロファイルの特長 WAS V8.5.5 Liberty & WDT 自動化ツールとの連携 多くのOSSツールに 無償でプラグインを提供 Unzipによる導入とデプロイ パッケージをした サーバー + アプリ + 構成情報を Unzipでデプロイ可能 簡単な構成と動的変更 最低限必要な構成ファイルは server.xmlひとつだけ デフォルトベースで簡単構成 構成変更は再起動なしに反映 軽量ランタイム メモリー使用量が小さい: 60MB程度~ ディスク使用量も100MB以下 起動が速い 起動時間: 5秒程度 統合ツール(WDT) 高機能なEclipse用の連携ツールを無償で提供 Eclipseから簡単に使用可能 Web Profile準拠 Java EE 6のWeb Profile標準に 準拠したアプリを完全サポート JAX-WS, JAX-RS, JMSもサポート
  • 47. © 2015 IBM Corporation #devsumiD 47 必要な機能(Feature)だけを組み合わせて利用 Java EEなどの標準仕様に定義されたAPIや サーバーが提供する多くの機能のうち Servlet JSP JSF SSL JAX-RS JSON JPA JAX-WS JAX-B JDBC JTA JMS CDI JNDI EJB lite EJB MDB Blueprint WAB ユーザーが必要な機能だけを 自由に組み合わせることができる Servlet JSP JSF SSL JAX-RS JSON JPA JAX-WS JAX-B JDBC JTA JMS CDI JNDI EJB lite EJB MDB Blueprint WAB
  • 48. © 2015 IBM Corporation #devsumiD API・サーバー機能をFeatureとして定義 48 • 必要なものだけを構成 – 設定されたものだけがメモリにロード・初期化される → 最小限の起動時間・メモリー使用 ServletJSPJDBCSSL JAX-RS sessionDatabase <featureManager> <feature>jsp-2.2</feature> <feature>jdbc-4.0</feature> <feature>jaxrs-1.1</feature> <feature>sessionDatabase-1.0</feature> <feature>ssl-1.0</feature> </featureManager> 構成ファイル server.xml 依存関係も 自動的に解決 JSON
  • 49. © 2015 IBM Corporation #devsumiD 新しいFeatureを,順次Liberty Repositoryで提供  Liberty Repositoryで新しいFeatureを入手可能 –Java EE 7を構成する 仕様も順次公開中 –GUI管理画面や z/OS Connectなど  featureManagerコマンドで ランタイム環境に直接 ダウンロード・組み込みが 可能 49 https://developer.ibm.com/wasdev/downloads/
  • 50. © 2015 IBM Corporation #devsumiD ゼロ・マイグレーション  新しい仕様のバージョンに対応するフィーチャーが 追加されても,従来のバージョンも提供されます –例) 現在はServlet 3.1フィーチャーが提供されていますが, Servlet 3.0フィーチャーも引き続き利用できます  アプリケーションで新仕様が必要なければ 従来のフィーチャーをそのまま利用可能 –ただし, 対応するJDKのバージョンは変更される可能性があります 50 servlet-3.0 servlet-3.1
  • 51. © 2015 IBM Corporation #devsumiD WebSphere Application Server Liberty Beta • 2013年11月: Alpha • 2014年2月: Alpha (February update) • 2014年3月: Beta (March 2014) • WebSocket 1.1, EJB lite 3.2, Java EE Concurrency Utilities 1.0,JCA 1.6 • 2014年4月: April Beta • Servlet 3.1, EJB 3.2 (local) • 2014年5月: May Beta • JMS 2.0, JPA 2.1, JSON-P 1.0, Bean Validation 1.1 • 2014年6月: June/July Beta • WebRTC,CouchDB • 2014年7月: July/August Beta • 2014年8月: August/September Beta • JAX-RS 2.0 • 2014年9月: September Beta • Java Batch 1.0 • 2014年10月: October Beta • 2014年11月: November Beta • SIP Servlet 1.1,JDBC 4.1, • 2014年12月: December Beta • 2015年1月: January Beta • 2015年2月: February Beta • CDI 1.2,JSP 2.3,EL 3.0,Java EE Application Client, JASPIC 1.1,JACC 1.5,JCA 1.7,JavaMail 51
  • 52. © 2015 IBM Corporation #devsumiD 52 2015年2月末現在のβの提供状況 •Enterprise JavaBeans (EJB) 3.2 •Java Message Service (JMS) API 2.0 •Java EE Connector Architecture (JCA) 1.7 •Concurrency Utilities for Java EE 1.0 •JavaMail 1.4 •Java Batch 1.0 •Web Services for Java EE 1.3 •Java API for XML-Based Web Services (JAX-WS) 2.2 •Java Architecture for XML Binding (JAXB) 2.2 •Web Services Metadata for the Java Platform 2.1 •Java Authorization Service Provider Contract for Containers (JACC) 1.4 •Java Authentication Service Provider Interface for Containers (JASPIC) 1.0 •Java EE Management 1.1 Web Profile •Java Servlet 3.1 •JavaServer Pages (JSP) 2.3 and Expression Language (EL) 3.0 •Standard Tag Library for JavaServer Pages (JSTL) 1.2 •JavaServer Faces (JSF) 2.2 •Debugging Support for Other Languages 1.0 •Java API for RESTful Web Services (JAX-RS) 2.0 •Java API for WebSocket (WebSocket) 1.0 •Java API for JSON Processing (JSON-P) 1.0 •Common Annotations for the Java Platform 1.2 •Contexts and Dependency Injection for the Java EE Platform 1.2 •Dependency Injection for Java 1.0 •Enterprise JavaBeans 3.2 (EJB Lite) •Java Persistence API 2.1 •Java Transaction API (JTA) 1.2 •Bean Validation 1.1 Java EE full Profile 正式版として利用可能 Betaを提供中
  • 53. © 2015 IBM Corporation #devsumiD でも,お高いんでしょう? "WebSphere Application Server for everyone" https://developer.ibm.com/wasdev/docs/websphere-application-server-everyone/ 3月出荷予定のWAS V8.5.5.5より Libertyプロファイルの本番使用が無料に!!! –Javaヒープの総量が2Gに制限 • 「2G×1 JVM」「1G×2 JVMs」や「512M×4 JVMs」など –クラウドでもオンプレミスでも使用可能 –Liberty Repositoryで提供されている Java EE+αの機能の全てが利用可能 –サポートは公開Forumなどを使用 53
  • 54. © 2015 IBM Corporation #devsumiD もちろん製品の購入もできます WebSphere Application Server Liberty Core – Java EE Web Profileの機能を使用可能 WebSphere Application Server – Java EE Full Profileの機能を使用可能(予定) – 従来から提供されているランタイムも併せて使用可能 WebSphere Application Server Network Deployment – Java EE Full Profileの機能を使用可能(予定) – 従来から提供されているランタイムも併せて使用可能 – クラスター環境の統合管理が可能 • 従来から提供されているNDセルによる統合管理 • Liberty Collectiveによる統合管理 54
  • 55. © 2015 IBM Corporation #devsumiD 製品購入のメリット Javaヒープやインスタンス数を無制限に使用可能 日本語スタッフによる電話で障害サポートを提供 (回数無制限) 関連ソフトもサポート付きで提供 –IBM Java SDK(Linux/Windows/AIX/IBM i/zOS) –IBM HTTP Server –セッション共有用のDBMS 55
  • 56. © 2015 IBM Corporation #devsumiD まとめ いよいよ2015年から, Java EE 7を業務で使用できるようになります Java EE 7では,モダンな業務フレームワークに必要な 多くの機能が提供されています –JPA / JSF / CDI / JAX-RS / WebSocket / etc. IBMのJava EE実行環境である WebSphere Application Serverは 新しいランタイムとしてLibertyプロファイルを提供 –Java EE 7アプリケーションを実行する最適な環境です 56

Hinweis der Redaktion

  1. 11