/** * Note that the PersistenceProviderResolver.getPersistenceProviders() method can potentially be called many times. It is * therefore recommended that the implementation of this method make use of caching.<br> * This is why there is a cache mechanism * @return current persistence providers associated to the current CL. */ public List<PersistenceProvider> getPersistenceProviders() { // Get current classloader ClassLoader currentCL = Thread.currentThread().getContextClassLoader(); // Get current list of providers for the given classloader List<PersistenceProvider> availablePersistenceProviders = null; synchronized (persistenceProviders) { availablePersistenceProviders = persistenceProviders.get(currentCL); if (availablePersistenceProviders == null) { findPersistenceProviders(currentCL); availablePersistenceProviders = persistenceProviders.get(currentCL); } } return availablePersistenceProviders; }