Oracleは先頃,MVC 1.0 JSRを発表した。このJSR 371は,今年3月にInfoQでも取り上げたJava EE 8サーベイの結果を踏まえたものだ。調査対象者の61%が,JSFに加えて,アクションベースのMVCフレームワークのサポートを提供する,というそのアイデアを支持した。同じ処理を行うフレームワークはすでに存在する,と答えたのはわずか26%で,その内の42%がSpring MVCの名前を挙げている。また,関連する役割を果たすものとして,AngularJSやPlay Frameworkの名前も挙がった。
MVC 1.0の仕様では,Web UIフレームワークはアクションベースとコンポーネントベースに分類される,としている。同仕様はこのアクションベースの部類に入るものだ。JSFに代わるものではない。Java EEプラットフォームでWeb アプリケーションを構築するための,単にもうひとつのアプローチである。付け加えるならば,コントローラとしてJAX-RSを活用することはあっても,新しいテンプレート言語を導入するような考えはない。
今回の発表はRedHatの支援を受けていることが,java.netメーリングリストとJava MVC 1.0ブログ記事の両方で表明されている。同社の技術者でフェローのBill Bruke氏は,自身としての反対意見を寄せた。
MVC 1.0 JSRはGlassFishのコミュニティブログでも話題となっている。そこにはJava EEコミュニティにおいて,今回のJSRでリーダの役割を果たした,Santiago Pericas-Geertsen氏(JAX-RS仕様のリーダのひとり)と,Manfred Riem氏(JSF仕様のリーダのひとり)の名が記されている。
JSF仕様のリーダのひとりであるEd Burns氏は,"Why another MVC?"という記事を書いて,いくつかの疑問に答えている。氏はJersey MVCが"間違いなく,設計に影響を与えるであろう"とした上で,コントローラがどのようなものになるか,いくつか例を挙げる。
@Path("/") @Singleton @Template @Produces("text/html;qs=5") @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class Bookstore { private final Map<String>, <Item> items = new TreeMap<String, <Item>(); private String name; public Bookstore() { setName("Czech Bookstore"); getItems().put("1", new Book("Svejk", "Jaroslav Hasek")); getItems().put("2", new Book("Krakatit", "Karel Capek")); getItems().put("3", new CD("Ma Vlast 1", "Bedrich Smetana", new Track[]{ new Track("Vysehrad",180), new Track("Vltava",172), new Track("Sarka",32)})); } @Path("items/{itemid}/") public Item getItem(@PathParam("itemid") String itemid) { Item i = getItems().get(itemid); if (i == null) { throw new NotFoundException(Response .status(Response.Status.NOT_FOUND) .entity("Item, " + itemid + ", is not found") .build()); } return i; } @GET @Produces({MediaType.APPLICATION_XML, MediaType.TEXT_XML, MediaType.APPLICATION_JSON}) public Bookstore getXml() { return this; } public long getSystemTime() { return System.currentTimeMillis(); } public Map<String>, <Item> getItems() { return items; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
氏はこのアプローチについて,リクエスト/レスポンスの複雑な制御を必要としている人たちに選ばれるものになるだろう,と書いている。
HTML/CSS/JSを自分たち自身でどうしてもコントロールしたい場合に,コンポーネント指向のMVCの提供する抽象化が単なる邪魔にすぎないと見ているWebデザイナたちは,このアプローチを好むかも知れません。それにこのアプローチは,HTTPのセマンティクスに強く結び付いていますから,RESTにもぴったりです。
Redditで見る反応はさまざまだ。Java EEにはすでに2つのWeb UIフレームワークがあるので,JSRは好ましくないという意見が多い。 その他には,Microsoftの世界の話(ASP.NET WebフォームとASP.NET MVC)をしているのではない,という意見もあった。Redditorのjohnwaterwood氏が面白い指摘をしている。
もっとも皮肉なこと - 私はサーベイで,JSFでアクションがサポートされるものと思って,MVC/アクションサポートに投票しました。それなのに彼らは,Spring MVCをJavaEEに取り入れるようにコミュニティが望んでいる,ということを正当化する目的で,私の投票を利用しているのです。
今回の動きは,多数のJava EEファンの批判とJava Web開発者の称賛を集めながら,ホットな話題になっているようだ。MVC 1.0フレームワークは,既存のアクション指向支持者にそれを使おうと思わせるのに十分なものだろうか? Spring MVCやGrails,Play 2,Struts 2のファンの数は非常に多い(この順は,RebelLabs のJava Tools and Technologies Landscape for 2014による)。これらフレームワークの開発者たちが,MVC 1.0をJava開発における最高のアクション指向フレームワークにすることができるかどうか,今後を見なければ分からない。
今回の動きを批判するJava EEファンと称賛するJava Web開発者の数から見て,これがホットな話題であることは間違いない。MVC 1.0フレームワークは,既存のアクション指向支持者にそれを使おうと思わせるのに十分なものだろうか? Spring MVCやGrails,Play 2,Struts 2のファンの数は非常に多い(この順は,RebelLabs のJava Tools and Technologies Landscape for 2014による)。これらフレームワークの開発者たちが,MVC 1.0をJava開発における最高のアクション指向フレームワークにすることができるだろうか?
このJSRの予定スケジュールは今から始まって,2年間で完了する。
2014年第3四半期 専門家グループの設立
2015年第1四半期 早期ドラフト
2015年第3四半期 公開プレビュー
2016年第1四半期 最終ドラフト
2016年第3四半期 最終リリース
JSRのプロジェクトサイトであるhttps://mvc-spec.java.netは,本記事公開時点ではまだアクティブではない。