ん?POJOじゃないの?
PetStore 2.0 ea1内で使われているCategoryクラスのコードの冒頭は,以下のような感じ。
package com.sun.javaee.blueprints.petstore.model;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity public class Category implements java.io.Serializable { private String categoryID; private String name; private String description; private String imageURL; public Category() { } @Id public String getCategoryID() { return categoryID; } ・・・
import文に思いっきりJava Persistece APIが登場している。全然POJOじゃないじゃん。当然import文を消すと,@Entityや@Idといったアノテーションが見つからないというコンパイルエラーになる。注釈って単なるマーカー(というか単なる文字列情報)だと思っていたが,これではべったり対象のAPIに依存してしまっている。 うーん,いかがなものか。HIbernateの永続化モデルクラスにすっかり慣れてしまった僕には,かなりの違和感を覚えたコードである。
[追記: 2006/08/04] EJB3.0 Persistence API(JSR-220)で規定されているアノテーションをO/R-Mappingの領域で標準としましょう,という動きがあって,HibernateもHibernate Annotationでこれを採用しているらしい。つまり,J2EEコンテナ上でEJB3.0やJPAは標準なんだから,エンティティを扱うための抽象的な@Entityや@Idなどのためのimport文が埋まることは問題ない,っていう解釈なのだろう。 完全なPOJOであれば,アノテーションが付いていても,J2EEコンテナ外での動作,つまりEJB3.0やJPAのライブラリがなくても使えるようになっているのが必要とされると思うのだが,そうではないようだ。Javaのアノテーションは,ことJ2EE向けのものについては,POJOに対するこだわりはなく,あくまでEoDのためってことなんだろうな,きっと。