public class DefaultPersistenceUnitManager extends ObjectSE implements PersistenceUnitManager, ResourceLoaderAware, LoadTimeWeaverAware, InitializingBean
PersistenceUnitManager
インターフェースのデフォルトの実装。LocalContainerEntityManagerFactoryBean
によって内部デフォルトとして使用されます。persistence.xml
ファイルの標準 JPA スキャンをサポートし、構成可能なファイルの場所、JDBC DataSource ルックアップ、およびロード時のウィービングを備えています。
デフォルトの XML ファイルの場所は classpath*:META-INF/persistence.xml
で、クラスパス内の一致するすべてのファイルをスキャンします(JPA 仕様で定義されています)。DataSource 名はデフォルトで JNDI 名として解釈され、ロード時のウィービングは使用できません(永続プロバイダーでウィービングをオフにする必要があります)。
NOTE: Spring の JPA サポートには、Spring 5.0 以降の JPA 2.1 以降が必要です。
setPersistenceXmlLocations(java.lang.String...)
, setDataSourceLookup(org.springframework.jdbc.datasource.lookup.DataSourceLookup)
, setLoadTimeWeaver(org.springframework.instrument.classloading.LoadTimeWeaver)
, LocalContainerEntityManagerFactoryBean.setPersistenceUnitManager(org.springframework.orm.jpa.persistenceunit.PersistenceUnitManager)
修飾子と型 | フィールドと説明 |
---|---|
static StringSE | DEFAULT_PERSISTENCE_XML_LOCATION persistence.xml ファイルのデフォルトの場所: "classpath *:META-INF/persistence.xml"。 |
protected Log | logger |
static StringSE | ORIGINAL_DEFAULT_PERSISTENCE_UNIT_NAME デフォルトの永続性ユニット名。 |
static StringSE | ORIGINAL_DEFAULT_PERSISTENCE_UNIT_ROOT_LOCATION 永続性ユニットのルート URL のデフォルトの場所: "classpath:"。クラスパスのルートを示します。 |
コンストラクターと説明 |
---|
DefaultPersistenceUnitManager() |
修飾子と型 | メソッドと説明 |
---|---|
void | afterPropertiesSet() |
DataSourceLookup | getDataSourceLookup() 永続性プロバイダーに DataSources を提供する JDBC DataSourceLookup を返し、Spring 管理の DataSource インスタンスに対して persistence.xml のデータソース名を解決します。 |
DataSourceSE | getDefaultDataSource() persistence.xml で何も指定されていない場合、JPA 永続性プロバイダーがデータベースへのアクセスに使用することになっている JDBC DataSource を返します。 |
DataSourceSE | getDefaultJtaDataSource() persistence.xml で何も指定されていない場合、JPA 永続プロバイダーがデータベースへのアクセスに使用することになっている JTA 対応 DataSource を返します。 |
LoadTimeWeaver | getLoadTimeWeaver() JPA クラストランスフォーマ契約に従ってクラスインスツルメンテーションに使用する Spring LoadTimeWeaver を返します。 |
protected MutablePersistenceUnitInfo | getPersistenceUnitInfo(StringSE persistenceUnitName) 処理された永続性ユニットのこのマネージャーのキャッシュから指定された PersistenceUnitInfo を返し、キャッシュに保持します(つまり |
PersistenceUnitPostProcessor[] | getPersistenceUnitPostProcessors() このマネージャーによって解析された各 PersistenceUnitInfo に適用される PersistenceUnitPostProcessors を返します。 |
protected boolean | isPersistenceUnitOverrideAllowed() 同じ名前の永続性ユニットのオーバーライドが許可されているかどうかを返します。 |
PersistenceUnitInfoEE | obtainDefaultPersistenceUnitInfo() このマネージャーからデフォルトの PersistenceUnitInfo を取得します。 |
PersistenceUnitInfoEE | obtainPersistenceUnitInfo(StringSE persistenceUnitName) このマネージャーから指定された PersistenceUnitInfo を取得します。 |
protected void | postProcessPersistenceUnitInfo(MutablePersistenceUnitInfo pui) サブクラスが各 PersistenceUnitInfo をカスタマイズできるようにするフックメソッド。 |
void | preparePersistenceUnitInfos() このマネージャーの構成に従って PersistenceUnitInfos を準備します。 persistence.xml ファイルのスキャン、一致するすべてのファイルの解析、それらの構成と後処理。 |
void | setDataSourceLookup(DataSourceLookup dataSourceLookup) 永続性プロバイダーに DataSources を提供する JDBC DataSourceLookup を指定し、Spring 管理の DataSource インスタンスに対して persistence.xml のデータソース名を解決します。 |
void | setDataSources(MapSE<StringSE, DataSourceSE> dataSources) JPA 永続プロバイダーがデータベースへのアクセスに使用することになっている JDBC DataSources を指定し、Spring 管理の DataSources に対して persistence.xml のデータソース名を解決します。 |
void | setDefaultDataSource(DataSourceSE defaultDataSource) persistence.xml で何も指定されていない場合に、JPA 永続性プロバイダーがデータベースへのアクセスに使用することになっている JDBC DataSource を指定します。 |
void | setDefaultJtaDataSource(DataSourceSE defaultJtaDataSource) persistence.xml で何も指定されていない場合に、JPA 永続性プロバイダーがデータベースへのアクセスに使用することになっている JDBC DataSource を指定します。 |
void | setDefaultPersistenceUnitName(StringSE defaultPersistenceUnitName) デフォルトの永続性ユニットの名前がある場合は、それを指定します。 |
void | setDefaultPersistenceUnitRootLocation(StringSE defaultPersistenceUnitRootLocation) ユニット固有の永続性単位根を決定できなかった場合に適用される、デフォルトの永続性単位根の場所を設定します。 |
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 | setPersistenceUnitPostProcessors(PersistenceUnitPostProcessor... postProcessors) このマネージャーによって解析された各 PersistenceUnitInfo に適用される PersistenceUnitPostProcessors を設定します。 |
void | setPersistenceXmlLocation(StringSE persistenceXmlLocation) ロードする persistence.xml ファイルの場所を指定します。 |
void | setPersistenceXmlLocations(StringSE... persistenceXmlLocations) ロードする 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 の値をオーバーライドします。 |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public static final StringSE DEFAULT_PERSISTENCE_XML_LOCATION
persistence.xml
ファイルのデフォルトの場所: "classpath *:META-INF/persistence.xml"。public static final StringSE ORIGINAL_DEFAULT_PERSISTENCE_UNIT_ROOT_LOCATION
public static final StringSE ORIGINAL_DEFAULT_PERSISTENCE_UNIT_NAME
protected final Log logger
public void setPersistenceXmlLocation(StringSE persistenceXmlLocation)
persistence.xml
ファイルの場所を指定します。これらは、Spring リソースの場所および / または場所のパターンとして指定できます。デフォルトは "classpath *:META-INF/persistence.xml" です。
public void setPersistenceXmlLocations(StringSE... persistenceXmlLocations)
persistence.xml
ファイルの複数の場所を指定します。これらは、Spring リソースの場所および / または場所のパターンとして指定できます。デフォルトは "classpath *:META-INF/persistence.xml" です。
persistenceXmlLocations
- 読み取る persistence.xml
ファイルの場所を識別する Spring リソース文字列の配列 public void setDefaultPersistenceUnitRootLocation(StringSE defaultPersistenceUnitRootLocation)
デフォルトは "classpath:"、つまり現在のクラスパスのルート(最も近いルートディレクトリ)です。ユニット固有の解決が機能せず、クラスパスのルートも適切でない場合はオーバーライドされます。
public void setDefaultPersistenceUnitName(StringSE defaultPersistenceUnitName)
主に、persistence.xml
なしでスキャンされた永続性ユニットに適用されます。使用可能ないくつかの永続ユニットからデフォルトユニットを選択する場合にも適用できます。
public void setPackagesToScan(StringSE... packagesToScan)
persistence.xml
マーカーが含まれている jar ファイルの JPA の標準スキャンを使用する代わりに、クラスパスのエンティティクラスに対して Spring ベースのスキャンを使用するかどうかを設定します。Spring ベースのスキャンの場合、persistence.xml
は必要ありません。ここで検索するベースパッケージを指定するだけです。 デフォルトはなしです。クラスパスでエンティティクラスの自動検出を検索するパッケージを指定します。これは、Spring のコンポーネントスキャン機能(ClassPathBeanDefinitionScanner
)に類似しています。
このようなパッケージスキャンは、Spring で「デフォルトの永続性ユニット」を定義します。これは、persistence.xml
から発信される定期的に定義されたユニットの隣に存在する可能性があります。その名前は setDefaultPersistenceUnitName(java.lang.String)
によって決定されます。デフォルトでは、単に "default" です。
注: 通常の JPA スキャンと比較すると、制限がある場合があります。特に、JPA プロバイダーは、persistence.xml
によって駆動される場合にのみ、プロバイダー固有のアノテーションのアノテーション付きパッケージを取得できます。4.1 以降、Spring のスキャンは、指定された JpaVendorAdapter
(Hibernate など)でサポートされている場合、アノテーション付きパッケージも検出できます。
これらのパッケージに加えて明示的な mapping resources
が指定されていない場合、このマネージャーはクラスパスでデフォルトの META-INF/orm.xml
ファイルを検索し、マッピングファイルが persistence.xml
ファイルと同じ場所に配置されていない場合はデフォルトユニットのマッピングリソースとして登録します(この場合、標準の JPA のように、そこで定義されている永続性ユニットでのみ使用することを意図していると想定します。
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
の横に明示的なマッピングリソースが指定されていない場合、このマネージャーはクラスパスでデフォルトの META-INF/orm.xml
ファイルを検索し、マッピングファイルが persistence.xml
ファイルと同じ場所に配置されていない場合はデフォルトユニットのマッピングリソースとして登録します(標準の JPA のように、そこで定義されている永続性ユニットでのみ使用されることを想定している場合)。
ここで空の配列 / リストを指定すると、デフォルトの META-INF/orm.xml
チェックが抑制されることに注意してください。一方、ここで META-INF/orm.xml
を明示的に指定すると、persistence.xml
ファイルと同じ場所に配置されている場合でも、そのファイルが登録されます。
public void setSharedCacheMode(SharedCacheModeEE sharedCacheMode)
persistence.xml
の値をオーバーライドします。PersistenceUnitInfo.getSharedCacheMode()
EEpublic void setValidationMode(ValidationModeEE validationMode)
persistence.xml
の値をオーバーライドします。PersistenceUnitInfo.getValidationMode()
EEpublic void setDataSources(MapSE<StringSE,DataSourceSE> dataSources)
persistence.xml
のデータソース名を解決します。 指定されたマップは、特定の DataSource オブジェクトのデータソース名を定義する必要があり、persistence.xml
で使用されるデータソース名と一致します。指定しない場合、データソース名は代わりに JNDI 名として解決されます(標準 JPA で定義されています)。
MapDataSourceLookup
public void setDataSourceLookup(@Nullable DataSourceLookup dataSourceLookup)
persistence.xml
のデータソース名を解決します。デフォルトは JndiDataSourceLookup で、DataSource 名を JNDI 名として解決します(標準 JPA で定義されています)。DataSource 名を Spring Bean 名に対して解決する場合は、BeanFactoryDataSourceLookup インスタンスを指定します。
あるいは、"dataSources" プロパティを介して名前から DataSource インスタンスへのマップを渡すことを検討してください。persistence.xml
ファイルで DataSource 名がまったく定義されていない場合は、"defaultDataSource" プロパティを介してデフォルトの DataSource を指定します。
@Nullable public DataSourceLookup getDataSourceLookup()
persistence.xml
のデータソース名を解決します。public void setDefaultDataSource(@Nullable DataSourceSE defaultDataSource)
persistence.xml
で何も指定されていない場合に、JPA 永続性プロバイダーがデータベースへのアクセスに使用することになっている JDBC DataSource を指定します。このバリアントは、特別なトランザクション設定がないこと、つまり一般的なリソースローカルを示します。JPA では、ここで渡される DataSource は、以前に登録されていない限り、PersistenceProvider に渡される PersistenceUnitInfo の "nonJtaDataSource" として使用されます。
@Nullable public DataSourceSE getDefaultDataSource()
persistence.xml
で何も指定されていない場合、JPA 永続性プロバイダーがデータベースへのアクセスに使用することになっている JDBC DataSource を返します。public void setDefaultJtaDataSource(@Nullable DataSourceSE defaultJtaDataSource)
persistence.xml
で何も指定されていない場合に、JPA 永続性プロバイダーがデータベースへのアクセスに使用することになっている JDBC DataSource を指定します。このバリアントは、JTA がトランザクション型として使用されることになっていることを示します。JPA では、ここで渡される DataSource は、以前に登録されていない限り、PersistenceProvider に渡される PersistenceUnitInfo の "jtaDataSource" として使用されます。
@Nullable public DataSourceSE getDefaultJtaDataSource()
persistence.xml
で何も指定されていない場合、JPA 永続プロバイダーがデータベースへのアクセスに使用することになっている JTA 対応 DataSource を返します。public void setPersistenceUnitPostProcessors(@Nullable PersistenceUnitPostProcessor... postProcessors)
このようなポストプロセッサーは、たとえば、persistence.xml
から読み取られたメタデータに加えて、さらにエンティティクラスと jar ファイルを登録できます。
@Nullable public PersistenceUnitPostProcessor[] getPersistenceUnitPostProcessors()
public void setLoadTimeWeaver(@Nullable LoadTimeWeaver loadTimeWeaver)
LoadTimeWeaver を指定する必要はありません。ほとんどのプロバイダーは、クラスインストルメンテーションなしで機能のサブセットを提供することも、JVM の起動時に指定された独自の VM エージェントで動作することもできます。さらに、Spring のエージェントベースのインストルメンテーションが実行時に利用可能な場合、DefaultPersistenceUnitManager は InstrumentationLoadTimeWeaver にフォールバックします。
Spring が提供するウィービングオプションに関して、最も重要なものは、JVM の起動時に指定された Spring 固有の(ただし非常に一般的な)VM エージェントを必要とする InstrumentationLoadTimeWeaver と、利用可能な特定の拡張メソッドに基づいて基盤となる ClassLoader と対話する ReflectiveLoadTimeWeaver です。その上で(たとえば、Spring の TomcatInstrumentableClassLoader との対話)。このような共有 LoadTimeWeaver を作成するために context:load-time-weaver
XML タグを使用することを検討してください(デフォルトでは環境を自動検出します)。
LoadTimeWeaverAware
の setLoadTimeWeaver
loadTimeWeaver
- LoadTimeWeaver
インスタンス (非 null
)InstrumentationLoadTimeWeaver
, ReflectiveLoadTimeWeaver
@Nullable public LoadTimeWeaver getLoadTimeWeaver()
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)
public void afterPropertiesSet()
InitializingBean
BeanFactoryAware
、ApplicationContextAware
などを満たした後、包含 BeanFactory
によって呼び出されます。このメソッドにより、Bean インスタンスは、すべての Bean プロパティが設定されたときに、その全体的な構成の検証と最終的な初期化を実行できます。
InitializingBean
の afterPropertiesSet
public void preparePersistenceUnitInfos()
persistence.xml
ファイルのスキャン、一致するすべてのファイルの解析、それらの構成と後処理。この準備メソッドが呼び出されるまで、PersistenceUnitInfos を取得することはできません。
@Nullable protected final MutablePersistenceUnitInfo getPersistenceUnitInfo(StringSE persistenceUnitName)
これは postProcessPersistenceUnitInfo(org.springframework.orm.jpa.persistenceunit.MutablePersistenceUnitInfo)
実装で使用でき、同じ名前の既存の永続性ユニットを検出し、マージする可能性があります。
persistenceUnitName
- 目的の永続性ユニットの名前 null
protected void postProcessPersistenceUnitInfo(MutablePersistenceUnitInfo pui)
デフォルトの実装は、登録されているすべての PersistenceUnitPostProcessors に委譲します。ポストプロセッサーを再利用できるようにするには、通常、このマネージャーのサブクラスではなく、エンティティクラスや jar ファイルなどをさらに登録することをお勧めします。
pui
- persistence.xml
から読み取られた、選択された PersistenceUnitInfo MutablePersistenceUnitInfo として渡されます。setPersistenceUnitPostProcessors(org.springframework.orm.jpa.persistenceunit.PersistenceUnitPostProcessor...)
protected boolean isPersistenceUnitOverrideAllowed()
デフォルトは false
です。たとえば、postProcessPersistenceUnitInfo(org.springframework.orm.jpa.persistenceunit.MutablePersistenceUnitInfo)
がそのケースを処理できる場合、true
を返すためにオーバーライドされる可能性があります。
public PersistenceUnitInfoEE obtainDefaultPersistenceUnitInfo()
PersistenceUnitManager
PersistenceUnitManager
の obtainDefaultPersistenceUnitInfo
null
)public PersistenceUnitInfoEE obtainPersistenceUnitInfo(StringSE persistenceUnitName)
PersistenceUnitManager
PersistenceUnitManager
の obtainPersistenceUnitInfo
persistenceUnitName
- 目的の永続性ユニットの名前 null
)