/** * {@inheritDoc} */ public void onEvent(MetadataProvider provider) { setRefreshRequired(true); }
@Override public void setProviders(List<MetadataProvider> newProviders) throws MetadataProviderException { try { lock.writeLock().lock(); availableProviders.clear(); if (newProviders != null) { for (MetadataProvider provider : newProviders) { addMetadataProvider(provider); } } } finally { lock.writeLock().unlock(); } setRefreshRequired(true); }
/** * Determines whether metadata requires refresh and if so clears the flag. * * @return true in case refresh should be performed */ private boolean isRefreshNowAndClear() { try { // Prevent anyone from changing the refresh status during reload to avoid missed calls refreshLock.writeLock().lock(); // Make sure refresh is really necessary if (!isRefreshRequired()) { log.debug("Refresh is not required, isRefreshRequired flag isn't set"); return false; } // Clear the refresh flag setRefreshRequired(false); } finally { refreshLock.writeLock().unlock(); } return true; }
/** * Removes existing metadata provider from the availability list. Provider will be completely removed * during next manager refresh. * * @param provider provider to remove */ @Override public void removeMetadataProvider(MetadataProvider provider) { if (provider == null) { throw new IllegalArgumentException("Null provider can't be removed"); } try { lock.writeLock().lock(); ExtendedMetadataDelegate wrappedProvider = getWrappedProvider(provider); availableProviders.remove(wrappedProvider); } finally { lock.writeLock().unlock(); } setRefreshRequired(true); }
/** * Adds a new metadata provider to the managed list. At first provider is only registered and will be validated * upon next round of metadata refreshing or call to refreshMetadata. * <p> * Unless provider already extends class ExtendedMetadataDelegate it will be automatically wrapped in it as part of the * addition. * * @param newProvider provider * @throws MetadataProviderException in case provider can't be added */ @Override public void addMetadataProvider(MetadataProvider newProvider) throws MetadataProviderException { if (newProvider == null) { throw new IllegalArgumentException("Null provider can't be added"); } try { lock.writeLock().lock(); ExtendedMetadataDelegate wrappedProvider = getWrappedProvider(newProvider); availableProviders.add(wrappedProvider); } finally { lock.writeLock().unlock(); } setRefreshRequired(true); }
/** * Stops and removes the timer in case it was started. Cleans all metadata objects. */ public void destroy() { try { refreshLock.writeLock().lock(); lock.writeLock().lock(); for (MetadataProvider provider : getProviders()) { if (provider instanceof ExtendedMetadataDelegate) { ((ExtendedMetadataDelegate) provider).destroy(); } } super.destroy(); if (timer != null) { timer.cancel(); timer.purge(); timer = null; } // Workaround for Tomcat detection of terminated threads try { Thread.sleep(1000); } catch (InterruptedException ie) { } setRefreshRequired(false); } finally { lock.writeLock().unlock(); refreshLock.writeLock().unlock(); } }
metadataManager.setRefreshRequired(true); metadataManager.afterPropertiesSet();