/** * 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(); } }
@Override public void run() { try { log.trace("Executing metadata refresh task"); // Invoking getMetadata performs a refresh in case it's needed // Potentially expensive operation, but other threads can still load existing cached data for (MetadataProvider provider : getProviders()) { provider.getMetadata(); } // Refresh the metadataManager if needed if (isRefreshRequired()) { if (isRefreshNowAndClear()) { refreshMetadata(); } } } catch (Throwable e) { log.warn("Metadata refreshing has failed", e); } }
/** * Tries to locate ExtendedMetadata by trying one provider after another. Only providers implementing * ExtendedMetadataProvider are considered. * <p> * In case none of the providers can supply the extended version, the default is used. * <p> * A copy of the internal representation is always returned, modifying the returned object will not be reflected * in the subsequent calls. * * @param entityID entity ID to load extended metadata for * @return extended metadata or defaults * @throws MetadataProviderException never thrown */ public ExtendedMetadata getExtendedMetadata(String entityID) throws MetadataProviderException { try { lock.readLock().lock(); for (MetadataProvider provider : getProviders()) { ExtendedMetadata extendedMetadata = getExtendedMetadata(entityID, provider); if (extendedMetadata != null) { return extendedMetadata; } } return getDefaultExtendedMetadata().clone(); } finally { lock.readLock().unlock(); } }
if(metadataManager.getProviders() == null || metadataManager.getProviders().size() == 0) { if (metadataProviders.size() == 0 && metadataProviderLocations.size() > 0) { for (String metadataLocation : metadataProviderLocations) {