docs: @Override
      public List<PersistenceProvider> getPersistenceProviders() {
          // try to get the context classloader first, if that fails, use the loader
          // that loaded this class
          ClassLoader cl = PrivClassLoader.get(null);
          if (cl == null) {
              cl = PrivClassLoader.get(HybridPersistenceActivator.class);
          }
          // Query the provider cache per-classloader
          List<PersistenceProvider> nonOSGiProviders = providerCache.get(cl);
          // Get all providers not registered in OSGi.  These will be any third-party providers
          // available to the application classloader.
          if (nonOSGiProviders == null) {
              nonOSGiProviders = new ArrayList<PersistenceProvider>();
              try {
                  List<Object> providers = ProviderLocator.getServices(PersistenceProvider.class.getName(), getClass(), cl);
                  for (Iterator<Object> provider = providers.iterator(); provider.hasNext();) {
                      Object o = provider.next();
                      if (o instanceof PersistenceProvider) {
                          nonOSGiProviders.add((PersistenceProvider) o);
                      }
                  }
                  // load the providers into the provider cache for the context (or current) classloader
                  providerCache.put(cl, nonOSGiProviders);
              } catch (Exception e) {
                  throw new PersistenceException("Failed to load provider from META-INF/services", e);
              }
          }
          List<PersistenceProvider> combinedProviders = new ArrayList<PersistenceProvider>(nonOSGiProviders);
          combinedProviders.addAll(super.getPersistenceProviders());
          return combinedProviders;
      }