More Related Content Similar to ぽんぽこバレー勉強会 20120427 Similar to ぽんぽこバレー勉強会 20120427 (16) More from Nobuhiro Sue (19) ぽんぽこバレー勉強会 201204272. 自己紹介
須江 信洋(すえ のぶひろ)
–日本IBMにてミドルウェアのテクニカルセールスを担当
• 2000年頃からJavaEE関連の仕事
• 今年からモバイル関連製品も担当
–Twitter: @nobusue
–http://www.facebook.com/profile.php?id=732337788
コミュニティ活動
–Groovyコミュニティ(JGGUG)サポートスタッフ
• 「プログラミングGROOVY」執筆チーム
• 「Groovy イン・アクション」翻訳チーム
–日本Javaユーザーグループ(JJUG)幹事
–その他
• SCM BootCamp
• 「継続的デリバリー」読書会
2
3. Agenda
Javaアプリケーションサーバー最新動向
–Java EE6でのアップデート
–OSSと商用製品の使い分けのポイント
ハイブリッド・モバイル・アプリケーション
–モバイルWeb
–PhoneGap / Apache Cordova
–IBM Worklight
3
5. Enterprise Javaの歴史 2009/12
Seasar2
Spring SCA
Hibernate
SDO Ajax 2006/3
Portlets Java EE 6
• Profile
BPEL Web Profile
2003/11 • EJB 3.1
Java EE 5
Interceptors
• EJB 3 / JPA
• JPA 2.0
Struts POJO
2001/9 JPQLの拡張
• Servlet 2.5
• Web Beans 1.0
• JSP 2.1
J2EE 1.4 • Bean Validation 1.0
• EJB 2.1 Unified EL
1999/12 • Common Annotation
タイマー • JSF 1.2
• Servlet 3.0
• JSTL 1.2
EJB-QL拡張 • JSP 2.2 / EL 2.2
J2EE 1.3 • Servlet 2.4 • Webサービス
• EJB 2.0 • JSF 2.0
• JSP 2.0 JAX-WS
ローカルEJB • JSTL 1.2
• Webサービス POJO
abs. CMP • Webサービス
JAX-RPC JAXB
J2EE 1.2 MDB JAX-RS
• JMX Mgmt StAX
• EJB 1.1 • Servlet 2.3 • J2EE Deployment MTOM
• Servlet 2.2 イベント • JACC • アノテーション
EJB 1.0 • JSP 1.1 フィルター IoC(制御の反転)
Servlet 2.1 • JMS • JSP 1.2
• JavaMail 軽量化
XML
• JAXP
• Connectors 拡張性
• JAAS 開発容易性
開発容易性
5
6. Java EE 6仕様
New and Update Technology
Pruning Target
Java EE 6 Java EE Management 1.1 Java SE
EJB 3.1 Java EE Deployment 1.2
Servlet 3.0 JACC 1.3 Java IDL
JSP 2.2 JASPIC 1.0 JDBC 4.0
EL 2.2 JSP Debugging 1.0 RMI-IIOP
JMS 1.1 JSTL 1.2 JNDI
JTA 1.1 Web Services Metadata 2.0 JAXP 1.3
JavaMail 1.4 JSF 2.0 StAX 1.0
Connector 1.6 Common Annotations 1.1 JAAS
Web Services 1.3 Java Persistence 2.0 JMX 2.0
JAX-RPC 1.1 Bean Validation 1.0 JAF 1.1
JAX-RS 1.1 Managed Beans 1.0 SAAJ 1.3
JAXR 1.0 Interceptors 1.1 Common Annotations 1.1
JAX-WS 2.2 DI(JSR-330) 1.0
JAXB 2.2 CDI(JSR-299) 1.0
6
7. Java EE 6 の注目すべき機能
Rightsizing (Java EE仕様のボリュームの軽減)
• 「Webプロファイル」
さらなるEase of Development(開発を簡単に)
• EJBにつづきServletもアノテーションベースに
• CDI (Contexts and Dependency Injection)
Web Container(プレゼンテーション層)の強化
• Servlet 3.0,JSF 2.0
• Commet/Web Messaging対応,Ajax対応
Java EE
永続化の機能強化
• JPA 2.0 Web
8. Servlet 3.0
メジャー・バージョンアップ! (Version 2.5 → 3.0)
新機能も盛りだくさん
– 構成のためのアノテーション大量追加 (web.xmlはオプション)
– 非同期処理のサポート
– 複数構成ファイル(web-fragment.xml)の導入
• サード・パーティーのフレームワークとweb.xml定義を分離可能
– HTTPServletRequestにログインとログアウト処理を実現する機能の追加
– Servletおよびフィルタを動的に追加するメソッドの登場
• ServletContext#addFilter
• ServletContext#addServlet
– multipart/form-data形式のリクエストに対応(Partクラスの追加)
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.getWriter().println("Hello Servlet 3.0 !");
}}
8
9. Servlet 3.0 ~ログイン・ログアウト
新しい認証方式
– フォーム認証の実現
– <form action=“j_security_check” method=“post”>の機能をServletで実現
認証のための新しいメソッド
– HttpServletRequest#authenticate(HttpServletResponse response)
– HttpServletRequest#login(String username, String password)
– HttpServletRequest#logout()
アノテーションも追加
– @ServletSecurity
– 「R1」ロールをもったユーザーからGETアクセスを制限
@ServletSecurity (value=@HttpConstraint(rolesAllowed="R1"),
httpMethodConstraints=@HttpMethodConstraint("GET"))
public class SecurityServlet extends HttpServlet{
…(略)
}
9
10. Servlet 3.0 ~非同期処理
非同期リクエスト処理用のモデルを提供
Servletの実行スレッドを早期解放
非同期処理を行うスレッドはリクエストの情報を保有し、レスポンスを返す
Servlet Servlet 別スレッド
doGet()
doGet() startAsync(req,resp)
+ start()
時間の
かかる Servlet 3.0
時間の
処理 かかる
処理
response
response
10
11. JAX-RS(Java API for RESTful Web Services)
Java EE 6 新規追加仕様
– WAS V7.0(Java EE 5)でも、Feature Packとして追加可能
RESTful Webサービスを実現するAPIのJava EE 標準
– サーブレットを使わないWebアプリケーションも可能
@Path("repository")
public class TestRepositoryService {
@Path("version")
@GET /repository/version で呼び出し
@Produces("text/plain; charset=UTF-8")
public String getVersion() {
return "Test Service version 1.0";
}
@Path("user/{userID}") /repository/user/E12345 などで呼び出し
@GET
@Produces("text/plain; charset=UTF-8")
public String getUserName(@PathParam("userID") String id) {
return UserRepository.getUserName(id);
}
11
12. JSF 2.0
メジャー・バージョンアップ! (Version 1.2 → 2.0)
Facelets
– JSP+JSFタグからXHTML+JSF属性に、テンプレート化が容易
Ajaxサポート
– <f:ajax>タグによりJavaScriptを動的に生成
アノテーション対応
– Managed BeanがPOJO+アノテーションだけで作成可能
Bean Validation
– コンテナ全体で値検証を共通化
<h:panelGrid columns="2">
#{cc.attrs.namePrompt}
<h:panelGroup>
<h:inputText id="name" value="#{cc.attrs.managedBean.name}"
valueChangeListener="#{cc.attrs.managedBean.validateName}">
<f:ajax event="blur" render="nameError"/>
</h:inputText>
<h:outputText id="nameError"
value="#{cc.attrs.managedBean.nameError}" style="color: red;font-style:
italic;"/>
</h:panelGroup>
...
</h:panelGrid>
12
12 WAS V7 最新動向WorkShop
13. JPA 2.0の新機能
エンティティーの構造とテーブルのマッピングの柔軟性向上
– derived(派生) ID
• 主キー列として、外部キーや外部キーとの複合キーを簡単に定義可能に
– リレーションにおけるMapオブジェクトのサポート強化
• ユニークな属性だけでなく、属性の複合や組み込み型、エンティティーをMapのキーに指定可能
– 組み込み(Embeddable)クラスのネストのサポート
– コレクション・マッピングの強化
• プリミティブ型と組み込みクラスのコレクションもフィールド指定可能
ベンダー依存プロパティーに優先する標準プロパティーの追加
– 悲観的ロックのサポート
– キャッシュ仕様の追加
社員テーブル
Criteria APIの追加 ID: 126
myoji: たなか
– タイプ・セーフなJPQLクエリーを作成 namae: よしお ID myoji namae
126 たなか よしお
Bean Validation(JSR-303)の統合 743 すずき はなこ
– フィールド値の妥当性検査 ID: 743
myoji: すずき 301 さとう たろう
– 例: @NotNull、@Max, @Pattern namae: はなこ
13
JPA 2.0はJPA 1.0を拡張し、より柔軟なORマッピングが可能に
14. JPA 2.0 ~ペシミスティック・ロックのサポート
オプティミスティック・ロック
– 他からのアクセスがないことを前提
– 更新対象が他のトランザクションによって書き換えら
れていないかをJPAエンジンがチェック データ読み取り
データ読み取り
– バージョン番号、最終更新時間によるチェック データ更新
データ更新
OptimisticLock
ペシミスティック・ロック Exception!
– 他からアクセスされる可能性を考慮したロック
– 更新対象に排他ロックをかけ、更新が終わるまで他
のトランザクションによる更新を禁止 Lock!
– JPA2.0から正式にサポート データ読み取り データ読み取り
– lockメソッドの実行時に引数として指定 データ更新
• LockModeType.PESSIMISTIC_WRITE データ読み取り
データ更新
entityManager.lock(person,
LockModeType.PESSIMISTIC_WRITE);
14
15. EJB 3.1 ~EJB Liteとパッケージの簡略化
EJB完全版
EJB Lite
– Web Profileで利用 EJB Lite
– 簡略化されたEJB Local Session Beans Message Driven Beans
Annotations / ejb-jar.xml EJB Component Web
Service Endpoints
CMT / BMT
RMI-IIOP Interoperability
Declarative Security
パッケージの簡略化 Interceptors
2.x/3.x Remote View
2.x Local View
– Webモジュールのみ。Jarは不要 JPA 2.0 Timer Service
– インターフェイスも不要 JTA 1.1 CMP / BMP
– JavaEE 5同様のパッケージングも可能
EJB 3.0
EJB 3.1
EJBSample_web.war
EJBSample.war
WEB-INF/web.xml
WEB-INF/classes/
com/ise/EJBSampleServlet.class WEB-INF/classes/
EJB 3.1 com/ise/EJBSampleServlet.class
EJBSample_ejb.jar com/ise/EJBSampleBean.class
com/ise/EJBSampleBean.class
com/ise/EJBSample.class
15
16. EJB 3.1 ~組み込み可能なEJBコンテナー
EJBはEJBコンテナーが必要なため、単体テストは困難だった
EJB 3.1からはJavaSEにEJBコンテナーを組み込んで使用可能
– JUnitなどを用いて単体テストが可能
– 開発向けの機能
public void testSayHello() {
Map map = new HashMap();
map.put(“EJBContainer.PROVIDER”,
”com.ibm.websphere.ejbcontainerEmbeddableContainerProvider”);
EJBContainer container = EJBContainer.createEJBContainer(map);
try{
Hello hello = (Hello)container.getContext().lookup(“java:global/hello/HelloBean”);
System.out.println(hello.sayHello());
catch(Exception e){
e.printStackTrace();
}
EJBContainerクラスのContextよりEJBをlookup
}
16
17. CDI (Contexts and Dependency Injection)
ServletでのDI
DIの仕様を
EJBでのDI
統合 CDI
Context
and
WebサービスでのDI
Dependency
Injection
ユーザー定義のDI
DIの機能を個別APIから分離
→ コンポーネント横断的なDIが利用可能
ビジネスロジック層とプレゼンテーション層の連携が容易に
17
18. CDIの使用例
import org.example.HelloService;
@WebServlet(name = "HelloWorld", urlPatterns = { "/HelloWorld" })
public class HelloWorld extends HttpServlet {
@Inject
HelloService helloService;
package org.example;
import javax.inject.Named;
@Named
public class HelloService {
public void sayHello() {
System.out.println("Hello!");
}
}
18
19. @SessionScoped
セッション内でデータ共有
CDI 1.0 ~スコープ @SessionScoped
public class Counter implements
スコープもアノテーションで表現 Serializable {
–@RequestScoped private int count = 0;
–@SessionScoped
–@ApplicationScoped @PostConstruct
private void init(){
@WebServlet(name="CounterServlet", System.out.println(“Init");
urlPatterns={"/CounterServlet"}) }
public class CounterServlet extends HttpServlet { @PreDestroy
private void destroy(){
@Inject System.out.println(“Destroy");
private test.cdi.Counter c; Inject ! }
@Override public int getCount(){
protected void doGet(HttpServletRequest request, return ++count;
HttpServletResponse response) }
throws ServletException, IOException { }
…
out.println("<p>" + c.getCount() + "人目のアクセス</p>");
19
20. Bean Validation 1.0
~アノテーションで実現するバリデーション
アノテーションを利用してバリデーションを実現
–Hiberbate Validatorなどが実現していた機能
–Bean、フィールド、プロパティに制限
–nullチェック、数値の範囲のチェックなどが容易に実現可能
javax.validation.constraintsに定義されたアノテーション
–@AssertFalse、@AssertTrue
–@DecimalMax、@DecimalMin、@Max、@Min
–@Digits
–@Future、@Past (Date、Calenderクラスで示される時間のチェック)
–@Null、@NotNull
–@Pattern (正規表現によるチェック)
–@Size (文字列の長さや配列の数)
20
21. JavaEEのカバレッジとアプリケーション移植性
User Application User Application
追加
Spring Framework等 CDI 1.0
MVC MVC
EJB3 EJB3.1
(JSP) 標準 (JSF2.0)
標準
O/R Map O/R Map
(JPA) (JPA2.0)
JavaEE 5 準拠 JavaEE 6 準拠
APサーバー APサーバー
21
22. Java EE 6採用のメリット
業界標準仕様であるためポータビリティが高い
– Java EE 6準拠のAPサーバーであれば稼働可能
• WAS V8.0 / WebLogic11c / GlassFish3.0 / JBoss7.0 / TomEE1.0など選択可
– 将来のバージョンアップに対する互換性
Java EE 5で不足していた機能の大幅拡充
– 従来Spring Framework等で補っていた機能のかなりの部分が標準機能として
取り込まれている
• CDI(Context and Dependency Injection)など
– APIの大幅強化
• JSF2.0 / JPA2.0 / Bean Validationなど
開発生産性向上
– 組み込みEJBコンテナによる単体テスト
– EJB3.1Lite(EJBをwarに含められる)
モジュール化への対応の容易さ
– アノテーションベース開発
– Webフラグメントなど
22
24. TomEEとは
http://openejb.apache.org/index.html
Java EE 6 Web Profile をTomcatベースで実装
–CDI: Apache OpenWebBeans
–EJB: Apache OpenEJB
–JPA: Apache OpenJPA
–JSF: Apache MyFaces
–JTA: Apache Geronimo Transaction
–Bean Validation: Apache Bean Validation
上位エディションとして TomEE+ もあり
–JAX-RS: Apache CXF
–JAX-WS: Apache CXF
–JMS: Apache ActiveMQ
–Connector: Apache Geronimo Connector
24
25. Java EE (Java Enterprise Edition)とは?
エンタープライズ・システムをJavaで構築するために必要となる一
連の機能を規定した仕様
– アプリケーション・サーバーの標準機能セットを定義する業界標準
– 最低限の基準(API)を規定することで、複数のAPサーバ間でのアプリ
ケーションの互換性や、スキルの共通化を実現するのが目的
Java EE = Java SE + エンタープライズ向け機能
– コンポーネント仕様(アプリケーション)
• Servlet/JSP: 画面
• EJB: ビジネスロジック
• Adapter: レガシー/パッケージ連携
– コンテナ・サービス(インフラ)
• JNDI: リソース管理
• JDBC: データベース接続
• JMS: 非同期メッセージング Web+DBのシステムではあ
• JTA: トランザクション管理 まり使われていない
• セキュリティ
25
25
26. 次のようなケースは要注意
非同期処理
–オンラインで処理を受け付けておいて、バックグラウンドで処理を実行する
場合など
–特に不揮発メッセージ(永続メッセージ)を扱う場合は注意
2フェーズコミット(XAトランザクション)
–2つ以上のDBにまたがってトランザクション処理を行う
–DBとメッセージングシステム(MQなど)にまたがってトランザクション処理を
行う
非機能要件が厳しい
–高負荷下での無停止運用
–アプリケーションが大容量ヒープメモリを要求
–障害発生時の厳密な原因究明
26
27. [WAS] パフォーマンス・モニタリングと問題判別機能
パフォーマンス状況を詳細にモニター可能
–パフォーマンス・ビューワー
• パフォーマンスの結果を管理コンソールに表示
• 必要なコンポーネントに対し、12段階で取得レベル設定可能。
• グラフ表示や表形式での表示、ロギングも可能
–パフォーマンス・アドバイザー
• パフォーマンス状況をモニターした結果、リソースの構成についてアドバイスしてくれる機能
• 管理コンソール上に推奨設定を表示
• スレッドプールやコネクションプールサイズの値をアドバイス
–要求メトリック
• Webサーバー、Webコンテナー、EJBコンテナーの各コンポーネントでの処理時間を記録し、ボトルネックを判断する
問題判別のための機能強化
–様々なログ・トレース機能
• JVMログ、プロセスログ、Thread Dump、Heap Dump、HTTPトランスポートログ、JDBCトレース、プラグインログ etc
–ハング・スレッドの検出機能
–メモリー・リークの検出機能
–クラスローダー・ビュワー
–問題判別に便利なツールの無償提供
リクエスト Web Web EJB
サーバー コンテナー コンテナー データベース
IPやURLによる
詳細なログやトレース、様々なツールの提供に フィルタリング
より、早期の問題解決をサポート
各コンポーネントにおける経過時間を把握可能
28. [WAS] High Performance Extensible Logging(HPEL)
問題判別のためのトレース取得負荷を大幅に軽減
–V7.0にくらべログ記録機能が6倍高速化
–V7.0にくらべトレース記録機能が3.8倍高速化
柔軟なログ・トレースデータの取り扱い
–コマンドラインのフィルター・整形ツールを提供
–管理コンソールのGUI画面からフィルター・整形が可能
–プログラムからアクセスするAPIを提供
既存のログ機能と共存する形で利用可能
例:
アプリケーションに対する警告レベル以上のメッセージを抽出:
# logViewer,sh -minLevel warning -includeLoggers “com.acme.app1.*”
2010/07/11以降で0x0000000cスレッドでSEC文字列から始まるメッセージを抽出:
# logViewer,sh –startDate 2010/07/11 –message “SEC*” –thread 0c
29. ハイ・パフォーマンスな64bit JavaVM(J9)の提供
64bit JavaVM: 巨大なヒープが確保できるが、64bit化オーバーヘッドが大
– 同じアプリケーションを32bit JavaVMで稼働させた場合に比べ、ヒープ利用量が数十%増加
– それに伴い、GCのオーバーヘッドが増加し、スループットに悪影響
IBM® SDK for Java 6 の64bit版では、オブジェクトのポインターを圧縮して
ヒープ利用量を削減する技術を投入
– ヒープ利用量とGCオーバヘッドを削減し、32bit JavaVMと遜色ないパフォーマンスを実現
ヒープサイズが約25GB程度まで適用可能
– 注)IBM JavaVMの固有機能であるため、Solaris/HP-UX版のWASでは未対応
64bit JavaVMのヒープ利用量削減率
(IBM Java5との比較)
64bit JavaVMのスループット改善率
(IBM Java5との比較)
29
30. 無償提供
IBM Health Center
JavaVMのリアルタイム・モニタリングと可視化を実現
オーバーヘッドが少なく、本番環境でも利用可能なJavaモニタリ
ング・ツール
– WAS V6.1(IBM Java 5 SR8以上)とWAS V7.0/V8.0(IBM Java 6 SR1以上)で利用可能
– ISAから起動可能
• http://www.ibm.com/developerworks/jp/java/library/j-ibmtools5/
機能
– パフォーマンス
• メソッド・プロファイル
• ロック分析
• GC状況の可視化と推奨オプション
– メモリー
• メモリーリーク検出
• ヒープサイズのガイド
– 環境
• システム・プロパティ-
• 環境変数
– クラスロード情報
• いつロードされたか
• キャッシュされたかどうか
31. AP仮想化ソリューション:WebSphere Virtual Enterprise
AP仮想化によるリソース有効活用と業務の優先度に応じたサービスレベル管理
サービスポリシーに ヘルスポリシーによ ルーティングポリシーに
Java VMリソースの動的配置
よる優先制御 る自動回復処理 よる条件ルーティング
優先度高
購入処理
AppEdition1
オンデマンド・ルーター
WebSphere Application Server
流量多
キュー 他社Java EEサーバー
Apache,PHP
買い物中 流量少
リクエスト キュー 優先度 目標平均
応答時間 AppEdition2
商品閲覧
優先度低 L1 最高 1秒
クライアント L2 高 3秒
L3 低 5秒
リクエストの 設定されたサービスポリシーに アプリケーション アプリケーションの複数のバージョンを
従ってリクエストを優先付け サーバー上で同時実行
Queuingによる アクセス集中時にも
エディション テストユーザーのみを新バージョンに割振り
過負荷防止 重要な処理を確実に実行 コントロール 本番環境でのテストも可能に
ヘルスモニタリング機能が 仮想化による 動的アプリケーション配置により
回復処理の 応答時間やCPU,メモリを監視
異常発生時に自動的に
サーバー資源の 負荷に応じてJava VM数を動的に変更
自動化 サーバーの剰余能力を最適利用
切り離し・再起動などを実行 有効利用
32. WAS V8.5 Liberty Profile
「手軽に使える」ことを目指した新しいWAS
– 開発環境でもプロダクション環境でも利用可能
– Mac OS X対応
インストールが簡単
– zipファイルを展開するだけ
– アプリケーションのデプロイも,ファイルをコピーするだけ
スモール・フットプリント
– 必要ディスク容量: 50MB程度
– 必要メモリ容量: 数十MB程度
– 高速起動: わずか数秒で起動
コンフィグレーションが簡単
– コンフィグレーションファイル(server.xml)で
必要なフィーチャー(Servlet,JPA,JSF等)を指定するだけ
– 内部的には必要なOSGiバンドルのみを組み合わせて実行
最新情報は http://wasdev.net から発信中!!
35. 急成長するモバイル市場
モバイルは新しいITの波
インターネットに接続するデバイスの増加
1200
WW タブレット
WW ノートPC
WW PC
WW スマートフォン
台数 (百万)
600
0
2010 2011 2012 2013 2014 2015
Source: Wells Fargo Securities, January 23, 2012
“Fostering the People: The Shift to Engagement Apps” インターネットによってWebやeビジネス
の波が押し寄せたように、現在、モバイ
2020年までには、世界で100億台 ルによる新しい波が起きている
のモバイル機器が使用される →全業種においてビジネス・チャンスに
35
36. モバイル・アプリケーションの特徴と課題
課題 ソリューション
特徴
開発生産性
様々な機種が混在 • OSごとに異なる開発言語が必要
• デバイス固有機能に対するスキル
• デバイス毎にテストする負荷が高い
スマートフォンやタブレット等多様なデバイス モバイル・エンタープラ
- 異なる画面サイズ
- デバイス固有機能の提供 アプリケーション管理 イズ・アプリケーション・
プラットフォーム
• アプリケーションが最新かどうか (MEAP)
様々なOSが混在 • リモートからアプリケーションを無効化できるか
iOS, Android, Blackberry, Windows Phone
等の複数プラットフォームが存在
企業システムとの連携
• エンタープライズ・システムとの統合
• マルチチャネル対応アプリケーションの構築
モバイル端末管理
セキュリティ (MDM)
• 暗号化や認証の仕組み
• デバイスの紛失や盗難への対応
端末管理
• デバイスの監視、管理
36 • デバイス上のソフトウェア更新、データ配布
37. モバイルとHTML5
PC(特に業務系)ではまだ採用の敷居が高い
–IEを標準ブラウザとしている企業が多数
–IE8以前では、HTML5のほとんどの機能に未対応
モバイルでは主要プラットフォームがHTML5 Ready
–iPhone/iPad
–Android
–(Windows8)
ただし、モバイル特有の事情を考慮する必要あり
–対応している仕様の偏り
–Video/Audioの非互換など
37
39. http://dev.w3.org/html5/spec/offline.html
Application Cache
Webアプリをオフラインで利用するために、リソースをクライアント
側でキャッシュするためのしくみ
–HTML,CSS,JavaScript,イメージなどURL指定できる全リソースが対象
–フォールバックやイベント処理が可能
キャッシュ対象リソースはマニフェストファイルで指定
–更新チェックはマニフェストファイルのみを確認
[clock.html]
[clock.manifest] <!DOCTYPE HTML>
<html manifest="clock.manifest">
CACHE MANIFEST <head>
<title>Clock</title>
# This is comment line <script src="clock.js"></script>
<link rel="stylesheet" href="clock.css">
clock.html
</head>
clock.css <body>
clock.js <p>The time is: <output id="clock"></output></p>
</body>
39 </html>
41. http://dev.w3.org/geo/api/spec-source.html
Geolocation API
デバイスの位置情報を取得するためのAPI
–緯度、経度、標高およびその精度
–デバイスの進行方向/進行速度
–位置情報取得時刻
シンプルなAPI
–現在位置を一度だけ取得
• getCurrentPosition(successCallback, errorCallback, options)
–位置情報を継続して監視
• watchPosition(successCallback, errorCallback, options)
• clearWatch(watchId)
–具体的な取得方法などは隠蔽されている(高レベルAPI)
function showMap(position) {
// (position.coords.latitude, position.coords.longitude)を中心にMap表示
}
// One-shot position request.
navigator.geolocation.getCurrentPosition(showMap);
41
43. Canvasサンプル
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Hello Canvas</title>
<script>//<![CDATA[
function draw() {
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.fillRect(20, 20, 80, 40); // 四角(塗りつぶしあり)
ctx.strokeRect(120, 20, 80, 40); // 四角(塗りつぶしなし)
ctx.arc(70, 150, 60, 0, Math.PI*2, false); // 円
var message = '文字も書けます';
ctx.font = "bold 18px 'MS P Gothic'";
var textWidth = ctx.measureText(message).width;
ctx.fillStyle = "black";
ctx.textBaseline = "top";
ctx.fillText(message, 0, 220);
ctx.stroke();
}
//]]></script>
</head>
<body onload="draw()">
<canvas id="canvas" width="300" height="300"></canvas>
</body>
</html>
43
44. Canvas: 参考情報
HTML5 Canvasのサンプル
–http://sites.google.com/site/gorogoronyan/Home/html5-iroiro/javascript
–実用的な使い方のヒントとして
Ball Pool
–http://mrdoob.com/projects/chromeexperiments/ball_pool/
–モバイルでも動作するインタラクティブな使い方のサンプルとして
44
46. http://dev.w3.org/csswg/css-device-adapt/#viewport-meta-element
XMLHttpRequest 2.0
クロスオリジンのリクエスト送信が可能に
–送信先サーバーの許可が必要
• Cross-Origin Resource Sharingに準拠
• http://dvcs.w3.org/hg/cors/raw-file/tip/Overview.html
文字列以外も送信可能に
–Blob / Document / FormData
進捗状況がモニター可能に
–uploadプロパティが追加された
–ダウンロード・アップロードの両方で進捗状況に応じたイベントが捕捉可能
• 進捗があるたびにonpregressイベントハンドラがコールバックされる
var xhrObj = new XMLHttpRequest();
xhrObj.upload.addEventListener("progress", progressFunction, false);
function progressFunction(evt){
var percentageDiv = document.getElementById("percentageCalc");
percentageDiv.innerHTML = Math.round(evt.loaded / evt.total * 100) + "%";
}
46
47. リモート・デバッグ: Weinre
モバイルWeb開発(特に実機デバッグ)を効率的に行うためのツール
リモートから、FirebugやGoogle Dev Toolのような操作が可能
– DOM/CSSインスペクタとオンザフライ編集
– JavaScriptコンソール
– ブレークポイント設定とステップ実行
PhoneGap(改めApache Cordova)のサブプロジェクト
– ドキュメントとバイナリ
• http://people.apache.org/~pmuellr/weinre/
– ソース
• https://github.com/apache/incubator-cordova-weinre
使い方など
– スマホの開発が超絶楽に! weinreでスマートフォンをPCでリモートデバッグ!
• http://css-eblog.com/tools/weinre.html
– スマートフォンサイト構築のためのリモートデバッグ環境その1 – weinre
• http://blog.alt-scape.com/archives/423
47
50. モバイル・アプリケーションのトレンド
Web ネイティブ・
アプリケーション アプリケーション
オープンな技術(HTML5, デバイス固有の機能を活
CSS, JavaScript)を使用。 用できるが、開発・テストの
開発生産性やポータビリ 負荷が高い。
ティは高いが、デバイス特
有の機能は使えない。
ハイブリッド・
アプリケーション
コードの大部分を再利用可能なWeb技術を使って開発。
デバイス依存の機能はネイティブ・コードで補完。
クロス・プラットフォーム 開発コスト ユーザビリティ
50 セキュリティ
51. ハイブリッド・アプリケーションとは
Webアプリケーションと
ネイティブ・アプリケー
Application File System ションの組み合わせ
Stores (on mobile
device) 基本的にはHTML5、CSS、
Native Container JavaScriptを使用するが、
デバイスの機能にもア
HTML, CSS, JavaScript
クセス可能
App StoreやAndroid Marketなどから
アプリケーションをダウンロードし、モバイ
ル・デバイス上にアプリケーションを保管 Mobile Operating System
する。
51
52. PhoneGap (Apache Cordova)
ハイブリッド・アプリケーションのプラットフォーム
–http://phonegap.com/
–http://incubator.apache.org/cordova/
Webブラウザ+プラグイン
–Webコード(HTML/CSS/JS)はWebブラウザコンポーネント上で実行
• トランスコードソリューションではなく、実行時もWebコードのまま
–WebコードからJavaScript経由でネィティブコードを実行可能(プラグイン)
–標準プラグインが豊富に存在し、独自拡張も可能
歴史的経緯
–PhoneGapを開発していたNitobiがAdobeに買収される
–PhoneGapのコアをApache Callbackプロジェクトに移管
–Apache CallbackプロジェクトがApache Cordovaプロジェクトに改名
• Apache CordovaにはAdobe以外にもIBM/RIM/Microsoftなどが協力
• PhoneGapはApache Cordovaの1ディストリビューションという位置づけに
• http://phonegap.com/2012/03/19/phonegap-cordova-and-what%E2%80%99s-in-a-
52
name/
55. IBM Worklight : モバイル・アプリケーション・プラットフォーム
Build once. Run anywhere.
HTML5、ハイブリッド、ネ – Android, iOS, Blackberry, Microsoft
– スマートフォンとタブレット
イティブ・アプリケーション
のための、オープンかつ 標準ベース、エンタープライズ対応
– PhoneGap, Java
先進的なモバイル・アプ –
–
アプリケーション配布
エンタープライズとの統合
リケーション・プラット –
–
セキュリティー
スケーラビリティ
フォーム – 管理
Build it today. Change it tomorrow.
– アプリケーション・ライフサイクル管理
– 保守とアップデート
55
56. Worklight のコンポーネント
Worklight Studio Eclipse ベース
コード再利用の最大化とデバイス毎の最適化を実現する包
括的で拡張性に優れた開発環境
Worklight ServerTomcat or WAS 上で稼働
統合通知、ランタイム・スキニング、バージョン管理、セキュ
リティー、統合、配布
Worklight Runtime Components
ネイティブのデバイス機能と連携可能な豊富なライブラリー
←
とクライアントAPI
Worklight Console
リアルタイム分析、および、モバイル・アプリケーションとイン
フラ管理のためのWebベースのコンソール
56
57. サポートする環境(Environment)
様々なタイプのプラットフォームに
対応
モバイル
– iPhone
– iPad
– Android
– BlackBerry
– Windows Phone
– Mobile web app
デスクトップ
– Windows 7 and Vista(ガジェット)
– Adobe AIR
– Mac OS Dashboard
Web アプリケーション
– Facebook
– iGoogle
– Embedded web page
57
58. Build and Deploy
基本部分は
commonに、
差分を個別
環境のフォル
ダへ
すべてのコードをビルドしてデプロイ
ネィティブSDK用のプロジェクトを生成
アプリケーション(Webコード)をWorklight Serverへデプロイ
58
59. Worklightのアプリケーション・タイプ
Webアプリ ハイブリッド(Web) ハイブリッド(Mixed) ネィティブアプリ
HTML5, JavaScript , ソースコードはWebと ユーザー固有のニー プラットフォーム固有。
CSS3で記述。高速か Worklightのライブラリ ズを実現するネィティ 固有のスキルを必要
つローコストで開発可 を含み、ネィティブの ブコードでWebを拡張 とし、開発にはコストと
能だが、機能性はネィ シェル内で実行される。 し、ユーザーエクスペ 時間がかかる。高いレ
ティブよりも劣る。 リエンスを最大化。 ベルのユーザーエク
スペリエンスを実現で
きる。
Mobile Browser Worklight Runtime Worklight Runtime Native
Application
1001010101011101001010
Web Code Web 0100101011101001001101
0101010100100100101111
Web Code <!DOCTYPE html Native
<!DOCTY 1001010 0010011001010101001010
PUBLIC PE html 1010111 1010100101010101010101
<!DOCTYPE html <html> 0100101
PUBLIC 0101011111100000101010
PUBLIC <! - - created 2003-12-1 0101010
created
<html> <head><title>XYZ</title 1010010 1010101001001010101010
2003-12
<! - - created 2003-12- </head> 0100101 1010001111010100011110
</p>
12 - - 1110010
</body> </body> 1010011101010111110010
<head><title>XYZ</title </html> 0110010
>
</html> 1101111010001011001110
</head>
<body>
</p>
</body>
</html>
Device APIs Device APIs Device APIs
59
60. ハイブリッド(Mixed)の利用イメージ
ハイブリッド(Mixed)
Webとネィティブの
ユーザー固有のニー ネィティ
画面混在 Web
ブ
Web
ズを実現するネィティ 画面 画面
ブコードでWebを拡張 画面
し、ユーザーエクスペ
リエンスを最大化。
共通のユーザーセッションとデータ
Worklight Client Runtime
Worklight Runtime
Web
Native
<!DOCTY 1001010
PE html 1010111
PUBLIC
created
0100101
0101010 Web
プラグイン(ドライバ)
2003-12 1010010
</p>
</body>
0100101
1110010
0110010
画面
による拡張
</html>
ネィティブ機能の
Worklight Client Runtime 呼出し
Device APIs
Worklight ユーザー
標準 独自
プラグイン プラグイン
60
62. Worklightのランタイム・アーキテクチャ
Worklight Server Device Runtime
Application Code
Server-side Client-side
Application Code App Resources
• Cross Platform Technology
Stats Aggregation
JSON Translation Direct Update
Mobile • Security and
Authentication Web Apps Authentication
• Back-end Data
Integration
Unified Push • Post-deployment control
Adapter Library
Notifications and Diagnostics
62
63. サーバーサイド・アダプター
• Worklight Platformはアダプターを利
用して様々なバックエンド・システム
への接続を実現 Query Response
Update
2 3 data
• アダプターの用途 SQL WS HTTP
• 情報の取得 Worklight
• アクション(ロジック)実行
1 Invoke Data/Result
adapter
procedure as JSON 4
• 標準提供アダプター
• SQL Adapter
• HTTP Adapter (RESTとSOAPに対応)
63
64. 柔軟なプッシュ通知のフレームワーク
iOSとAndroidに共通のAPI
1つのアプリケーションで、複数のデバイスに
対応
イベント・ソースとアプリケーション間での
Many-to-many リレーションシップ
同じバックエンドからの複数イベント・ソース
同じアプケーションへの複数ユーザーログイン
64
65. モバイル・アプリケーションのセキュリティ
デバイス上のデータの保護 強制セキュリティ・アップデート
起動時の
Secure
リモート 直接
暗号化され
Encrypted オフライン
Offline セキュア
challenge-
無効化 アップデート
たオフライン
offline cache 認証
authentication チャレンジ-レス
response on
キャッシュ
ポンス
startup
企業のセキュリティ・プロセスの効率化
アプリケー
App Jailbreak and
Jailbreakおよ
ションの真正
authenticity びマルウェア
malware
性テスト
testing の検出
detection 組織のサン
ドボックスと
してのシェル
堅固な認証・認可 アプリケーション・セキュリティ
認証統合 実証済みの
データ保護 デバイスidを SSLによる
フレームワー プラット コードの
ク
レルム 併用 サーバーの
フォーム・セ 難読化
検証
キュリティ
65
66. Direct Update: Worklight Serverから更新
版を直接配布
1.初期のオフライン実行を可能
にするため、Webリソースがア
Worklight Runtime
プリケーション内にパッケージ
1 ダウンロード ングされている
パッケージされ
たリソース
2.Webリソースはアプリケーショ
App Store
ンのキャッシュストレージに転
2 転送 送される
3 更新を確認 3.アプリケーションは更新を確認
する
キャッシュされ • 起動時
Worklight Web たリソース • フォアグラウンドになった時
Server リソース
4.必要であればWebリソースを
4 Webリソー ダウンロードして更新する
スを更新
66
67. PhoneGap(Cordova)とIBM Worklightの比較
PhoneGap Worklight
PhoneGapプラグイン
ネィティブ連携 PhoneGapプラグイン
+Worklightプラグイン
通常は不要
PhoneGapスキル 必要
プラグイン開発時のみ必要
プラットフォーム毎にソースを アプリ単位で複数プラットフォーム
クロスプラットフォーム対応
管理 のソース管理を共通化
改ざん・覗き見防止
セキュリティ機能 なし 暗号化ストレージ
認証フレームワーク
XMLHttpRequestなどを利用
バックエンド連携 アダプター
して独自に開発
Direct Update
アプリケーション更新 再インストール
(Webコードの部分のみ更新)
監視・分析 なし 管理コンソール
商用サポート なし あり
67
68. まとめ
Javaアプリケーションサーバー最新動向
–Java EE 6は実用フェーズに
–APサーバー選択はケースバイケースで
• そろそろTomcat以外も見ておいた方がよいです
ハイブリッド・モバイル・アプリケーション
–モバイル・デバイスは急成長中のプラットフォーム
–HTML5の活用はモバイルWebから
–モバイル・アプリケーションの課題解決にはハイブリッ
ド・アプリケーションによるアプローチが有効
68