Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Java EE 6で復活するエンタープライズJavaの世界

7,783 views

Published on

JJUC CCC 2010 Springでの発表資料です。

Published in: Technology

Java EE 6で復活するエンタープライズJavaの世界

  1. 1. ® Java EE 6で復活する エンタープライズJavaの世界 2010/5/18 日本IBM株式会社 ソフトウェア事業 WebSphereクライアント・テクニカル・プロフェッショナルズ 田中 孝清 © 2010 IBM Corporation
  2. 2. IBM Software Group Enterprise Javaの歴史 の Seasar 2009/12 Spring SCA Hibernate SDO Ajax 2006/3 Portlets Java EE 6 • Profile BPEL 2003/11 Web Profile Java EE 5 • EJB 3.1 • EJB 3 / JPA Interceptors Struts POJO • JPA 2.0 2001/9 JPQLの拡張 • Servlet 2.5 J2EE 1.4 • JSP 2.1 • Web Beans 1.0 1999/12 • EJB 2.1 Unified EL • Bean Validation 1.0 タイマー • JSF 1.2 • Common Annotation J2EE 1.3 EJB-QL拡張 • JSTL 1.2 • Servlet 3.0 • EJB 2.0 • Servlet 2.4 • Webサービス • JSP 2.2 / EL 2.2 ローカルEJB • JSP 2.0 JAX-WS • JSF 2.0 abs. CMP • Webサービス POJO • JSTL 1.2 J2EE 1.2 MDB JAX-RPC JAXB • Webサービス • EJB 1.1 • Servlet 2.3 • JMX Mgmt StAX JAX-RS • Servlet 2.2 EJB 1.0 イベント • J2EE Deployment MTOM • JSP 1.1 Servlet 2.1 フィルター • JACC • アノテーション • JMS 軽量化 • JavaMail • JSP 1.2 IoC(制御の反転) XML • JAXP 拡張性 開発容易性 • Connectors • JAAS 開発容易性 2
  3. 3. IBM Software Group ついに2009年12月に承認 Java EE 6 ついに 年 月 ・・・難産でした http://jcp.org/en/jsr/results?id=5025 3
  4. 4. IBM Software Group ついに2009年12月に承認 Java EE 6 ついに 年 月 ・・・難産でした Intel Corp. voted Abstain Intel Corp. voted Abstain We were not satisfied with some of the information We were not satisfied with some of the information accompanying this ballot and have informed the Spec accompanying this ballot and have informed the Spec Lead. No technical issues. It's a good spec. Lead. No technical issues. It's a good spec. IBM voted Yes IBM voted Yes IBM's vote is based on the technical merits of this JSR and is not a vote on IBM's vote is based on the technical merits of this JSR and is not a vote on the licensing terms. IBM supports licensing models that create an open the licensing terms. IBM supports licensing models that create an open and level playing field by allowing third parties to create independent and level playing field by allowing third parties to create independent implementations of Java Specifications and that do not allow individuals or implementations of Java Specifications and that do not allow individuals or companies to exercise unnecessary control for proprietary advantage. We companies to exercise unnecessary control for proprietary advantage. We support open source as a licensing model for contributions in the JCP, and support open source as a licensing model for contributions in the JCP, and would hope others will support this direction. would hope others will support this direction. http://jcp.org/en/jsr/results?id=5025 4
  5. 5. IBM Software Group 他にもいろいろありました POJOをベースとした新しいServlet APIの提出と揺り戻し 「JSR 299 Web Beans」に対抗して Google/Springから出された「JSR 330 Dependency Injection for Java」 「Java EE終了のお知らせ」(2009-05-09) 「Java EE終了のお知らせ」(2009-05-09) ひがやすを氏 ひがやすを氏 との声も・・・ しかし,様々な困難を乗り越え,新しいJava EEは承認されました 苦労の甲斐あって,いい仕様です 5
  6. 6. IBM Software Group 仕様の Java EE 6仕様の全体像 仕様 6
  7. 7. IBM Software Group 主要な Java EE 6 の主要なゴール 軽量化:Right Sizing – 柔軟なテクノロジースタック/Webプロファイル – "Pruning dead wood" 拡張性 さらなる開発容易性:Ease of Development – EJBにつづきServletもアノテーションベースに – CDI (Contexts and Dependency Injection) 機能の大幅な 機能の大幅な強化 プレゼンテーション層の強化 –Web 2.0への対応 / Servlet 3.0,JSF 2.0,JAX-RS 永続化の機能強化 –JPA 2.0,Bean Validation 7
  8. 8. IBM Software Group 柔軟なテクノロジースタック 柔軟な Java EE 「Profile」の導入 – Java EEのサブセットをProfileとして定義 Web • Java EEの仕様群の全部もしくは一部だけをふくむ – Java EEコンテナを提供するプロバイダーは, 特定のプロファイルを選択して実装することが可能 • Java EEの全ての仕様を実装しなくてもJava EE認定が受けられる – ユーザーは,必要な機能だけを実装したコンテナを選択することが可能 Java EE 6の策定時点で定義されているプロファイル – Java EE Profile • 定義されている,ほぼ全ての仕様を実装 – Web Profile • Webアプリケーションの実行に必要な仕様だけを実装 8
  9. 9. IBM Software Group プロファイル登場の背景 プロファイル登場の 登場 肥大化したJava EE仕様 Java EE 6 Java SE EJB 3.1 JACC 1.3 Servlet 3.0 JASPIC 1.0 Java IDL JSP 2.2 JSP Debugging 1.0 JDBC EL 1.2 JSTL 1.2 RMI-IIOP JMS 1.1 Web Services Metadata 2.0 JNDI JTA 1.1 JSF 2.0 JAXP JavaMail 1.4 Common Annotations 1.1 StAX 1.0 Connector 1.6 Java Persistence 2.0 JAAS Web Services 1.3 Bean Validation 1.0 JMX JAX-RPC 1.1 Managed Beans 1.0 JAX-WS 2.2 JAX-RS 1.1 Interceptors 1.1 JAXB 2.2 JAXR 1.0 DI(JSR-299) 1.0 JAF Java EE Management 1.1 CDI(JSR-330) 1.0 SAAJ 1.3 Java EE Deployment 1.2c Common Annotations 1.1 9
  10. 10. IBM Software Group に まれる仕様 Web Profileに含まれる仕様 Java EE Profile Web Profile Web Application Technologies Web Services Technologies JSR 315: Java Servlet 3.0 JSR 311: JAX-RS: The Java API JSR 314: JavaServer Faces (JSF) 2.0 for RESTful Web Services 1.1 JSR 245: JavaServer Pages 2.2 JSR 109: Implementing Enterprise Web Services 1.3 and Expression Language (EL) 1.2 JSR 224: Java API for XML-Based サーブレット/JSP基本機能だけでなく JSR 52: A Standard Tag Library for JavaServer Pages 1.2 Web Services (JAX-WS) 2.2 JSR-45: Debugging Support for Other Languages 1.0 ・トランザクション・サービス JSR 222: Java Architecture ・(リモート呼び出しのない)EJB for XML Binding (JAXB) 2.2 Enterprise Application Technologies JSR 181: Web Services Metadata ・DBへの永続化を行うJPA仕様 for the Java Platform JSR 299: Contexts and Dependency Injection for the Java EE Platform 1.0 JSR 101: Java APIs for XML based RPC 1.1 も含まれている JSR 67: Java APIs for XML Messaging 1.3 JSR 330: Dependency Injection for Java JSR 318: Enterprise JavaBeans 3.1 (EJB Lite) JSR 93: Java API for JSR 317: Java Persistence API 2.0 XML Registries 1.0 (JAXR) 1.0 JSR 250: Common Annotations for the Java Platform 1.1 JSR 907: Java Transaction API (JTA) 1.1 Management and Security Technologies JSR 303: Bean Validation 1.0 JSR 196: Java Authentication Service Provider Interface for Containers 1.0 JSR 318: Enterprise JavaBeans 3.1 JSR 115: Java Authorization JSR 322: Java EE Connector Architecture 1.6 Contract for Containers 1.3 JSR 914: Java Message Service (JMS) API 1.1 JSR 88: Java EE Application Deployment 1.2 JSR 919: JavaMail 1.4 JSR 77: J2EE Management 1.1 10
  11. 11. IBM Software Group "Pruning dead wood" 古い仕様を将来のバージョンで 削除することを予告 – Deprecate EJB Entity beans – Deprecate JAX-RPC – Deprecate JSR-88 J2EE Deployment – Deprecate JAX-R 追加・追加で肥大化してきた仕様を より適切なサイズに 11
  12. 12. IBM Software Group さらなるEase of Development さらなる EJBに続きServletもアノテーションに WebServlet(name=”MyServlet”, urlPatterns={"/foo", "/bar"}) @@WebServlet(name=”MyServlet”, urlPatterns={"/foo", "/bar"}) public class SampleUsingAnnotationAttributes extends HttpServlet{ public class SampleUsingAnnotationAttributes extends HttpServlet{ public void doGet(HttpServletRequest req, HttpServletResponse res) {{ public void doGet(HttpServletRequest req, HttpServletResponse res) – web.xml (構成ファイル)はオプション Dependency Injectionのためのアノテーション仕様も標準化 – JSR 299: Contexts and Dependency Injection for the Java EE Platform 1.0 – JSR 330: Dependency Injection for Java 二つの大きな流れ • 設定情報はデプロイメントディスクリプタではなくJavaソースに • Javaコード中に初期化コードはかかない 12
  13. 13. IBM Software Group Dependency Injection private DataSource ds; private DataSource ds; InitialContext ic == new InitialContext(); InitialContext ic new InitialContext(); ds == (DataSource)ic.lookup("java:comp/env/jdbc/MyDS"); ds (DataSource)ic.lookup("java:comp/env/jdbc/MyDS"); Connection con == ds.getConnection(); Connection con ds.getConnection(); 「初期化コード」から「DI」へ Resource(name == "jdbc/MyDS") @@Resource Resource Resource(name "jdbc/MyDS") private DataSource ds; private DataSource ds; オープンソース・フレームワークである Spring FrameworkやSeasar2が 切り開いた分野 13
  14. 14. IBM Software Group Injection) CDI (Contexts and Dependency Injection) ServletでのDI ServletでのDI での CDI DIの仕様を 統合 EJBでのDI EJBでのDI での Context and WebサービスでのDI WebサービスでのDI サービスでの Dependency Injection ユーザー定義の ユーザー定義のDI 定義 DIの機能をコンテナから分離 → Java SEでも使用可能 ビジネスロジック層とプレゼンテーション層の連携が容易に 14
  15. 15. IBM Software Group CDIの使用例 の import org.example.HelloService; import org.example.HelloService; WebServlet(name == "HelloWorld", urlPatterns == {{ "/HelloWorld" }) @@WebServlet WebServlet WebServlet(name "HelloWorld", urlPatterns "/HelloWorld" }) public class HelloWorld extends HttpServlet {{ public class HelloWorld extends HttpServlet @Inject HelloService helloService; @Inject HelloService helloService; package org.example; package org.example; import javax.inject.Named; import javax.inject.Named; @Named @Named public class HelloService {{ public class HelloService public void sayHello() {{ public void sayHello() System.out.println("Hello!"); System.out.println("Hello!"); }} }} 15
  16. 16. IBM Software Group 強化された 強化されたServlet仕様 された 仕様 メジャー・バージョンアップ! (Version 2.5 → 3.0) 新機能も盛りだくさん – 構成のためのアノテーション大量追加 – 非同期処理のサポート – 複数構成ファイル(web-fragment.xml)の導入 – HTTPServletRequestにログインとログアウト処理を実現する機能 – Servletおよびフィルタを動的に追加するメソッド ServletContext#addFilter, ServletContext#addServlet登場 – multipart/form-data形式のリクエストに対応(Partクラスの追加) 16
  17. 17. IBM Software Group Servletの非同期処理サポート の非同期処理サポート 従来のServlet Servlet 3.0の非同期処理 Serlvet実行スレッドを 早期に解放して Servlet Servlet 処理のスケーラビリティを 別スレッド 維持 doGet() doGet() startAsync() + start() 非同期処理を行う スレッドからも HttpServletRequstや HttpServletResponse 時間の などのオブジェクトに かかる 時間の アクセスが可能 処理 かかる 処理 様々な応用 – Commetアプリ – 長時間のDBアクセス – メッセージングの response response 結果を待つ アプリケーション 17
  18. 18. IBM Software Group multipart/form-dataのサポート の FileUploadサーブレットも簡単に! サイズの制限も可能 @WebServlet("/upload") @WebServlet("/upload") @MultipartConfig(maxFileSize=1000000) @MultipartConfig(maxFileSize=1000000) public class MyUploadServlet extends HttpServlet {{ public class MyUploadServlet extends HttpServlet @Override @Override protected void doPost(HttpServletRequest request, protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {{ HttpServletResponse response) throws ServletException, IOException response.setContentType("text/plain; charset=UTF-8"); response.setContentType("text/plain; charset=UTF-8"); PrintWriter out == response.getWriter(); PrintWriter out response.getWriter(); for (Part pp :: request.getParts() {{ Part for (Part Part request.getParts()) () request.getParts() request.getParts()()) out.write("Part name: "" ++ p.getName()); out.write("Part name: p.getName()); out.write("Size: "" ++ p.getSize()); out.write("Size: p.getSize()); out.write("Content Type: "" ++ p.getContentType()); out.write("Content Type: p.getContentType()); }} 18
  19. 19. IBM Software Group な サービス RESTfullなWebサービス リソースは一意なURIをもつ – 例:http://api.server.example.com/repository/user/E12345 リソースに対する操作をHTTPのメソッドで表現する –GET: 読み取り –PUT/POST:作成/更新 –DELETE: 削除 Statelessな呼び出しプロトコル 19
  20. 20. IBM Software Group JAX-RS RESTfull Webサービスを実現するAPIの標準化(JAX-RS) – サーブレットを使わないWebアプリケーションも可能 @Path("repository") @Path("repository") public class TestRepositoryService {{ public class TestRepositoryService @Path("version") @Path("version") @GET /repository/version で呼び出し @GET @Produces("text/plain; charset=UTF-8") @Produces("text/plain; charset=UTF-8") public String getVersion() {{ public String getVersion() return "Test Service version 1.0"; return "Test Service version 1.0"; }} @Path("user/{userID}") @Path("user/{userID}") /repository/user/E12345 などで呼び出し @GET @GET @Produces("text/plain; charset=UTF-8") @Produces("text/plain; charset=UTF-8") public String getUserName(@PathParam("userID") String id) {{ public String getUserName(@PathParam("userID") String id) return UserRepository.getUserName(id); return UserRepository.getUserName(id); }} 20
  21. 21. IBM Software Group JSF 2.0 Facelets Annotations support AJAX support Widget library (extension) Skins Bean Validation <h:panelGrid columns="2"> <h:panelGrid columns="2"> #{cc.attrs.namePrompt} #{cc.attrs.namePrompt} <h:panelGroup> <h:panelGroup> <h:inputText id="name" value="#{cc.attrs.managedBean.name}" <h:inputText id="name" value="#{cc.attrs.managedBean.name}" valueChangeListener="#{cc.attrs.managedBean.validateName}"> valueChangeListener="#{cc.attrs.managedBean.validateName}"> <f:ajax event="blur" render="nameError"/> f:ajax <f:ajax event="blur" render="nameError"/> f:ajax </h:inputText> </h:inputText> <h:outputText id="nameError" <h:outputText id="nameError" value="#{cc.attrs.managedBean.nameError}" style="color: red;font-style: italic;"/> value="#{cc.attrs.managedBean.nameError}" style="color: red;font-style: italic;"/> </h:panelGroup> </h:panelGroup> ... ... </h:panelGrid> </h:panelGrid> 21
  22. 22. IBM Software Group 永続化の機能強化 永続化の JPA 2.0 – クエリー言語であるJPQL(Java Persistence Query Language)が強化 – アノテーションを使用した入力値の検証が可能なBean Validationの追加 – 悲観的ロックのサポート EntityManager – レベル2キャッシュの仕様追加 @Entity Employee @Id getEmp_Id()emp_Id=111111 setEmp_Id() getEmp_Id() emp_Id setEmp_Id() getName() name=Nakajima setName() getName() name setName() phone=1804-1111 setPhone() getPhone() getPhone() phone setPhone() EMPLOYEE表 EMP_ID NAME PHONE 111111 Nakajima 1084-1111 222222 Hirabayashi 1804-2222 333333 Yamaguchi 1803-3333 22
  23. 23. IBM Software Group Bean Validation 1.0 JPAやJSF,JCAで使用できるValidatation機能 – Beanに対する制約を統一的に扱うことができる @Min/@Max/@Size/@NotNull/@Pattern等のアノテーションで制約をかける – ユーザー定義の制約も実装できる @entity @entity public class Customer { public class Customer { @Id @Id private int id; private int id; private String name; private String name; @Pattern(regexp="((¥d¥d¥d¥-)?¥d¥d¥d¥-d¥d¥d¥d)?") @Pattern(regexp="((¥d¥d¥d¥-)?¥d¥d¥d¥-d¥d¥d¥d)?") private String phoneNumber; private String phoneNumber; …… …… }} 23
  24. 24. IBM Software Group まとめ Java EEはより簡単に,よりスリムになっていきます Java EE 5が,「今までと同じ事がより簡単にできる」更新だったのに対し Java EE 6は,「今まで出来なかったことができる」という更新です Servlet/JSP/JSFといった,変化が少なかったAPIにも大幅な機能追加が RESTfullアプリケーション,Ajaxアプリケーションなど技術に対応 24
  25. 25. IBM Software Group 最後に 最後に Java EE 6対応となるWebSphere Application Server V8.0 Alphaバージョンが公開中です https://www14.software.ibm.com/iwm/web/cc/earlyprograms/websphere/wsasoa/index.shtml 25

×