BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Enunciate: Javaコードファースト、コンパイルドコントラクトが特徴のWebサービス配備フレームワーク

Enunciate: Javaコードファースト、コンパイルドコントラクトが特徴のWebサービス配備フレームワーク

ブックマーク

先日リリースされたJ2EEWebサービスフレームワークenunciate 1.0は、SOAP、REST、JSONのエンドポイントを作成するにあたり、開発して配備するというシステムを完全に提供している。enunciateブログフォーラムですでに興味を集めている。enunciateは、Axis2XFireのようなWebサービススタックではない。むしろ、enumciateはXFireとSpringを用いてWebサービスのコードファースト開発モデル(それ自体は斬新ではない)を提供する。このモデルでは、コンパイル時にコントラクトの互換性が強制される。(訳注:以下の文章では、Webサービスなどにおいてクライアントとサーバの間で取り交わされる契約、つまりAPIのことを「コントラクト」と表す)

Web サービス開発に対するEnunciateのアプローチで斬新なのは、オリジナルのソースコードにて定義・保持されたAPIコンポーネント全てを利用することが軸となっていることです(コンパイルされたバイトコードに定義されたAPIだけではありません)。これが意味するのは、Webサービス開発がソースコードの中で完結するので、好みのIDEを用いてメンテナンスすることができ、開発に対する最初の障壁も低いということです。そしてまた、オリジナルのソースコードがあるおかげで、コンパイル時にあいまいさを除くことを開発者に強制することができるのでコードファースト開発によって生じる相互運用性の問題を回避することができ、型としては正しいコントラクトが持つ潜在的な危険性を取り除くことができます。このモデルは正式には"コンパイルドコントラクト "開発モデルと呼ばれます。

Robert Cooperはenumciateについて次のように述べている。 "POJOやJSR-181のアノテーションを使用したJavaのサービス実装があれば、Xfireを用いるSOAPサービス、RESTサービス、JSONサービス、そしてJavaDocよりもかなりすぐれた見た目のドキュメントからなるWARファイルを吐き出してくれます"

キーとなるのは、プロジェクトにおけるコンパイルとパッケージ構築に先立って行われる"ジェネレート"のステップを追加することである。このステップは、開発者が作ったサービスクラス周りの定型的なコードを生成するだけではなく、APIモデルの検証も行う。

ジェネレートのステップは、Enunciateの処理においてもっとも重要です。APIモデルが構築されるのはこのステップ中です。これはAPIのソースコードが読み込まれ、分析され、エンドポイントインターフェースやデータ構造、RESTエンドポイント、フォルトなどを表す抽象的な形式にロードされるということを意味します。この抽象的な形式の事をAPIモデル(もしくは単に短く"モデル")と呼んでいるのです。APIソースにエラーがあった場合、APIモデルの構築が失敗するため致命的なエラーとなります。この致命的なエラーは即時に発生し、エンジンは異常終了し、モデルを構築することができません。モデルが構築されたあとに、検証が行われます。検証ルールについてはデフォルトのセットが存在し、さらにモジュールごとにオプショナルな検証ルールを持っています。検証ルールは仕様に対する違反、相互運用性のための制約、サポートされていないAPIが含まれています。したがって、このステップにおいて相互運用性とAPIの明確化が強制されることに注意してください。検証についてのエラーと警告は蓄積され、エンジンが異常終了する前にユーザに知らされます。(警告のみであった場合は、エンジンが異常終了することはありません。)

enunciate はコードファースト、そして"コンパイルドコントラクト"開発モデルを機能として挙げているが、「相互運用性を損なわず、(公開APIを壊すことなく、下層のコードを変更できるような)長期間生き続けるWebサービスを実現するには、コントラクトファースト(コントラクトをまず決める)アプローチを採用する以外に方法はない。コードファーストはうまくいかないのは明白である」という意見 もある。enunciateの開発者であるRyan Heatonがその返信の中で述べているのは、バージョニングを適用するときは気をつけること、そして"相互運用性のルールが強制される"のはコンパイル時であり、その時enunciateはコントラクトファーストな開発モデルを明確にはサポートしていないということだった。

プロジェクトのロードマップ によれば、エンドポイントのバージョン管理のような機能、.NETクライアント、SMTPエンドポイント、WS-*、単なるWARではなく単体で動作するWebサービスサーバをも生成する、などの機能が将来サポートされるとのことである。

(原文は2007年4月3日にリリースされた記事です)

この記事に星をつける

おすすめ度
スタイル

BT