ぽんぽこバレー勉強会 20120427

3,057 views

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,057
On SlideShare
0
From Embeds
0
Number of Embeds
72
Actions
Shares
0
Downloads
22
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

ぽんぽこバレー勉強会 20120427

  1. 1. ぽんぽこバレー勉強会Javaアプリケーションサーバー最新動向/ハイブリッド・モバイル・アプリケーション 2012年 4月 27日 日本アイ・ビー・エム株式会社 ソフトウェア事業 WebSphere事業部 須江 信洋(nsue@jp.ibm.com)
  2. 2. 自己紹介 須江 信洋(すえ のぶひろ) –日本IBMにてミドルウェアのテクニカルセールスを担当 • 2000年頃からJavaEE関連の仕事 • 今年からモバイル関連製品も担当 –Twitter: @nobusue –http://www.facebook.com/profile.php?id=732337788 コミュニティ活動 –Groovyコミュニティ(JGGUG)サポートスタッフ • 「プログラミングGROOVY」執筆チーム • 「Groovy イン・アクション」翻訳チーム –日本Javaユーザーグループ(JJUG)幹事 –その他 • SCM BootCamp • 「継続的デリバリー」読書会2
  3. 3. AgendaJavaアプリケーションサーバー最新動向 –Java EE6でのアップデート –OSSと商用製品の使い分けのポイントハイブリッド・モバイル・アプリケーション –モバイルWeb –PhoneGap / Apache Cordova –IBM Worklight3
  4. 4. Java APサーバー 最新動向4
  5. 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. 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.06
  7. 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. 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. 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. 10. Servlet 3.0 ~非同期処理 非同期リクエスト処理用のモデルを提供 Servletの実行スレッドを早期解放 非同期処理を行うスレッドはリクエストの情報を保有し、レスポンスを返す Servlet Servlet 別スレッド doGet() doGet() startAsync(req,resp) + start() 時間の かかる Servlet 3.0 時間の 処理 かかる 処理 response response10
  11. 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. 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>1212 WAS V7 最新動向WorkShop
  13. 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. 14. JPA 2.0 ~ペシミスティック・ロックのサポート オプティミスティック・ロック – 他からのアクセスがないことを前提 – 更新対象が他のトランザクションによって書き換えら れていないかをJPAエンジンがチェック データ読み取り データ読み取り – バージョン番号、最終更新時間によるチェック データ更新 データ更新 OptimisticLock ペシミスティック・ロック Exception! – 他からアクセスされる可能性を考慮したロック – 更新対象に排他ロックをかけ、更新が終わるまで他 のトランザクションによる更新を禁止 Lock! – JPA2.0から正式にサポート データ読み取り データ読み取り – lockメソッドの実行時に引数として指定 データ更新 • LockModeType.PESSIMISTIC_WRITE データ読み取り データ更新 entityManager.lock(person, LockModeType.PESSIMISTIC_WRITE);14
  15. 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.class15
  16. 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. 17. CDI (Contexts and Dependency Injection) ServletでのDI DIの仕様を EJBでのDI 統合 CDI Context and WebサービスでのDI Dependency Injection ユーザー定義のDI  DIの機能を個別APIから分離 → コンポーネント横断的なDIが利用可能  ビジネスロジック層とプレゼンテーション層の連携が容易に17
  18. 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. 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. 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. 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. 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
  23. 23. http://www.oracle.com/technetwork/java/javaee/overview/compatibility-jsp-136984.htmlJava EE 6対応 APサーバー (2012/4/27) Full Profile Web Profile23
  24. 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 Connector24
  25. 25. Java EE (Java Enterprise Edition)とは?  エンタープライズ・システムをJavaで構築するために必要となる一 連の機能を規定した仕様 – アプリケーション・サーバーの標準機能セットを定義する業界標準 – 最低限の基準(API)を規定することで、複数のAPサーバ間でのアプリ ケーションの互換性や、スキルの共通化を実現するのが目的  Java EE = Java SE + エンタープライズ向け機能 – コンポーネント仕様(アプリケーション) • Servlet/JSP: 画面 • EJB: ビジネスロジック • Adapter: レガシー/パッケージ連携 – コンテナ・サービス(インフラ) • JNDI: リソース管理 • JDBC: データベース接続 • JMS: 非同期メッセージング Web+DBのシステムではあ • JTA: トランザクション管理 まり使われていない • セキュリティ2525
  26. 26. 次のようなケースは要注意 非同期処理 –オンラインで処理を受け付けておいて、バックグラウンドで処理を実行する 場合など –特に不揮発メッセージ(永続メッセージ)を扱う場合は注意 2フェーズコミット(XAトランザクション) –2つ以上のDBにまたがってトランザクション処理を行う –DBとメッセージングシステム(MQなど)にまたがってトランザクション処理を 行う 非機能要件が厳しい –高負荷下での無停止運用 –アプリケーションが大容量ヒープメモリを要求 –障害発生時の厳密な原因究明26
  27. 27. [WAS] パフォーマンス・モニタリングと問題判別機能 パフォーマンス状況を詳細にモニター可能 –パフォーマンス・ビューワー • パフォーマンスの結果を管理コンソールに表示 • 必要なコンポーネントに対し、12段階で取得レベル設定可能。 • グラフ表示や表形式での表示、ロギングも可能 –パフォーマンス・アドバイザー • パフォーマンス状況をモニターした結果、リソースの構成についてアドバイスしてくれる機能 • 管理コンソール上に推奨設定を表示 • スレッドプールやコネクションプールサイズの値をアドバイス –要求メトリック • Webサーバー、Webコンテナー、EJBコンテナーの各コンポーネントでの処理時間を記録し、ボトルネックを判断する 問題判別のための機能強化 –様々なログ・トレース機能 • JVMログ、プロセスログ、Thread Dump、Heap Dump、HTTPトランスポートログ、JDBCトレース、プラグインログ etc –ハング・スレッドの検出機能 –メモリー・リークの検出機能 –クラスローダー・ビュワー –問題判別に便利なツールの無償提供 リクエスト Web Web EJB サーバー コンテナー コンテナー データベース IPやURLによる 詳細なログやトレース、様々なツールの提供に フィルタリング より、早期の問題解決をサポート 各コンポーネントにおける経過時間を把握可能
  28. 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. 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. 30. 無償提供IBM Health CenterJavaVMのリアルタイム・モニタリングと可視化を実現 オーバーヘッドが少なく、本番環境でも利用可能な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. 31. AP仮想化ソリューション:WebSphere Virtual EnterpriseAP仮想化によるリソース有効活用と業務の優先度に応じたサービスレベル管理 サービスポリシーに ヘルスポリシーによ ルーティングポリシーに Java VMリソースの動的配置 よる優先制御 る自動回復処理 よる条件ルーティング 優先度高 購入処理 AppEdition1 オンデマンド・ルーター WebSphere Application Server 流量多 キュー 他社Java EEサーバー Apache,PHP 買い物中 流量少 リクエスト キュー 優先度 目標平均 応答時間 AppEdition2 商品閲覧 優先度低 L1 最高 1秒 クライアント L2 高 3秒 L3 低 5秒 リクエストの 設定されたサービスポリシーに アプリケーション アプリケーションの複数のバージョンを 従ってリクエストを優先付け サーバー上で同時実行 Queuingによる アクセス集中時にも エディション テストユーザーのみを新バージョンに割振り 過負荷防止 重要な処理を確実に実行 コントロール 本番環境でのテストも可能に ヘルスモニタリング機能が 仮想化による 動的アプリケーション配置により 回復処理の 応答時間やCPU,メモリを監視 異常発生時に自動的に サーバー資源の 負荷に応じてJava VM数を動的に変更 自動化 サーバーの剰余能力を最適利用 切り離し・再起動などを実行 有効利用
  32. 32. WAS V8.5 Liberty Profile 「手軽に使える」ことを目指した新しいWAS – 開発環境でもプロダクション環境でも利用可能 – Mac OS X対応 インストールが簡単 – zipファイルを展開するだけ – アプリケーションのデプロイも,ファイルをコピーするだけ スモール・フットプリント – 必要ディスク容量: 50MB程度 – 必要メモリ容量: 数十MB程度 – 高速起動: わずか数秒で起動 コンフィグレーションが簡単 – コンフィグレーションファイル(server.xml)で 必要なフィーチャー(Servlet,JPA,JSF等)を指定するだけ – 内部的には必要なOSGiバンドルのみを組み合わせて実行 最新情報は http://wasdev.net から発信中!!
  33. 33. とにかく起動が早いです。ぜひお試しを! 詳細はInformation Center(beta)をご参照ください – http://www14.software.ibm.com/webapp/wsbroker/redirect?version=p hil&product=was-nd-dist&topic=cw4d_about – http://www14.software.ibm.com/webapp/wsbroker/redirect?version=p hil&product=was-nd-dist&topic=tw4d_setup
  34. 34. ハイブリッド・モバイル・ アプリケーション34
  35. 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. 36. モバイル・アプリケーションの特徴と課題 課題 ソリューション 特徴 開発生産性 様々な機種が混在 • OSごとに異なる開発言語が必要 • デバイス固有機能に対するスキル • デバイス毎にテストする負荷が高いスマートフォンやタブレット等多様なデバイス モバイル・エンタープラ- 異なる画面サイズ- デバイス固有機能の提供 アプリケーション管理 イズ・アプリケーション・ プラットフォーム • アプリケーションが最新かどうか (MEAP) 様々なOSが混在 • リモートからアプリケーションを無効化できるかiOS, Android, Blackberry, Windows Phone等の複数プラットフォームが存在 企業システムとの連携 • エンタープライズ・システムとの統合 • マルチチャネル対応アプリケーションの構築 モバイル端末管理 セキュリティ (MDM) • 暗号化や認証の仕組み • デバイスの紛失や盗難への対応 端末管理 • デバイスの監視、管理 36 • デバイス上のソフトウェア更新、データ配布
  37. 37. モバイルとHTML5 PC(特に業務系)ではまだ採用の敷居が高い –IEを標準ブラウザとしている企業が多数 –IE8以前では、HTML5のほとんどの機能に未対応 モバイルでは主要プラットフォームがHTML5 Ready –iPhone/iPad –Android –(Windows8) ただし、モバイル特有の事情を考慮する必要あり –対応している仕様の偏り –Video/Audioの非互換など37
  38. 38. http://mobilehtml5.org/多くの端末がサポートしているHTML5仕様Application CacheWeb StorageGeolocationCanvasViewport definitionXMLHttpRequest 2.038
  39. 39. http://dev.w3.org/html5/spec/offline.htmlApplication 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>
  40. 40. http://dev.w3.org/html5/webstorage/Web Storage クライアント側でデータを永続化しておくためのストレージ –シンプルなKey-Valueストレージ –手軽に利用できる –複雑・大量データを扱うのには不向き Cookieとの違い –JavaScriptオブジェクトがそのまま格納できる –自動的にサーバーに送信されない –(仕様上は)サイズ制限がない –有効期限という概念がない 用途によって2種類を使い分ける –localStorage • Webサイトのオリジンごとに分離 • 永続期間は無制限 –sessionStorage • window(ブラウジングコンテキスト)と同じスコープを持ち、オリジンごとに分離 • windowが閉じられると削除される40
  41. 41. http://dev.w3.org/geo/api/spec-source.htmlGeolocation 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
  42. 42. http://dev.w3.org/html5/spec/the-canvas-element.htmlCanvas ブラウザ上でグラフィックスを自由に描画できる領域 –四角形、直線、円弧、ベジェ曲線 –画像 –グラデーション、影付け、重ね合わせ –テキスト –グラフィックス変形 –ピクセル操作による描画 描画コンテキストの保存/復元 画像データをURLとして取得 –toDataURL()によりbase64文字列に変換可能42
  43. 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. 44. Canvas: 参考情報 HTML5 Canvasのサンプル –http://sites.google.com/site/gorogoronyan/Home/html5-iroiro/javascript –実用的な使い方のヒントとして Ball Pool –http://mrdoob.com/projects/chromeexperiments/ball_pool/ –モバイルでも動作するインタラクティブな使い方のサンプルとして44
  45. 45. http://dev.w3.org/csswg/css-device-adapt/#viewport-meta-elementViewport definition ブラウザの表示サイズを制御 –コンテンツの横幅/縦幅 –初期倍率/最少倍率/最大倍率 –拡大縮小の可否 <meta name=“viewport” …>で指定 –コンテンツ内容に合わせてviewportを最適化 • http://www.mdn.co.jp/di/articles/2434/?page=8 viewport以外のiOS系固有のチューニングについてはこちら –iPhone 3G DevWiki -画面表示関係 • http://wiki.sohaya.com/index.php/%E7%94%BB%E9%9D%A2%E8%A1%A8%E7%A 4%BA%E9%96%A2%E4%BF%8245
  46. 46. http://dev.w3.org/csswg/css-device-adapt/#viewport-meta-elementXMLHttpRequest 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. 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/42347
  48. 48. Weinre実行例: コンソール48
  49. 49. Weinre実行例: デバッグ49
  50. 50. モバイル・アプリケーションのトレンド Web ネイティブ・ アプリケーション アプリケーション オープンな技術(HTML5, デバイス固有の機能を活 CSS, JavaScript)を使用。 用できるが、開発・テストの 開発生産性やポータビリ 負荷が高い。 ティは高いが、デバイス特 有の機能は使えない。 ハイブリッド・ アプリケーション コードの大部分を再利用可能なWeb技術を使って開発。 デバイス依存の機能はネイティブ・コードで補完。 クロス・プラットフォーム 開発コスト ユーザビリティ50 セキュリティ
  51. 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. 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/
  53. 53. PhoneGap: 幅広いプラットフォームに対応53
  54. 54. PhoneGap: プラグインの利用例 ネットワークの回線種別を判定54 http://docs.phonegap.com/en/1.6.1/cordova_connection_connection.md.html#Connection
  55. 55. IBM Worklight : モバイル・アプリケーション・プラットフォーム  Build once. Run anywhere. HTML5、ハイブリッド、ネ – Android, iOS, Blackberry, Microsoft – スマートフォンとタブレット イティブ・アプリケーション のための、オープンかつ  標準ベース、エンタープライズ対応 – PhoneGap, Java 先進的なモバイル・アプ – – アプリケーション配布 エンタープライズとの統合 リケーション・プラット – – セキュリティー スケーラビリティ フォーム – 管理  Build it today. Change it tomorrow. – アプリケーション・ライフサイクル管理 – 保守とアップデート55
  56. 56. Worklight のコンポーネント Worklight Studio Eclipse ベース コード再利用の最大化とデバイス毎の最適化を実現する包 括的で拡張性に優れた開発環境 Worklight ServerTomcat or WAS 上で稼働 統合通知、ランタイム・スキニング、バージョン管理、セキュ リティー、統合、配布 Worklight Runtime Components ネイティブのデバイス機能と連携可能な豊富なライブラリー ← とクライアントAPI Worklight Console リアルタイム分析、および、モバイル・アプリケーションとイン フラ管理のためのWebベースのコンソール56
  57. 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 page57
  58. 58. Build and Deploy 基本部分は commonに、 差分を個別 環境のフォル ダへ すべてのコードをビルドしてデプロイ ネィティブSDK用のプロジェクトを生成 アプリケーション(Webコード)をWorklight Serverへデプロイ58
  59. 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 APIs59
  60. 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
  61. 61. 主要なライブラリ/ツールとの統合 Worklightは主要なHTML5ライブラリ/ツールと統合可能:61
  62. 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 Diagnostics62
  63. 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. 64. 柔軟なプッシュ通知のフレームワーク iOSとAndroidに共通のAPI 1つのアプリケーションで、複数のデバイスに 対応 イベント・ソースとアプリケーション間での Many-to-many リレーションシップ 同じバックエンドからの複数イベント・ソース 同じアプケーションへの複数ユーザーログイン64
  65. 65. モバイル・アプリケーションのセキュリティ デバイス上のデータの保護 強制セキュリティ・アップデート 起動時の Secure リモート 直接 暗号化され Encrypted オフライン Offline セキュア challenge- 無効化 アップデート たオフライン offline cache 認証 authentication チャレンジ-レス response on キャッシュ ポンス startup 企業のセキュリティ・プロセスの効率化 アプリケー App Jailbreak and Jailbreakおよ ションの真正 authenticity びマルウェア malware 性テスト testing の検出 detection 組織のサン ドボックスと してのシェル 堅固な認証・認可 アプリケーション・セキュリティ 認証統合 実証済みの データ保護 デバイスidを SSLによる フレームワー プラット コードの ク レルム 併用 サーバーの フォーム・セ 難読化 検証 キュリティ65
  66. 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. 67. PhoneGap(Cordova)とIBM Worklightの比較 PhoneGap Worklight PhoneGapプラグイン ネィティブ連携 PhoneGapプラグイン +Worklightプラグイン 通常は不要 PhoneGapスキル 必要 プラグイン開発時のみ必要 プラットフォーム毎にソースを アプリ単位で複数プラットフォーム クロスプラットフォーム対応 管理 のソース管理を共通化 改ざん・覗き見防止 セキュリティ機能 なし 暗号化ストレージ 認証フレームワーク XMLHttpRequestなどを利用 バックエンド連携 アダプター して独自に開発 Direct Update アプリケーション更新 再インストール (Webコードの部分のみ更新) 監視・分析 なし 管理コンソール 商用サポート なし あり67
  68. 68. まとめJavaアプリケーションサーバー最新動向 –Java EE 6は実用フェーズに –APサーバー選択はケースバイケースで • そろそろTomcat以外も見ておいた方がよいですハイブリッド・モバイル・アプリケーション –モバイル・デバイスは急成長中のプラットフォーム –HTML5の活用はモバイルWebから –モバイル・アプリケーションの課題解決にはハイブリッ ド・アプリケーションによるアプローチが有効68

×