Seasar DI Container with AOP

このドキュメントはS2Hibernate-JPAのバージョンEA2のものです。

概要

S2Hibernate-JPAは以下の特徴を持っています。

  • Seasar2で管理されているJTAやConnectionPoolとHibernate3 + Hibernate Annotations + Hibernate EntityManagerが簡単に連動するようになります。
  • アプリケーションサーバが無くても、簡単にEJB3のPersistence APIを利用することができます。

リファレンス

セットアップ

  • プロジェクトのインポート
  • JDK5以上が必要です。
    あらかじめSeasar2をダウンロードして、EclipseのJavaプロジェクトとしてワークスペースにインポートしてください。
    S2Hibernate-JPA-x.x.x.zipを解凍してできたs2hibernate-jpaディレクトリをEclipseのJavaプロジェクトとしてワークスペースにインポートしてください。

  • 必要なjarファイル
  • S2Hibernate-JPAとして必要なjarファイルは、s2hibernate-jpa/libにそろってます。この他にSeasar2のjarファイルが必要です。
    Hibernate3はコネクションプールやキャッシュの実装をいろいろ選べるようになっているので、S2Hibernate3で用意していない実装が必要な場合は、Hibernateのサイトよりダウンロードしてください。

  • クラスパス
  • libのjarファイル(hsqldb.jar以外)とresources(j2ee.dicon、s2hibernate-jpa.dicon、log4j.properties、META-INF/persistence.xml)をCLASSPATHにとおせば、S2Hibernate-JPAを実行できます。Eclipseにインポートして使う場合は設定は不要です。

  • データベース
  • 簡単に機能を試すことができるように、RDBMSとしてHSQLDBを用意しています。lib/hsqldb.jarはHSQLDBを実行する上では必要ですが、本番では必要ありません。

基本的な使い方

S2Hibernate3の機能を使用するにあたり、エンティティ、Dao(.java)、diconファイルの作成が必要になります。

エンティティ

Persistence APIの仕様に合わせてエンティティを作成します。

Dao(Data Access Object)

Daoの実装方法

  1. EntityManager型のフィールドを定義します。
    private EntityManager entityManager;
  2. コンストラクタあるいはプロパティ経由で実装オブジェクトを受け取るように記述します。
    public void setEntityManager(EntityManager entityManager) { 
    	this.entityManager = entityManager;
    }
  3. 各メソッドでEntityManagerに対する処理を記述します。
  4. public Employee getEmployee(int empno) {
        return entityManager.find(Employee.class, 7788);
    }

diconファイル

j2ee.diconとs2hibernate-jpa.diconをインクルードします。

persistence.xml

クラスパスの通っているディレクトリにresources/META-INFをおきます。META-INFには、次のようなpersistence.xmlを格納します。

<?xml version="1.0" encoding="UTF-8"?>
<persistence>
	<persistence-unit name="em" transaction-type="JTA">
		<jta-data-source>j2ee.dataSource</jta-data-source>
		<properties>
			<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
			<property name="hibernate.jndi.class" value="org.seasar.extension.j2ee.JndiContextFactory"/>
			<property name="hibernate.transaction.manager_lookup_class" value="org.seasar.hibernate.jpa.transaction.S2TransactionManagerLookup"/>
			<property name="hibernate.show_sql" value="false"/>
			<property name="hibernate.format_sql" value="true"/>
			<property name="hibernate.use_sql_comments" value="false"/>
		</properties>
	</persistence-unit>
</persistence>