この質問には実際には多くの概念が含まれているため、すべてを詳しく説明することはしません。より完全な詳細については、JPA 1.0 仕様の第 5 章 - エンティティ マネージャーと永続化コンテキスト全体(およびこの回答の最後に記載されている他の関連セクション) を読むことをお勧めします。むしろ、Java EE 環境で最も一般的なシナリオについて説明しようと思います。
EJB 環境では、通常、次のものを使用します。
- コンテナ管理のエンティティ マネージャ( JTA エンティティ マネージャである必要があります)
- ステートレス セッション Bean (SLSB) でのトランザクション スコープ
- ステートフル セッション Bean (SFSB) で拡張
- JTA トランザクション管理 (これが本当に必要な場合を除き、リソース ローカル トランザクションではありません)
persistence.xml
JNDI 名を持つデータ ソースを使用する JTA エンティティ マネージャーを設定する方法を次に示しますjava:comp/env/jdbc/AppDataSource
。OpenJPA は、WebSphere で使用される持続性プロバイダーです。
<?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="MyPu" transaction-type="JTA">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<jta-data-source>java:comp/env/jdbc/AppDataSource</jta-data-source>
<class>com.acme.domain.Foo</class>
<class>com.acme.domain.Bar</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<!-- OpenJPA specific properties -->
<property name="openjpa.TransactionMode" value="managed"/>
<property name="openjpa.ConnectionFactoryMode" value="managed"/>
<property name="openjpa.jdbc.DBDictionary" value="db2"/>
</properties>
</persistence-unit>
</persistence>
OpenJPA のプロパティーについては、OpenJPA の資料を参照してください。
SLSB (コンテナー管理トランザクションを使用) がコンテナー管理エンティティ マネージャーを注入する方法は次のとおりです。
@Stateless
public class EmployeeServiceBean implements EmployeeService {
@PersistenceContext(unitName="MyPu")
private EntityManager em;
public Employee createEmployee(int id, String name, long salary) {
Employee emp = new Employee(id);
emp.setName(name);
emp.setSalary(salary);
em.persist(emp);
return emp;
}
...
}
それだけです。エンティティ マネージャのライフサイクルは、コンテナによってアプリケーションに対して透過的に管理され (createEM/close なし)、エンティティ マネージャはコンテナによって管理される JTA トランザクションに参加します (明示的な開始/コミットなし)。
前にほのめかしたように、私は表面をなぞったにすぎません。私の目標は、どうにかしてあなたを正しい道に導くことです。さらに進むには、本 (EJB3 in Action など) を読むことをお勧めします。一方、以下の参考文献は良い読み物です。
参考文献
- JPA 1.0 仕様
- 第5.2.1項「Java EE環境でのエンティティ・マネージャの取得」
- 5.5項「トランザクションの制御」
- セクション5.6「コンテナ管理の永続コンテキスト」
- セクション 6.2.1.2「トランザクション タイプ」
- セクション 6.2.1.4「プロバイダ」
- セクション 6.2.1.5「jta-data-source、non-jta-data-source」
資力