第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 Java EE 5を構成する仕様の一覧(2005年7月現在)

 表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;
import javax.jws.WebMethod;

@WebService
public class HelloWorldService {
  @WebMethod
  public String helloWorld() {
    return "Hello World!";
  }
}

 サービスオブジェクトは、従来のようにjava.rmi.Remoteを継承したリモートインターフェイスを実装する必要がないことに注意してください。JSR-181のアノテーションは、もっと多くの情報を定義することもできますが、適切なデフォルト値決定のルールによって、メタデータ宣言が最小限になるように工夫されています。

  1/2

 INDEX

第1回 JSP・Spring・Hibernateで次世代Javaに備える
Page1
Java EE 5仕様の構成
Webコンテナ関連の仕様
  Page2
EJBコンテナ関連の仕様


Java Solution全記事一覧



Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間