Top Description Inners Fields Constructors Methods
jakarta.persistence.spi

public Class PersistenceProviderResolverHolder

extends Object
Class Inheritance
Imports
java.lang.ref.ReferenceQueue, .SoftReference, .WeakReference, java.security.AccessController, .PrivilegedAction, java.util.ArrayList, .List, .HashMap, .Iterator, .ServiceConfigurationError, .ServiceLoader, java.util.logging.Level, .Logger

Holds the global PersistenceProviderResolver instance. If no PersistenceProviderResolver is set by the environment, the default PersistenceProviderResolver is used.

Enable "jakarta.persistence.spi" logger to show diagnostic information.

Implementations must be thread-safe.

Since
2.0

Nested and Inner Type Summary

Modifier and TypeClass and Description
private static class
PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver

Default provider resolver class to use when none is explicitly set.

Field Summary

Modifier and TypeField and Description
private static PersistenceProviderResolver

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
public static PersistenceProviderResolver

Returns:

the current persistence provider resolver
getPersistenceProviderResolver
()

Returns the current persistence provider resolver.

public static void
setPersistenceProviderResolver(PersistenceProviderResolver
persistence provider resolver to be used.
resolver
)

Defines the persistence provider resolver used.

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

singletonback to summary
private static PersistenceProviderResolver singleton

Constructor Detail

PersistenceProviderResolverHolderback to summary
public PersistenceProviderResolverHolder()

Method Detail

getPersistenceProviderResolverback to summary
public static PersistenceProviderResolver getPersistenceProviderResolver()

Returns the current persistence provider resolver.

Returns:PersistenceProviderResolver

the current persistence provider resolver

setPersistenceProviderResolverback to summary
public static void setPersistenceProviderResolver(PersistenceProviderResolver resolver)

Defines the persistence provider resolver used.

Parameters
resolver:PersistenceProviderResolver

persistence provider resolver to be used.

jakarta.persistence.spi back to summary

private Class PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver

extends Object
implements PersistenceProviderResolver
Class Inheritance
  • java.lang.Object
  • jakarta.persistence.spi.PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver
All Implemented Interfaces
jakarta.persistence.spi.PersistenceProviderResolver

Default provider resolver class to use when none is explicitly set.

Uses service loading mechanism as described in the Jakarta Persistence specification. A ServiceLoader.load() call is made with the current context classloader to find the service provider files on the classpath.

Nested and Inner Type Summary

Modifier and TypeClass and Description
private class
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.

Field Summary

Modifier and TypeField and Description
private Logger
private static final String
private volatile 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 final ReferenceQueue<T>
referenceQueue

Queue for reference objects referring to class loaders or persistence providers.

Constructor Summary

AccessConstructor and Description
private

Method Summary

Modifier and TypeMethod and Description
public void
private static ClassLoader
getContextClassLoader()

Wraps Thread.currentThread().getContextClassLoader() into a doPrivileged block if security manager is present

public List<PersistenceProvider>
getPersistenceProviders()

Implements jakarta.persistence.spi.PersistenceProviderResolver.getPersistenceProviders.

Returns a list of the persistence provider implementations available in the runtime environment.

private void
log(Level level, String message)

private void
processQueue()

Remove garbage collected cache keys & providers.

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

loggerback to summary
private Logger logger
LOGGER_SUBSYSTEMback to summary
private static final String LOGGER_SUBSYSTEM
providersback to summary
private volatile 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.

referenceQueueback to summary
private static final ReferenceQueue<T> referenceQueue

Queue for reference objects referring to class loaders or persistence providers.

Constructor Detail

DefaultPersistenceProviderResolverback to summary
private DefaultPersistenceProviderResolver()

Method Detail

clearCachedProvidersback to summary
public void clearCachedProviders()

Implements jakarta.persistence.spi.PersistenceProviderResolver.clearCachedProviders.

Clear all cached providers

getContextClassLoaderback to summary
private static ClassLoader getContextClassLoader()

Wraps Thread.currentThread().getContextClassLoader() into a doPrivileged block if security manager is present

getPersistenceProvidersback to summary
public List<PersistenceProvider> getPersistenceProviders()

Implements jakarta.persistence.spi.PersistenceProviderResolver.getPersistenceProviders.

Doc from jakarta.persistence.spi.PersistenceProviderResolver.getPersistenceProviders.

Returns a list of the persistence provider implementations available in the runtime environment.

Returns:List<PersistenceProvider>

list of the persistence providers available in the environment

logback to summary
private void log(Level level, String message)
processQueueback to summary
private void processQueue()

Remove garbage collected cache keys & providers.

jakarta.persistence.spi back to summary

private Class PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver.CacheKey

extends Object
implements Cloneable
Class Inheritance
  • java.lang.Object
  • jakarta.persistence.spi.PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver.CacheKey
All Implemented Interfaces
java.lang.Cloneable

Key used for cached persistence providers. The key checks the class loader to determine if the persistence providers is a match to the requested one. The loader may be null.

Field Summary

Modifier and TypeField and Description
private int
private PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver.LoaderReference

Constructor Summary

AccessConstructor and Description
pack-priv

Method Summary

Modifier and TypeMethod and Description
private void
public Object
clone()

Overrides java.lang.Object.clone.

Creates and returns a copy of this object.

public boolean
equals(Object
the reference object with which to compare.
other
)

