public class LocalContainerEntityManagerFactoryBean extends AbstractEntityManagerFactoryBean implements ResourceLoaderAware, LoadTimeWeaverAware
EntityManagerFactory
EE を作成する FactoryBean
。これは、Spring アプリケーションコンテキストで共有 JPA EntityManagerFactory をセットアップする最も強力な方法です。EntityManagerFactory は、依存性注入を介して JPA ベースの DAO に渡すことができます。JNDI ルックアップまたは LocalEntityManagerFactoryBean
定義への切り替えは設定の問題であることに注意してください! LocalEntityManagerFactoryBean
と同様に、構成設定は通常、一般的な JPA 構成規約に従って、クラスパスにある META-INF/persistence.xml
構成ファイルから読み込まれます。ただし、この FactoryBean は、persistence.xml
ファイルの場所をオーバーライドしたり、リンク先の JDBC DataSources を指定したりできるなど、より柔軟性があります。さらに、特別な VM に結び付けられるのではなく、Spring の LoadTimeWeaver
抽象化によるプラグ可能なクラスインストルメンテーションを可能にします。JVM の起動時に指定されたエージェント。
内部的には、この FactoryBean は persistence.xml
ファイル自体を解析し、対応する PersistenceUnitInfo
EE オブジェクト(JDBC DataSources や Spring LoadTimeWeaver などの追加の構成をマージしたもの)を作成して、選択した JPA PersistenceProvider
EE に渡します。これは、標準 JPA コンテナー契約を完全にサポートするローカル JPA コンテナーに対応します。
公開された EntityManagerFactory オブジェクトは、PersistenceProvider によって返される基礎となるネイティブ EntityManagerFactory のすべてのインターフェースと、この FactoryBean によって組み立てられた追加のメタデータを公開する EntityManagerFactoryInfo
インターフェースを実装します。
注意: Spring の JPA サポートには、Spring 4.0 の時点で JPA 2.0 以上が必要です。JPA 1.0 ベースのアプリケーションは引き続きサポートされますが、実行時には JPA 2.0/2.1 準拠の永続性プロバイダーが必要です。Spring の永続性ユニットブートストラップは、クラスパス上の JPA API をチェックすることで、JPA 2.0 と 2.1 を自動的に検出します。
setPersistenceXmlLocation(java.lang.String)
, AbstractEntityManagerFactoryBean.setJpaProperties(java.util.Properties)
, AbstractEntityManagerFactoryBean.setJpaVendorAdapter(org.springframework.orm.jpa.JpaVendorAdapter)
, setLoadTimeWeaver(org.springframework.instrument.classloading.LoadTimeWeaver)
, setDataSource(javax.sql.DataSource)
, EntityManagerFactoryInfo
, LocalEntityManagerFactoryBean
, SharedEntityManagerBean
, PersistenceProvider.createContainerEntityManagerFactory(javax.persistence.spi.PersistenceUnitInfo, java.util.Map)
EE, 直列化された形式 logger
コンストラクターと説明 |
---|
LocalContainerEntityManagerFactoryBean() |
修飾子と型 | メソッドと説明 |
---|---|
protected EntityManagerFactoryEE | createNativeEntityManagerFactory() サブクラスは、このメソッドを実装して、 getObject() メソッドによって返される EntityManagerFactory を作成する必要があります。 |
protected PersistenceUnitInfoEE | determinePersistenceUnitInfo(PersistenceUnitManager persistenceUnitManager) この Bean によって作成された EntityManagerFactory に使用する PersistenceUnitInfo を決定します。 |
DataSourceSE | getDataSource() この EntityManagerFactory が JDBC 接続を取得する JDBC DataSource を返します。 |
PersistenceUnitInfoEE | getPersistenceUnitInfo() コンテナー内 API が使用された場合、この EntityManagerFactory の作成に使用された PersistenceUnitInfo を返します。 |
StringSE | getPersistenceUnitName() この EntityManagerFactory の作成に使用される永続性ユニットの名前を返します。名前のないデフォルトの場合は null を返します。 |
protected void | postProcessEntityManagerFactory(EntityManagerFactoryEE emf, PersistenceUnitInfoEE pui) サブクラスが PersistenceProvider を介して作成した後に EntityManagerFactory をカスタマイズできるようにするフックメソッド。 |
void | setDataSource(DataSourceSE dataSource) JPA 永続性プロバイダーがデータベースへのアクセスに使用することになっている JDBC DataSource を指定します。 |
void | setJtaDataSource(DataSourceSE jtaDataSource) JPA 永続性プロバイダーがデータベースへのアクセスに使用することになっている JDBC DataSource を指定します。 |
void | setLoadTimeWeaver(LoadTimeWeaver loadTimeWeaver) JPA クラストランスフォーマ契約に従ってクラスインスツルメンテーションに使用する Spring LoadTimeWeaver を指定します。 |
void | setMappingResources(StringSE... mappingResources) デフォルトの永続性ユニットの 1 つ以上のマッピングリソース( persistence.xml の <mapping-file> エントリに相当)を指定します。 |
void | setPackagesToScan(StringSE... packagesToScan) persistence.xml マーカーを含む jar ファイルの JPA の標準スキャンを使用する代わりに、クラスパスのエンティティクラスに Spring ベースのスキャンを使用するかどうかを設定します。 |
void | setPersistenceUnitManager(PersistenceUnitManager persistenceUnitManager) この FactoryBean が EntityManagerFactory を構築することになっている JPA 永続性ユニットを取得するために使用する PersistenceUnitManager を設定します。 |
void | setPersistenceUnitName(StringSE persistenceUnitName) 該当する場合、指定された永続性ユニット名をデフォルトの永続性ユニットの名前として使用します。 |
void | setPersistenceUnitPostProcessors(PersistenceUnitPostProcessor... postProcessors) この EntityManagerFactory の作成に使用される PersistenceUnitInfo に適用される PersistenceUnitPostProcessors を設定します。 |
void | setPersistenceUnitRootLocation(StringSE defaultPersistenceUnitRootLocation) デフォルトの永続性ユニットの永続性ユニットルートの場所を設定します。 |
void | setPersistenceXmlLocation(StringSE persistenceXmlLocation) 使用する persistence.xml ファイルの場所を設定します。 |
void | setResourceLoader(ResourceLoader resourceLoader) このオブジェクトが実行される ResourceLoader を設定します。 |
void | setSharedCacheMode(SharedCacheModeEE sharedCacheMode) この永続性ユニットに JPA 2.0 共有キャッシュモードを指定し、設定されている場合は persistence.xml の値をオーバーライドします。 |
void | setValidationMode(ValidationModeEE validationMode) この永続性ユニットの JPA 2.0 検証モードを指定し、設定されている場合は persistence.xml の値をオーバーライドします。 |
afterPropertiesSet, createEntityManagerFactoryProxy, destroy, getBeanClassLoader, getBootstrapExecutor, getEntityManagerInterface, getJpaDialect, getJpaPropertyMap, getJpaVendorAdapter, getNativeEntityManagerFactory, getObject, getObjectType, getPersistenceProvider, isSingleton, setBeanClassLoader, setBeanFactory, setBeanName, setBootstrapExecutor, setEntityManagerFactoryInterface, setEntityManagerInterface, setJpaDialect, setJpaProperties, setJpaPropertyMap, setJpaVendorAdapter, setPersistenceProvider, setPersistenceProviderClass, translateExceptionIfPossible, writeReplace
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public void setPersistenceUnitManager(PersistenceUnitManager persistenceUnitManager)
デフォルトでは、この FactoryBean で指定された "persistenceXmlLocation"、"dataSource"、"loadTimeWeaver" などのローカル設定に依存します。
既存の永続性ユニット構成またはカスタム永続性ユニット処理のより高度な形式を再利用するには、別個の PersistenceUnitManager Bean(通常は DefaultPersistenceUnitManager インスタンス)を定義し、ここにリンクすることを検討してください。このようなシナリオでは、persistence.xml
ロケーション、DataSource 構成、LoadTimeWeaver は、その別個の DefaultPersistenceUnitManager Bean で定義されます。
public void setPersistenceXmlLocation(StringSE persistenceXmlLocation)
persistence.xml
ファイルの場所を設定します。これは Spring リソースの場所です。デフォルトは "classpath:META-INF/persistence.xml" です。
NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
persistenceXmlLocation
- この LocalContainerEntityManagerFactoryBean が解析する persistence.xml
ファイルの場所を識別する Spring リソース文字列 setPersistenceUnitManager(org.springframework.orm.jpa.persistenceunit.PersistenceUnitManager)
public void setPersistenceUnitName(StringSE persistenceUnitName)
NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
public void setPersistenceUnitRootLocation(StringSE defaultPersistenceUnitRootLocation)
デフォルトは "classpath:"、つまり現在のクラスパスのルート(最も近いルートディレクトリ)です。ユニット固有の解決が機能せず、クラスパスのルートも適切でない場合はオーバーライドされます。
NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
public void setPackagesToScan(StringSE... packagesToScan)
persistence.xml
マーカーが含まれている jar ファイルの JPA の標準スキャンを使用する代わりに、クラスパスのエンティティクラスに対して Spring ベースのスキャンを使用するかどうかを設定します。Spring ベースのスキャンの場合、persistence.xml
は必要ありません。ここで検索するベースパッケージを指定するだけです。 デフォルトはなしです。クラスパスでエンティティクラスの自動検出を検索するパッケージを指定します。これは、Spring のコンポーネントスキャン機能(ClassPathBeanDefinitionScanner
)に類似しています。
メモ: 通常の JPA スキャンと比較して制限がある場合があります。特に、JPA プロバイダーは、persistence.xml
によって駆動される場合にのみ、プロバイダー固有のアノテーションのアノテーション付きパッケージを取得できます。4.1 以降、Spring のスキャンは、指定された JpaVendorAdapter
でサポートされている場合(Hibernate など)、アノテーション付きパッケージも検出できます。
これらのパッケージに加えて明示的な mapping resources
が指定されていない場合、Spring のセットアップはクラスパスでデフォルトの META-INF/orm.xml
ファイルを探し、マッピングファイルが persistence.xml
ファイルと同じ場所にない場合(デフォルトで)、それをデフォルトユニットのマッピングリソースとして登録します。この場合は、標準の JPA のように、そこで定義された永続性ユニットでのみ使用することを想定しています。
NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
packagesToScan
- 通常の Spring コンポーネントの Spring のコンポーネントスキャン構成に類似した、検索する 1 つ以上の基本パッケージ setPersistenceUnitManager(org.springframework.orm.jpa.persistenceunit.PersistenceUnitManager)
, DefaultPersistenceUnitManager.setPackagesToScan(java.lang.String...)
public void setMappingResources(StringSE... mappingResources)
persistence.xml
の <mapping-file>
エントリに相当)を指定します。単独で使用することも、クラスパスでエンティティスキャンと組み合わせて使用することもできます。どちらの場合も、persistence.xml
は使用しません。 マッピングリソースは、クラスパスルートに対して相対的でなければならないことに注意してください。"META-INF/mappings.xml" または "com/mycompany/repository/mappings.xml"。これにより、ClassLoader.getResource
を介してロードできます。
packages to scan
の隣に明示的なマッピングリソースが指定されていない場合、Spring のセットアップは、クラスパスでデフォルトの META-INF/orm.xml
ファイルを探し、マッピングファイルが persistence.xml
ファイルと同じ場所にない場合(デフォルトのユニットのマッピングリソースとして登録します)ここでは、標準の JPA のように、そこで定義された永続性ユニットでのみ使用されることを想定しています。
ここで空の配列 / リストを指定すると、デフォルトの META-INF/orm.xml
チェックが抑制されることに注意してください。一方、ここで META-INF/orm.xml
を明示的に指定すると、persistence.xml
ファイルと同じ場所に配置されている場合でも、そのファイルが登録されます。
NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
public void setSharedCacheMode(SharedCacheModeEE sharedCacheMode)
persistence.xml
の値をオーバーライドします。NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
public void setValidationMode(ValidationModeEE validationMode)
persistence.xml
の値をオーバーライドします。NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
public void setDataSource(DataSourceSE dataSource)
persistence.xml
に保持する代わりに、代わりに Spring 管理の DataSource を渡します。JPA で言えば、ここで渡された DataSource は、PersistenceProvider に渡される PersistenceUnitInfo の "nonJtaDataSource" として使用され、persistence.xml
(存在する場合) のデータソース構成も上書きされます。このバリアントは通常 JTA トランザクション管理にも機能することに注意してください。機能しない場合は、代わりに明示的な setJtaDataSource(javax.sql.DataSource)
を使用することを検討してください。
NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
public void setJtaDataSource(DataSourceSE jtaDataSource)
persistence.xml
に保持する代わりに、代わりに Spring 管理の DataSource を渡します。JPA で言えば、ここで渡された DataSource は、PersistenceProvider に渡される PersistenceUnitInfo の "jtaDataSource" として使用され、persistence.xml
のデータソース構成 (存在する場合) もオーバーライドされます。
NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
public void setPersistenceUnitPostProcessors(PersistenceUnitPostProcessor... postProcessors)
このようなポストプロセッサーは、たとえば、persistence.xml
から読み取られたメタデータに加えて、さらにエンティティクラスと jar ファイルを登録できます。
NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
public void setLoadTimeWeaver(LoadTimeWeaver loadTimeWeaver)
LoadTimeWeaver を指定する必要はありません。ほとんどのプロバイダーは、クラスインストルメンテーションなしで機能のサブセットを提供したり、JVM の起動時に指定された VM エージェントで動作したりできます。
Spring が提供するウィービングオプションに関して、最も重要なのは、JVM の起動時に指定された Spring 固有の (ただし非常に一般的な) VM エージェントを必要とする InstrumentationLoadTimeWeaver と、利用可能な特定の拡張メソッドに基づいて基礎となる ClassLoader と対話する (たとえば、Spring の TomcatInstrumentableClassLoader と対話する) ReflectiveLoadTimeWeaver です。
注 : Spring 2.5 以降、コンテキストのデフォルトの LoadTimeWeaver (Bean として定義され、名前は "loadTimeWeaver" です) が使用可能な場合は自動的に選択されるため、影響を受ける各ターゲット Bean で LoadTimeWeaver を構成する必要がなくなります。このような共有 LoadTimeWeaver を作成するには、context:load-time-weaver
XML タグの使用を検討してください (デフォルトで環境を自動検出します)。
注: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。それ以外の場合、外部 PersistenceUnitManager
がウィービング構成を担当します。
LoadTimeWeaverAware
の setLoadTimeWeaver
loadTimeWeaver
- LoadTimeWeaver
インスタンス (非 null
)InstrumentationLoadTimeWeaver
, ReflectiveLoadTimeWeaver
, TomcatInstrumentableClassLoader
public void setResourceLoader(ResourceLoader resourceLoader)
ResourceLoaderAware
これは ResourcePatternResolver であり、instanceof ResourcePatternResolver
で確認できます。ResourcePatternUtils.getResourcePatternResolver
メソッドも参照してください。
通常の Bean プロパティの設定後、InitializingBean の afterPropertiesSet
またはカスタム init メソッドのような初期コールバックの前に呼び出されます。ApplicationContextAware の setApplicationContext
の前に呼び出されます。
ResourceLoaderAware
の setResourceLoader
resourceLoader
- このオブジェクトが使用する ResourceLoader オブジェクト ResourcePatternResolver
, ResourcePatternUtils.getResourcePatternResolver(org.springframework.core.io.ResourceLoader)
protected EntityManagerFactoryEE createNativeEntityManagerFactory() throws PersistenceExceptionEE
AbstractEntityManagerFactoryBean
getObject()
メソッドによって返される EntityManagerFactory を作成する必要があります。AbstractEntityManagerFactoryBean
の createNativeEntityManagerFactory
PersistenceExceptionEE
- EntityManager を作成できない場合 protected PersistenceUnitInfoEE determinePersistenceUnitInfo(PersistenceUnitManager persistenceUnitManager)
デフォルトの実装では、JPA 仕様で定義されているように、すべての永続性ユニット情報を persistence.xml
から読み取ります。エンティティマネージャー名が指定されていない場合は、リーダーから返された配列の最初の情報を取得します。それ以外の場合は、一致する名前を確認します。
persistenceUnitManager
- から取得する PersistenceUnitManagerprotected void postProcessEntityManagerFactory(EntityManagerFactoryEE emf, PersistenceUnitInfoEE pui)
デフォルトの実装は空です。
emf
- 新しく作成した EntityManagerFactory で作業しています pui
- EntityManagerFactory の構成に使用される PersistenceUnitInfoPersistenceProvider.createContainerEntityManagerFactory(javax.persistence.spi.PersistenceUnitInfo, java.util.Map)
EEpublic PersistenceUnitInfoEE getPersistenceUnitInfo()
EntityManagerFactoryInfo
EntityManagerFactoryInfo
の getPersistenceUnitInfo
AbstractEntityManagerFactoryBean
の getPersistenceUnitInfo
null
public StringSE getPersistenceUnitName()
EntityManagerFactoryInfo
null
を返します。getPersistenceUnitInfo()
が null 以外を返す場合、getPersistenceUnitName()
の結果は PersistenceUnitInfo.getPersistenceUnitName()
によって返される値と等しくなければなりません。
public DataSourceSE getDataSource()
EntityManagerFactoryInfo
EntityManagerFactoryInfo
の getDataSource
AbstractEntityManagerFactoryBean
の getDataSource
null