private static class PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver extends java.lang.Object implements PersistenceProviderResolver
| Modifier and Type | Class and Description |
|---|---|
private class |
PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver.CacheKey
Key used for cached persistence providers.
|
private static interface |
PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver.CacheKeyReference
The common interface to get a CacheKey implemented by
LoaderReference and PersistenceProviderReference.
|
private class |
PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver.LoaderReference
References to class loaders are weak references, so that they can be
garbage collected when nobody else is using them.
|
private class |
PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver.PersistenceProviderReference
References to persistence provider are soft references so that they can be garbage
collected when they have no hard references.
|
private class |
PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver.ProviderName
A ProviderName captures each provider name found in a service file as
well as the URL for the service file it was found in.
|
| Modifier and Type | Field and Description |
|---|---|
private java.util.logging.Logger |
logger |
private static java.lang.String |
LOGGER_SUBSYSTEM |
private static java.util.regex.Pattern |
nonCommentPattern |
private java.util.HashMap<PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver.CacheKey,PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver.PersistenceProviderReference> |
providers
Cached list of available providers cached by CacheKey to ensure
there is not potential for provider visibility issues.
|
private static java.lang.ref.ReferenceQueue |
referenceQueue
Queue for reference objects referring to class loaders or persistence providers.
|
private static java.lang.String |
SERVICE_PROVIDER_FILE |
| Modifier | Constructor and Description |
|---|---|
private |
DefaultPersistenceProviderResolver() |
| Modifier and Type | Method and Description |
|---|---|
private void |
addProviderNames(java.net.URL url,
java.util.Collection<PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver.ProviderName> providerNames)
For each services file look for uncommented provider names on each
line.
|
void |
clearCachedProviders()
Clear all cached providers
|
private static java.lang.ClassLoader |
getContextClassLoader()
Wraps
Thread.currentThread().getContextClassLoader() into a doPrivileged block if security manager is present |
java.util.List<PersistenceProvider> |
getPersistenceProviders()
Returns a list of the
PersistenceProvider implementations
available in the runtime environment. |
private java.util.Collection<PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver.ProviderName> |
getProviderNames(java.lang.ClassLoader loader)
Locate all JPA provider services files and collect all of the
provider names available.
|
private void |
log(java.util.logging.Level level,
java.lang.String message) |
private void |
processQueue()
Remove garbage collected cache keys & providers.
|
private volatile java.util.HashMap<PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver.CacheKey,PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver.PersistenceProviderReference> providers
private static final java.lang.ref.ReferenceQueue referenceQueue
private static final java.lang.String LOGGER_SUBSYSTEM
private java.util.logging.Logger logger
private static final java.lang.String SERVICE_PROVIDER_FILE
private static final java.util.regex.Pattern nonCommentPattern
public java.util.List<PersistenceProvider> getPersistenceProviders()
PersistenceProviderResolverPersistenceProvider implementations
available in the runtime environment.getPersistenceProviders in interface PersistenceProviderResolverprivate void processQueue()
private static java.lang.ClassLoader getContextClassLoader()
Thread.currentThread().getContextClassLoader() into a doPrivileged block if security manager is presentprivate void log(java.util.logging.Level level,
java.lang.String message)
private java.util.Collection<PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver.ProviderName> getProviderNames(java.lang.ClassLoader loader)
private void addProviderNames(java.net.URL url,
java.util.Collection<PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver.ProviderName> providerNames)
public void clearCachedProviders()
clearCachedProviders in interface PersistenceProviderResolver