public void refresh() throws FlowDefinitionConstructionException { if (logger.isDebugEnabled()) { logger.debug("Refreshing flow definition registry '" + this + "'"); } ClassLoader loader = Thread.currentThread().getContextClassLoader(); try { // workaround for JMX Thread.currentThread().setContextClassLoader(getClass().getClassLoader()); LinkedList needsReindexing = new LinkedList(); Iterator it = flowDefinitions.entrySet().iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); String key = (String) entry.getKey(); FlowDefinitionHolder holder = (FlowDefinitionHolder) entry.getValue(); holder.refresh(); if (!holder.getFlowDefinitionId().equals(key)) { needsReindexing.add(new Indexed(key, holder)); } } it = needsReindexing.iterator(); while (it.hasNext()) { Indexed indexed = (Indexed) it.next(); reindex(indexed.holder, indexed.key); } } finally { Thread.currentThread().setContextClassLoader(loader); } }