Листинг 7.42. Метод run и другие служебные методы (DOMIibrary.java)
// run is used for upkeep, not reading XML public void run() { while( running ){ try{ Thread.sleep( 60000 ); // example management code Enumeration keys = trackerHash.keys(); long time = System.currentTimeMillis(); while( keys.hasMoreElements() ){ String key = (String) keys.nextElement(); if(((DomTracker)trackerHash.get(key)).getAge(time) > maxAge ){ removeDOM( key ); } } }catch(InterruptedException e){ } }// end while }
public String getLastErr(){ return lastErr ; }
public String toString() { StringBuffer sb = new StringBuffer("DOMlibrary contains "); int ct = domHash.size(); if( ct > 0 ){ sb.append(Integer.toString( ct ) ); sb.append( " DOM objects "); Enumeration e = domHash.keys(); while( e.hasMoreElements() ){ String key = (String)e.nextElement(); sb.append( key ); sb.append(" " ); } } else { sb.append("no DOM objects"); } sb.append(" Last error: " ); sb.append( lastErr ); return sb.toString(); }
Экземпляр внутреннего класса DOMTracker создается всякий раз, когда загружается документ XML. Этот экземпляр подвергается обработке параллельно с самим объектом document. В нынешней версии нас интересуют только два параметра: время, когда документ XML был создан, и время, когда последний раз поступал запрос на этот документ. Как показано в листинге 7.43, метод getAge возвращает время в секундах, прошедшее с момента последнего использования документа, а метод changed проверяет время создания или последней модификации исходного файла.