*2006/11/4のKBlogからの転記
Java EE 5, GlassFish(SJS Application Server 9.xPE), NetBeans 5.5の組み合わせは、非常にパワフルです。個人が全体を把握するのはかなり困難な量になってきていますが、まずは、Persistence APIを見てみます。
Database
データベースは、以下のような単純なテーブルを使用します。
今回は、GlassFishに付属してくるDerbyを使ってみました。
NetBeansからだと非常にスムーズに使えますが、単独だと、CUI(ij)が私にとって使いづらいです。
create table book (
bookid int primary key,
title varchar( 255 ) not null,
price int
);
Entity (Annotated POJO)
データベースに対応するエンティティクラスを定義します。
アノテーションが指定されたPOJOです。
javax.persistence.* は、GlassFishやJavaEE5 SDKのjavaee.jar含まれています。
以下はストレートなマッピングで、コードは理解しやすく、コンセプトも明確なので、開発者は特別なハーネス無しに作成できそうです。テーブルが複数ありリレーションシップを定義しなければならなくなると、もっと研究が必要になると思われます。
package testpersistence;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "BOOK")
public class Book implements Serializable {
@Id
@Column(name = "BOOKID", nullable = false)
private Integer bookid;
@Column(name = "TITLE", nullable = false)
private String title;
@Column(name = "PRICE")
private Integer price;
...以下 getter,setter ...
}
persistence.xml
EntityManagerが使用するPersisntece定義ファイルを作成します。
テンプレートやハーネス無しには作成が難しそうです。
NetBeans のWizardで作成しました。NetBeans および GlassFishにはOracleのTopLink Essential(おそらく元WebGainから買収した製品)というO/R Mappingのためのライブラリが付属していて、デフォルトだとそれが使われます。
HibernateやKODO等、別のO/R Mappingも使用できそうなので、今後調べてみたいと思っています。
まずは、TopLinkで進めます。JDBCドライバーや接続情報などの一般的なプロパティが定義されています。
ディレクトリはMETA-INFに、ファイル名はpersistence.xmlとして作成されています。
TopLink Essensialの説明は以下を参考にしてください。 Main 以上で、下準備は完了ですので、実際に利用します。 見てのとおりなのですが、Persistenceクラスのファクトリメソッドを使って、EntityManagerFactoryインスタンスを作成します。 persistence.xml内のpersistence-unitで定義されている名前を指定し、そこから、EntityManagerインスタンスを取得します。 以下の例では、全権検索を行なうクエリをEJB QLで実行しています。oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider testpersistence.Book
package testpersistence;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
public class Main {
private static EntityManagerFactory factory =
Persistence.createEntityManagerFactory( "topLinkPersistence" );
private static EntityManager manager = factory.createEntityManager();
private static String TOPLINK_EJBQL = "SELECT b FROM Book b";
public static void main(String[] args) {
Query query = manager.createQuery( TOPLINK_EJBQL );
List<Book> books = query.getResultList();
for( Book book : books ) {
System.out.printf( "%5s %-15s %5s",
book.getBookid(),
book.getTitle(),
book.getPrice() );
}
}
}
実行
作成された、Book.java, persistence.xml, Mail.javaを実行するために必要なパッケージは、以下のとおりです。
JDBC Driver: derbyclient.jar (from GlassFish)
TopLink: toplink-essensials.jar (from GlassFish/Netbeans javax.persistence APIを含む)