いざStrutsからJSF 2へ! 移行における最大のポイントは?──最新Java EE開発“虎の穴” 第2回 岩崎浩文氏

Oracle Java & Developers編集部
2013-12-16 11:00:00
  • このエントリーをはてなブックマークに追加

楽天で金融系システムのアーキテクトを務める岩崎浩文氏は今年、Strutsによる既存システムをJava EE 6のJSF 2に移行するプロジェクトを指揮した。岩崎氏が語る、StrutsからJSF 2への移行における最大のポイントとは?

楽天は今年、StrutsベースのシステムをJava EE 6ベースに移行。その最大の難所は?

 かつて独自フレームワークやオープンソース・フレームワークで補完されていた機能を意欲的に取り込み、標準仕様の枠内で高機能なエンタープライズ・システムを効率的に開発することが可能になったJava EE。欧米ではJava EE 6など最新のJava EE環境への移行が進んでおり、その波は国内にも波及しつつある。では、これからJava EE 6への移行や導入を進める開発者は、どのようなポイントに留意して取り組みを進めればよいのか。本企画では、Java EE 6開発の先駆者へのインタビューを通して、彼らが突き当たった壁と、その壁を乗り越えるためのノウハウ、参考情報などを紹介している。

 初回の構造計画研究所 菊田洋一氏に続き、今回は楽天の岩崎浩文氏(DU金融サービス部 チーフアプリケーションエンジニア)にご登場いただこう。

 本サイト記事「楽天とオラクルのアーキテクトが本音で語る、Java EE 6導入を推進するうえでのポイントと導入効果」でも紹介したように、楽天の金融系システムに関する技術標準の策定やアーキテクチャ設計をリードする岩崎氏は今年、同社の基幹業務を担うシステムをJava EE 6に移行するプロジェクトを指揮した。StrutsやSpring Frameworkなどによる既存システムをJava EE 6ベースにリプレースしたわけだが、この移行で最大の壁となったのがStrutsからJSF 2への移行だったという。岩崎氏が後続者にアドバイスしたい「Struts→JSF 2移行」におけるポイントとは何だろうか。

HibernateからJPA 2、SpringからEJB 3への移行は意外と簡単。難所はStrutsからJSF 2への移行

楽天 DU金融サービス部 チーフアプリケーションエンジニアの岩崎浩文氏
楽天 DU金融サービス部 チーフアプリケーションエンジニアの岩崎浩文氏

──現在、国内企業では、Strutsベースで作られたシステムが更改時期を迎えているところが多いようです。

 更改対象となっているシステムで典型的なのは、2005年前後に作られた、StrutsやSpring Framework、Hibernateなどをベースにしたものでしょう。具体的には、Java SE 1.4の上でWebLogic Server 8.1などのJava EE 1.4対応アプリケーション・サーバが稼働し、さらにその上で「Java Servlet+Struts 1(バージョン1.1~1.3)」、「Spring Framework」、「Hibernate」などのO/Rマッパを使うといった構成になると思います。それ以前に作られたシステムだと、StrutsやHibernate、Spring Frameworkの部分に独自開発のフレームワークを利用したものになるでしょう。

──そうしたシステムの移行先として、岩崎さんはJava EE 6を選択されました。

 WebLogic Channelの記事でもご紹介いただいたように、システム開発技術を業界標準技術に統一することで、運用安定性を高め、英語圏の者も含めた開発メンバーの教育がやりやすくなり、また長期保守性も高まると考え、Java EE 6に移行しました。

 Java EE 6に移行する場合、移行先のシステム構成は、Java SE 7上でOracle WebLogic Server 12cなどのJava EE 6対応アプリケーション・サーバが稼働し、その上でJSF 2(JSF 2.1)、EJB 3、JPA(Java Persistence API)2を使ったJava EE 6ベースのアプリケーションが動作するという構成になります。つまり、Java Servlet+Strutsの部分はJSF 2に移行し、Spring Frameworkを使っている部分はEJB 3に移行、Hibernateを使っている部分はJPA 2に移行するといった具合になります。


※クリックすると拡大画像が見られます

──すべてJava EEの標準技術でカバーするわけですね。それぞれの部分はどう移行するのでしょうか?

 まずHibernateですが、その“生みの親”であるギャビン・キング氏はJPA 2の仕様策定者でもあります。そのためなのか、HibernateとJPA 2の仕様は非常によく似ており、この部分の移行は簡単に行えます。

 次にSpring FrameworkからEJB 3への移行ですが、両者は仕様が大きく異なるため、Spring Frameworkを使っていたコードはかなりの書き換えが必要です。Spring Frameworkで使っていたインジェクション(依存性の注入)や設定ファイルは、EJB 3ではアノテーションになりますからね。とは言え、多くのシステムでのSpring Frameworkの使い方としては、ロギングや、ちょっとしたクラスのインジェクション程度ではないかと考えられます。これらと同等の機能はEJB 3にも用意されているので、Spring Frameworkを使っている部分も、EJB 3ベースに問題なく置き換えられるはずです。

 問題はStrutsからJSF 2への移行で、この部分については全面的な作り替えが必要になります。StrutsとJSF 2とでは設計思想が異なるためで、Java EE 6への移行では、ここが最も手の掛かる部分となるでしょう。


※クリックすると拡大画像が見られます

 ちなみに、アプリケーション・サーバの移行に関してですが、WebLogic Server 8.1からOracle WebLogic Server 12cへの移行について調べてみたところ、コア部分や設定ファイル、EJBのリモート・インタフェースを使う少し面倒な部分などは、まったく変わっていないようです。したがって、WebLogic Serverを使っているシステムなら、アプリケーション・サーバの移行に関しても困ることはないでしょう。