VMwareのSpringSourceチームはSpring Frameworkの次のバージョンであるSpring Framework 4.0の計画を発表した。このバージョンにはJava SE 8、Groovy 2、Java EE 7、WebSocketsのサポートが含まれている。この計画は、3.2のリリースについてのウェビナーの最後に詳しく説明されている。
計画されている新しい機能やアップデートは、
- Java SE 8ベースのSpringアプリケーションのサポート:
- lambda式などの言語的特徴、SR-310 Date and TimeのようなAPI
- Groovy 2を使ったSpringスタイルのアプリケーションの構成と開発:
- GroovyベースのBean定義。Groovyをアプリケーション開発の言語として利用できる
- Java EE 7の主要な技術のサポート:
- JMS 2.0、JPA 2.1、Bean Validation 1.1、Servlet 3.1、JCache
- WebSocketスタイルのアプリケーションアーキテクチャ:
- JSR-356に従うランタイムと関連技術のサポート
- きめ細かいイベントとメッセージングをアプリケーションに組み込める:
- 既存のアプリケーションのイベントやメッセージングの仕組みを利用できる
- 非推奨の機能の廃止と依存物の更新:
- 非推奨の機能の廃止、Java 6への最小限の依存物の増加
InfoQはSpring frameworkの共同創設者であるJuergen Hoeller氏にこの計画について話を聞いた。
InfoQ: Springではlambdaはどのような場面で威力を発揮すると思いますか。私はJMS用のコールバックプログラミングモデルで利用できると思っているのですが。
Springのすべてのテンプレートクラス(JmsTemplate、JdbcTemplate、TransactionTemplateなど)はコールバック指向のプログラミングスタイルを使ってきました。これは、lambda式に最適の用途だと思います。というのはこのコールバックインターフェースはJava 8のlambda式を自然に利用できる関数的なインターフェースだからです。また、フォーク−ジョインタスクや非同期ウェブリクエスト処理のような非同期のプログラミングモデルにも利用されると思います。Spring 3.x世代ではこの非同期ウェブリクエスト処理について基礎的な作業を行いました。私たちのゴールはSpring 4のAPIでJava 8の言語的特徴をスムーズかつ自然に利用できるようにすることです。
InfoQ: SpringにとってJMS 2.0はどのくらい影響がありますか。
JMS 1.1から10年以上経ち、JMSの仕様が改訂されるのは本当に喜ばしいことです。しかし、実際の仕様の内容は徹底的に変わるわけではなく、現状に即したものになるというだけです。新しい送信オプション(遅延配送や非同期送信)をJmsTemplateでサポートし、新しいJMSContextクライアントAPIをSpringのJmsTemplateの代わりに使えるようにするつもりです。JMS 2.0自体は設計に影響を与えません。むしろ、Springベースのアプリケーションのさまざまな設計の中でJMSの役割を再考するきっかけになりました。結果、SpringでのJMSのサポートはJMS 1.1互換にとどまることになりました。
InfoQ: JMSとも多少の関連があるWebSocketアプリケーションですが、JSR-356を通じてサポートされます。どのような計画ですか。
現時点でWebSocketがどのくらい利用されているのか調査しています。また、JSR-356にも強い興味を持っています。メインストリームのサーブレットコンテナへの配置や最小限のサーバ構成での組み込みHTTPエンドポイントに関する関連技術にも興味があります。私たちの目的はSpringのプログラミングモデルをそのまま拡張してWebSocketスタイルのエンドポイントを公開することです。理想的にはSpringベースのアプリケーションのメッセージングのエンドポイントを全体的に改善する計画に含めたいと思っています。しかし、現実的にやろうと思っています。Springのユーザが現時点で便利だと思えるようなWebSocket指向の機能を提供したいと考えています。
InfoQ: 計画にはJavaのDate and Time APIについて特筆されています。何をサポートしようとしているのは教えてください。
Spring Framework 3.0には日付のバインディングのサポートとJodaTimeライブラリを使ったレンダリングを導入しました。JSR-310は本質的にはJodaTimeが標準化されたものですが、設計に違いがあります。私たちはJSR-310の値型をSpringの@DateTimeFormatと関連する規約のターゲットにできるようにするつもりです。ドメインモデルの中心部で利用することをおすすめします。
InfoQ: Groovyに積極的に投資していますね。大規模なアプリケーション開発でGroovy2.0はJavaの代替になるでしょうか。例えば、性能はどうですか。
これは重要な問いですね。私たちも調査中です。Springの中核部分でGroovyを強くサポートすることに多くの可能性を感じています。例えば、GroovyベースのBean定義(Grails BeanBuilderと言われる)や次世代のスクリプティングのサポートです。また、Springベースのアプリケーションを実装するための言語として静的コンパイルしたGroovy 2を使うことにも可能性を感じます。静的コンパイルをすると現時点でもGroovyはとても高性能でこれからも良くなるでしょう。
InfoQ: JavaよりもSpringを使った開発に適しているように感じるGroovyの特徴はありますか。
Groovyは多くの点でJavaにとても近く、Javaと自然な相互運用性があります。Springにとって特に重要なのは、GroovyがJavaのアノテーションを強力にサポートしていること、そしてクロージャをJava APIのメソッドの引数としてサポートしていることです。今までJavaを使ってきた人なら、Groovyは自然に使えます。さらに、Groovyには小さいながらも優れた言語的特徴を多く搭載しています。これらの特徴は従来のJavaのセマンティクスを捨てずに、選びながら利用したり、全面的に利用したりすることができます。詳細はGroovy 2.1の機能リリースをご覧下さい。
InfoQ: Groovyを賞揚してJavaをおとしめるつもりですか。
いいえ、そんなことはありません。私たちは心底Javaを好んでいます。特にJava 8の言語的特徴は大好きです。しかし、同時に他の言語に対しても開かれています。私たちはGroovyだけに投資しているのではありません。Scalaや他の言語にも投資しています。しかし、Springの利用者にとっては、Groovyは美点を持っています。このJava 8の次に好きなのはこの美点を追求することです。個人的にはこのように両者を扱うことができるのは素晴らしいことだと思います。異なる言語同士の交流が生まれるからです。
InfoQ: JCacheのサポートの計画ついてはどうですか。3.2では初期段階のサポートをしていることは知っていますが、JCacheがJava EE 7に同梱された場合の変更についてはどう考えていますか。
JCacheが完成したらJCacheがCacheManagerのセットアップのために提供するすべてのオプションをサポートするつもりです。たとえば、トランザクショナルバリアントや分散バリアントなどです。また、JCacheのキャッシングのアノテーションをSpringの自前のアノテーションの代わりに使えるようにするつもりです。同時にEHCacheのサポートに再投資する予定です。JCacheと同レベルのサポートしてさらに最新の2.5+のリリースをキャチアップするつもりです。私たちにとって、Spring Framework 4は一般的なサードパーティライブラリの最新の特徴をキャッチアップし、最新のバージョンを求めるための良い機会なのです。
InfoQ: Java EE 6に対する最小限の依存物を増やしていますね。これはWebLogic 10、 WebSphere 7のようなJava EE 5しかサポートしない古いバージョンのアプリケーションサーバを使っている企業は新しい機能を使うことができないということですか。
Spring Framework 4.0の計画で重要なのは、このフレームワークを最新のJava SE、EEに適合させることです。したがって、私たちのベースラインはJava SE 6+、Java EE 6+になります。しかし、EE 6機能パックを適用したJava EE 5サーバに対してはある種の妥協をしています。例えば、IBM JPA 2.0機能パックを適用したWebSphere 7やJPA 2.0が有効になっているWebLogic 10.3.4です。これらのサーバではSpring Framework 4.0は問題なく動作する予定です。技術的には、ランタイムでのServlet 2.5の互換性を維持します。いずれにしろ、既存の実行環境に最新のプロブラミングモデルを提供するというSpringのミッションは変わりません。
InfoQ: 外から見ている限り、昨年はSpringSourceにさまざまなことが起きた年だったと思います。Rod Johnson氏がチームを離れ、VMWareはSpringSourceを別の企業として分離すると発表しました。Spring frameworkはある意味では"完了"したと見るメディアもあります。これについてはどう答えますか。
同じ人変わらずに重要な位置についており、チームは安定します。私自身はオープンソースプロジェクトSpring Frameworkのリーダーとして10年働き続けています。Spring Framework 4.0はSpringのこの10年を新しい世代のフレームワークを通じて祝い、将来のための最新の基礎を確立します。これからはプログラミングモデルは混乱が起きるほど変わらないかもしれません。Java EE 7と6のような違いは生まれないかもしれません。しかし、私たちは既に終わったわけではありません。Spring Framework 4.0のGAのリリースの直後に、Spring上で動作する他のプロジェクトのリリースを予定しています。
Spring Framework 4.0の最初のマイルストーンリリースは4月の末に予定されている。GAリリースは年末の予定。