JAXB 2.2での変更点

JAXBスペックはJavaEE6へ向けて小規模なメンテナンスレビュー(2.2)を予定しています。本当は幾つか大きく手を入れたいところがなくもなかったのですが(例えばインターフェースをよりよくサポートするとか)、リソース上の制約や、他のスペックと比較勘案した結果、それらは見送られることになりました。なので、このメンテナンスレビューは主にJavaSE向けのセキュリティパーミッションの導入をするための小さいものになっています。これらがJCPに提出予定の変更点のリストです


実装の方では、今回は一つ面白い技法を使ってみようと思っています。具体的には、JAXB 2.1 APIと使うと2.1の実装になり、JAXB 2.2 APIと使うと2.2の実装になるような、単一のjarファイルを提供しようという試みです。ドキュメンテーションAPIは異なるので、依然として2.1と2.2の複数のダウンロードが提供されることになりますが、中に入っているjaxb-xjc.jarとjaxb-impl.jarは一緒になります。


これによって、僕等のほうでは複数のブランチをメンテナンスするオーバーヘッドを避けることができます。バグの修正は一ヶ所だけですみ、2.1.xと2.2.xは同時にリリースされ、含まれるバグ修正は同期されることになります。これによって、2.1.x系列をより長期間に渡ってメンテナンスすることができるようになります。JavaSEがJAXB 2.2をピックアップするのはJavaSE 7でのことになるでしょうから、ユーザーに2.2へのアップデートを強要しないためにこれが役に立ちます。そうでないと、2.1の時のように、ユーザーがendorsed directoryの泥沼にはまり込むことになります。


また、この同じテクニックがJAX-WS/Metroでも使われるように、JAX-WSチームと話しているところです。2.0→2.1リリースがユーザーにとって非常に苦痛だったのは、実装のリアーキテクチャJAX-WS 2.1へのアップグレードが抱き合わせで行われたので、2.1の機能が必要なくても、バグフィクスやパフォーマンス改善が必要だったユーザーが2.1へアップグレードするハメになったからです。前回と同じ轍を踏まないためにもこの点が重要だと思います。


また、前回アナウンスしたように、2.2がラップアップし次第、今後は僕はJAXBからは離れる予定です。Martin Grebacが次のJAXBリードになります.