Overrides java.lang.Object.equals.

Indicates whether some other object is "equal to" this one.

pack-priv ClassLoader
public int
hashCode()

Overrides java.lang.Object.hashCode.

Returns a hash code value for this object.

public String
toString()

Overrides java.lang.Object.toString.

Returns a string representation of the object.

Inherited from java.lang.Object:
finalizegetClassnotifynotifyAllwaitwaitwait

Field Detail

hashCodeCacheback to summary
private int hashCodeCache
loaderRefback to summary
private PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver.LoaderReference loaderRef

Constructor Detail

CacheKeyback to summary
pack-priv CacheKey(ClassLoader loader)

Method Detail

calculateHashCodeback to summary
private void calculateHashCode()
cloneback to summary
public Object clone()

Overrides java.lang.Object.clone.

Doc from java.lang.Object.clone.

Creates and returns a copy of this object. The precise meaning of "copy" may depend on the class of the object. The general intent is that, for any object x, the expression:

x.clone() != x
will be true, and that the expression:
x.clone().getClass() == x.getClass()
will be true, but these are not absolute requirements. While it is typically the case that:
x.clone().equals(x)
will be true, this is not an absolute requirement.

By convention, the returned object should be obtained by calling super.clone. If a class and all of its superclasses (except Object) obey this convention, it will be the case that x.clone().getClass() == x.getClass().

By convention, the object returned by this method should be independent of this object (which is being cloned). To achieve this independence, it may be necessary to modify one or more fields of the object returned by super.clone before returning it. Typically, this means copying any mutable objects that comprise the internal "deep structure" of the object being cloned and replacing the references to these objects with references to the copies. If a class contains only primitive fields or references to immutable objects, then it is usually the case that no fields in the object returned by super.clone need to be modified.

Returns:Object

a clone of this instance.

equalsback to summary
public boolean equals(Object other)

Overrides java.lang.Object.equals.

Doc from java.lang.Object.equals.

Indicates whether some other object is "equal to" this one.

The equals method implements an equivalence relation on non-null object references:

  • It is reflexive: for any non-null reference value x, x.equals(x) should return true.
  • It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.
  • It is transitive: for any non-null reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true.
  • It is consistent: for any non-null reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the objects is modified.
  • For any non-null reference value x, x.equals(null) should return false.

An equivalence relation partitions the elements it operates on into equivalence classes; all the members of an equivalence class are equal to each other. Members of an equivalence class are substitutable for each other, at least for some purposes.

Parameters
other:Object

the reference object with which to compare.

Returns:boolean

true if this object is the same as the obj argument; false otherwise.

getLoaderback to summary
pack-priv ClassLoader getLoader()
hashCodeback to summary
public int hashCode()

Overrides java.lang.Object.hashCode.

Doc from java.lang.Object.hashCode.

Returns a hash code value for this object. This method is supported for the benefit of hash tables such as those provided by java.util.HashMap.

The general contract of hashCode is:

  • Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no information used in equals comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application.
  • If two objects are equal according to the equals method, then calling the hashCode method on each of the two objects must produce the same integer result.
  • It is not required that if two objects are unequal according to the equals method, then calling the hashCode method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hash tables.
Returns:int

a hash code value for this object

toStringback to summary
public String toString()

Overrides java.lang.Object.toString.

Doc from java.lang.Object.toString.

Returns a string representation of the object. Satisfying this method's contract implies a non-null result must be returned.

Returns:String

a string representation of the object

jakarta.persistence.spi back to summary

private Interface PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver.CacheKeyReference

Known Direct Implementers
jakarta.persistence.spi.PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver.LoaderReference, jakarta.persistence.spi.PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver.PersistenceProviderReference

The common interface to get a CacheKey implemented by LoaderReference and PersistenceProviderReference.

Method Summary

Modifier and TypeMethod and Description
public PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver.CacheKey
jakarta.persistence.spi back to summary

private Class PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver.LoaderReference

extends WeakReference<ClassLoader>
implements CacheKeyReference
Class Inheritance
All Implemented Interfaces
jakarta.persistence.spi.PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver.CacheKeyReference

References to class loaders are weak references, so that they can be garbage collected when nobody else is using them. The DefaultPersistenceProviderResolver class has no reason to keep class loaders alive.

Field Summary

Modifier and TypeField and Description
private PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver.CacheKey

Constructor Summary

AccessConstructor and Description
pack-priv

Constructor Detail

LoaderReferenceback to summary
pack-priv LoaderReference(ClassLoader referent, ReferenceQueue<T> q, PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver.CacheKey key)
Annotations
@SuppressWarnings:unchecked
jakarta.persistence.spi back to summary

private Class PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver.PersistenceProviderReference

extends SoftReference<List<PersistenceProvider>>
implements CacheKeyReference
Class Inheritance
All Implemented Interfaces
jakarta.persistence.spi.PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver.CacheKeyReference

References to persistence provider are soft references so that they can be garbage collected when they have no hard references.

Field Summary

Modifier and TypeField and Description
private PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver.CacheKey

Constructor Detail

PersistenceProviderReferenceback to summary
pack-priv PersistenceProviderReference(List<PersistenceProvider> referent, ReferenceQueue<T> q, PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver.CacheKey key)
Annotations
@SuppressWarnings:unchecked