InfoQ

News

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

作者 James Kao, 翻訳者 白石 俊平 投稿日 2007年8月31日 午前12時50分

コミュニティ
Java,
SOA
トピック
Webサービス,
Japanese Build systems,
SOAプラットフォーム
タグ
XFire,
SOAP,
Java EE,
Apache Axis,
WSDL

先日リリースされた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日にリリースされた記事です)

ブックマーク
digg+,
reddit+,
del.icio.us+,
dzone+,
Hatena

No comments

返信

ジャンル別一覧

クラウドコンピューティング ~ EC2、Mosso、GoGrid

クラウドコンピューティングのプロバイダーであるEC2、Mosso、GoGridの新しいユーザーエクスペリエンスと、それぞれの機能の違いについて学びます。

仮想化入門

このArticleでは仮想化に関する利点と欠点を見ながら、仮想化の違いについて詳しく追っていきます。

Java 6のスレッド最適化は実際に動作しているのか? - パートII

パート2では、ベンチマークの結果を検証するために用いられるテクニックについてさらに深く見ていきたいと思います。最後に、「なぜプロセッサが異なるとロックのコストも大きく異なるのか」と言う真の疑問に答えます。

RESTアンチパターン

本稿では、Stefan Tilkov氏が「RESTful」な設計であると主張するアプリケーションに見受けられる最も一般的なアンチパターンのいくつかについて説明し、それらを避けるための方法を提案しています。

モデル駆動ソフトウェア開発のためのベストプラクティス

Sven Efftinge氏、Peter Friese氏とJan Köhnlein氏が、MDDを取り入れて成功した経験から、ベストプラクティスの解説を行います。

スケーラビリティの構築とパフォーマンスの達成:バーチャルパネル

Our panel of leading experts explores some of the challenges and thought processes that go into making their apps as scalable and performant as possible.

Spring 2.5:Spring MVCの新機能

この記事は、Spring 2.5で導入されたアノテーションを探究する3部作の第2弾です。Web層におけるアノテーションのサポートを扱います。最後の論文では、統合と検査で利用できる追加機能を説明する予定です。

"YUKATA"から始まるコミュニケーション(Agile2008 ライトニングトークより)

私は「浴衣」を着てパーティーに参加したことで、たくさん声を掛けていただけました。 そこで感じたことは、このカンファレンスが人との繋がりを生み出し、また言葉の壁を越えて積極的に交流する場所であることです。民族衣装はそれらを助けてくれるものでした。きっとこの交流が、新たなムーブメントをアジア圏の仲間たちにも与えてくれると確信しています。