【新・言語進化論】言語選択の分かれ道
第3回:特許文献の検索サーバにJavaを選んだワケ
著者:Jurabi 高橋 芳太郎
公開日:2007/11/15(木)
RubyとJavaの比較
検索サーバ開発での肝であった分散処理や堅牢性については、Java以外にRubyも候補になり得たと考える。今回の開発に限っていえば、「Webアプリケーション側との親和性」と「実行速度」の点でJavaに軍配が上がった形だ。
現在、RubyにはRuby on Railsという強力なフレームワークが存在しており、Ruby自体の実行速度も着実に上がってきている。そのため、今後はRubyの採用を真剣に検討すべき機会も増えてくると考えている。
(画像をクリックすると別ウィンドウに拡大図を表示します)
Javaの魅力的な機能「アノテーション」
最後に、視点を変えて検索クライアントの実装を単純にするための手法としてアノテーションを利用した方法を紹介したい。
実際の検索は「AD=(2003/10/15:2010/11/01) AND AB LIKE 単語」のような検索条件の入力で行われる(ADは出願日をABは要約をあらわす属性名)。このように検索条件が多岐に渡るため、検索条件クラスを作成しそれに検索方法をカプセル化する必要がある。
JDK 1.4以前のJavaではこういうケースの場合、「検索クライアント側で、条件クラスに対応する検索方法を見つける」か「条件クラス内部に検索方法を規定するデータを埋め込む」という方法を用いていた。しかしこれらのいずれも何らかの問題点があり最適な方法とは言い難かった。
JDK 1.5からは、新しく登場したアノテーションを使用することで対応することができる。アノテーションはステートメントに対する注釈で、実行時にリフレクションによって取得が可能になっている。検索クライアントで実際に使用しているアノテーションを例にもう少し詳しく説明しよう。
図のコード例で@ではじまっている箇所がアノテーションだ。@Conditionはこのクラスが検索クライアントの条件クラスとして使用されることを宣言している。アノテーションにはデータを指定することが可能であり、コード例の@Conditionアノテーションのstoreにはこの条件の検索方法を規定しているクラスが設定されている。さらに細かい条件として、全文検索の場合は@IndexConditionで検索対象の文字列を指定し、RDB検索の場合は@ColumnでSQL文のWHERE句に相当する条件を指定している。
検索クライアントは、渡された条件オブジェクトから各アノテーションを取得する。そして、storeで指定されているクラスから対応する検索方法を取得し、それに沿った方法でデータベースもしくは全文検索サーバに要求を投げることができる。
アノテーションを使うと、それまではオブジェクトに入れ込まなければならなかった処理を、そのヒントのみを記述することでフレームワーク側に持たせることが可能になる。
Javaはその動作性能・堅牢性・負荷分散のしやすさから非常にサーバ実装に適した言語といえる。バージョンがあがるごとに格段の進歩をしており、特にJDK 1.5から導入されたアノテーションはC++でのテンプレートと同様にJavaによる開発に新たな可能性を示してくれるものと思っている。
次回はPerlを選択したワケ
次回は、TISの川島 義隆氏に登場いただき「Perlを選択したワケ」について解説する。 タイトルへ戻る