第1回 JSF・Spring・Hibernateで次世代Javaに備える
西ヶ谷岳(サン・マイクロシステムズ)
2005/7/6
Page.1 | Page.2 |
J2EEの開発環境は大きな変革期を迎えようとしています。本年中に最終スペックを公開する予定のJ2EEの次世代仕様「Java EE 5」は、開発の容易性(EoD:Ease of Development)を目指して、全く新しいといえる開発スタイルを提案しようとしています。
この変革はあまりにも大胆な変更であるため、従来のJ2EE 1.4仕様の資産は、ソースコードレベルでの互換性が保たれない部分が多く見られます(バイナリレベルでの互換性は確保されるはずです)。いわばこの過渡期にあるいま、皆さんがJ2EEアプリケーションを設計する場合に、現在開発しようとしているアプリケーションの資産が、将来のJava EE 5環境でも有効に活用できるように考慮することは非常に重要なテーマです。
この連載では、Java EE 5へのマイグレーションを考慮したアーキテクチャとして、JSF、Spring、Hibernateの組み合わせを提案し、なぜこの組み合わせがベス ト・プラクティスなのかを計5回の連載で解説していきます。また、これらの技術を組み合わせて設計を行う場合に注意しなければいけない技術的ポイントについても解説します。
第1回は、現在公開されている最新のドラフト仕様からJava EE 5がどう変わるかを解説します。
|
Java EE 5仕様の構成 |
Java EE 5の仕様はJCP(Java Community Process)によって策定されており、さまざまなベンダや個人のエキスパートたちが技術のテーマごとに集まってエキスパート・グループを形成し、標準化作業を進 めています。Java EE 5のエキスパート・グループはJSR-244と呼ばれ、現在、公開されているドラフト仕様のステータスはEDR(Early Draft Review)となっています。
Java EE 5という名称について 6月27日から30日にかけて、JavaOne 2005がサンフランシスコで開催されました。ここでは、従来のJ2SE 5.0、J2EE 5.0という呼び名をそれぞれJava SE 5.0、Java EE 5.0と改名することが発表されました。本連載でも、今後はJava EE 5という名称を使用していきます。しかし、J2EE 1.4については、Java EE 1.4とは呼ばずに、従来通りJ2EE 1.4と呼ぶことにします。 |
皆さんご存じのようにJ2EE仕様は複数の仕様の集合になっています。以下にJava EE 5を構成するオプション・パッケージの一覧を示します。
Optional Package | Version | JSR | Status |
Servlet | 2.4 | ||
JSP | 2.0 → 2.1 | JSR-245 | PR |
JSTL | 1.1 | ||
JSF | 1.1 → 1.2 | JSR-252 | PR |
JSP_Debugging | 1.0 | JSR-45 | FR |
JMS | 1.1 | ||
JTA | 1.0 | ||
JavaMail | 1.3 | ||
JAF | 1.0 | ||
Connector | 1.5 | ||
Web_Services | 1.1 | ||
JAX-WS(JAX-RPC) | 1.1 → 2.0 | JSR-224 | PR |
JAXB | 1.0 → 2.0 | JSR-222 | PR |
SAAJ | 1.2 | ||
JAXR | 1.0 | ||
WebSvc_Metadata | 1.0 | JSR-181 | FR |
StAX | 1.0 | JSR-173 | FR |
EJB Simplified | 2.1 → 3.0 | JSR-220 | PR |
EJB Persistence | 2.1 → 3.0 | JSR-220 | PR |
Common Annotaion | 1.0 | JSR-250 | PR |
J2EE_Management | 1.0 | ||
J2EE_Deployment | 1.1c | ||
JACC | 1.0 |
表1で、黄色で示している部分はJ2EE 1.4から存在していてバージョンが上がる予定のもの、水色で示している部分はJava EE 5から新たに追加になったものです。この表を見て目まいがした方もいらっしゃるかもしれません。J2EE仕様はこれまでも十分に大規模なAPIであり、容易に理解できるものではありませんでした。それにもかかわらず7つも新しい仕様が加わるため、全体のAPIはさらに巨大化したといえます。これで、EoDが実現できるのかと疑問に思われる方も多いのではないでしょうか。
しかし、J2EEアプリケーションを開発する場合に、すべてのAPIを使用するわけではありません。APIはアプリケーションの要件に応じて適切に選択すればよいのです。逆に、それぞれの仕様がどんな技術を提供し、どんな問題を解決してくれるのかをあらかじめ知っておくことは必要です。今回、Java EE 5で追加または更新される予定のAPIは確実にEoDを実現し、アプリケーションのコードを驚くほど簡略化できることは間違いありません。以下の節で は、Java EE 5で変更になる各仕様をWebコンテナ関連、Webサービス関連、EJBコンテナ関連に分類し、それぞれどのような改良が計画されているかを紹介します。
|
Webコンテナ関連の変更 |
Webコンテナ関連では、従来のServlet API、JSPの仕様に大きな変更はありませんが、すでに多くのベンダで採用されているJavaServer Faces(JSF)仕様がJava EE 5では標準仕様として含まれることになりました。本稿でJava EE 5への移行に備えて、JSFを推奨している理由の1つがこれです。現在最もよく使われているWeb層のフレームワークはStrutsであろうと思います。JSFはStrutsと同様のMVCモデルに基づいていますが、よりモダンで洗練されたアーキテクチャとなっています。
JSP仕様とJSF仕様はともにそれぞれマイナーバージョンが上がりますが、表面上は大きな変更はありません。JSP 2.1(JSR-245)とJSF 1.2(JSR-252)の主なテーマは、JSF-ELのJSPへの統合です。かつてJSTLでのみ使用可能だったEL(${val}の形式)表現は、JSP 2.0になったいまでは、JSPによってレンダリングされるようになりました。これにより単に画面に変数の値を出力するだけなら、JSTLの<c:out>タグを使う必要がなく単に${val}のように記述するだけでよくなりました。このときと同じことがJSPとJSFのエキスパート・グループの間で議論になっています。すなわち、現在JSF上でのみ表現可能なJSF-EL(#{val}の形式)をJSPが評価できるようにするため、既存のELとの整合化の作業を行っているわけです。
JSTLとJSP Debuggingも新たにJava EE 5の標準に含まれることになりましたが、これらは既存の仕様からの変更はありません。
■Webサービス関連の変更Webサービス関連では、まずJAX-RPC仕様のバージョンが1.1から2.0に上がると同時に、その名前がJAX-WSに変更になります。この名称変更は、JAX-RPC仕様が網羅するのはRPCだけではないこと、XML-RPCプロトコルと紛らわしいこと、そして、何よりWebサービスのためのJava APIであることを明確にするための名称変更です。JAX-WS 2.0(JSR-224)の主な変更点を以下に挙げます。
- 独自のXML/Javaバインディングから、JAXB 2.0(JSR-222)を使用するように変更
- SOAP 1.2、WSDL 2.0、WS-I Basic Profile 1.1のサポート
- WebService metadata(JSR-181)の利用
JAXBが2.0になり、JavaからXML Schemaへのバイディングをサポートしたことにより、JavaとXMLとのラウンドトリップが可能になったため、JAX-WSは晴れてJAXBベースの実装となることができました。JAXB 2.0はJava EE 5で導入されたgenerics、enum、アノテーションを使用しています。そのため、JAX-WS 2.0を使用するためにはJDK1.5が必須となることに注意してください。Java EE 5には、StAX 1.0 (JSR-173)という新しいXML入出力のAPIが含まれていますが、これはJAXB 2.0仕様がこのStAX APIに依存しているためです。
Java EE 5のWebサービス関連で最も重要な仕様がWeb Services Metadata(JSR-181)です。JSR-181で定義されたアノテーションをPOJOなサービスオブジェクトに施すことにより、
従来のWebサービスコンポーネントに必要なリモートインターフェイス、WSDLファイル、webservices.xml、およびJAX-RPCマッピングファイルに相当する情報を自動生成することができるようになります。以下に、JSR-181に基づくWebサービスのためのアノテーション例を示します。
import javax.jws.WebService; |
サービスオブジェクトは、従来のようにjava.rmi.Remoteを継承したリモートインターフェイスを実装する必要がないことに注意してください。JSR-181のアノテーションは、もっと多くの情報を定義することもできますが、適切なデフォルト値決定のルールによって、メタデータ宣言が最小限になるように工夫されています。
1/2 |
INDEX |
||
第1回 JSP・Spring・Hibernateで次世代Javaに備える | ||
Page1 Java EE 5仕様の構成 Webコンテナ関連の仕様 |
||
Page2 EJBコンテナ関連の仕様 |
Java Solution全記事一覧 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|