S2OpenJPAの機能を使用するにあたり、エンティティ、Dao(.java)、diconファイル、persistence.xmlの作成が必要になります。
エンティティ
Persistence APIの仕様に合わせてエンティティを作成します。
エンティティクラスの自動検出と永続ユニットへの自答登録を行うためにエンティティは特定のパッケージに配置します。 詳細はクラスの自動登録 を参照してください。
Dao(Data Access Object)
Daoの実装方法
EntityManager
型のフィールドを定義し、コンストラクタあるいはプロパティ経由で実装オブジェクトを受け取るように記述します。または、JPAのprivate EntityManager entityManager; public void setEntityManager(EntityManager entityManager) { this.entityManager = entityManager; }
PersistenceContext
アノテーションを利用して実装オブジェクトを設定してください。@PersistenceContext private EntityManager entityManager;
- 各メソッドで
EntityManager
に対する処理を記述します。public Employee getEmployee(int empno) { return entityManager.find(Employee.class, 7788); }
diconファイル
- jpa.dionを設定します。以下のjpa.diconはs2openjpa/resourcesに含まれるものと同一です(ただし改行位置やインデントの桁数は異なります)。
persistenceUnitProviderコンポーネントのunitNameプロパティに指定する値はpersistence.xmlで定義する永続ユニット名と一致させてください。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd"> <components initializeOnCreate="true"> <include path="s2openjpa.dicon"/> <component name="persistenceUnitProvider" class="org.seasar.framework.jpa.impl.ContainerPersistenceUnitProvider"> <property name="unitName">"persistenceUnit"</property> <property name="providerClassName"> "org.apache.openjpa.persistence.PersistenceProviderImpl" </property> </component> <component name="entityManagerFactory" class="javax.persistence.EntityManagerFactory"> persistenceUnitProvider.entityManagerFactory </component> <component name="entityManager" class="org.seasar.framework.jpa.impl.TxScopedEntityManagerProxy"/> </components>
- jpa.diconは他のdiconファイルやテストクラスでインクルード
して利用します。
<components> <include path="jpa.dicon"/> ... </components>
- 永続クラスとマッピングファイルの自動検出/登録を有効にするにはSMART deployが必要です。 SMARAT deployの設定に必要なconvention.dicon、creator.dicon、customizer.diconについてはSMART deploy を参照してください。
persistence.xml
- persistence.xmはJPAで定められた設定ファイルです。クラスパスの通っているディレクトリにMETA-INFディレクトリを作成しpersistence.xmlを格納します。以下のpersistence.xmlはs2openjpa/resourcesに含まれるものと同一です(ただし改行位置やインデントの桁数は異なります)。
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="persistenceUnit" transaction-type="JTA"> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> <jta-data-source>jdbc/dataSource</jta-data-source> <non-jta-data-source>jdbc/nonJtaDataSource</non-jta-data-source> <exclude-unlisted-classes>true</exclude-unlisted-classes> <properties> <property name="openjpa.ManagedRuntime" value="org.seasar.openjpa.ee.S2ManagedRuntime"/> <property name="openjpa.jdbc.DBDictionary" value="org.apache.openjpa.jdbc.sql.H2Dictionary"/> <property name="openjpa.Log" value="DefaultLevel=WARN, Enhance=ERROR, SQL=TRACE"/> </properties> </persistence-unit> </persistence>
永続ユニット名にはpersistenceUnitと指定します。
データソース名は、jdbc.diconの名前空間名.dataSourceコンポーネント名と一致させてください。
プロパティのopenjpa.jdbc.DBDictionaryの値は使用するデータベースに合わせて変更してください。