Электронный магазин на Java и XML

         

Служебная библиотека документа XML - часть 2


Листинг 7.37. Инструкции импорта и статические методы класса DOMlibrary (DOMIibrary.java)

package com.XmlEcomBook ;

import java.io.* ; import java.util.* ; import com.sun.xml.tree.* ; import com.sun.xml.parser.Resolver ; import org.xml.sax.* ; import org.w3c.dom.* ;

public class DOMlibrary implements java.lang.Runnable { private static DOMlibrary theLib ; private static int maxAge = 6000 ; // age in seconds public synchronized static DOMlibrary getLibrary(){ if( theLib == null ) theLib = new DOMlibrary(); return theLib ; } public static void setMaxAge(int t) { maxAge = t ;}

Как показано в листинге 7.38, единственный конструктор является закрытым (private), чтобы гарантировать, что только лишь статический метод getLibrary может создать новый объект. Резидентные объекты XML document хранятся в хэш- таблице domHash; ключом является путь к соответствующему файлу. Хэш-табли- ца с именем trackerHash, используя тот же ключ, сохраняет объект DomTracker для каждого объекта XML document. Класс DOMTracker — внутренний класс в DOMlibrary; его код приведен в листинге 7.43. Обратите внимание на то, что объекту Thread (потоку, выполняющему метод run), присвоен самый низкий приоритет.

Листинг 7.38. Конструктор и переменные экземпляра класса DOMlibrary (DOMIibrary.java)

private Hashtable domHash, trackerHash ; boolean running ; private String lastErr = "none" ; // private constructor to ensure singleton private DOMlibrary(){ domHash = new Hashtable(); trackerHash = new Hashtable(); Thread upkeep = new Thread(this,"DOMlibrary upkeep"); upkeep.setPriority( Thread.MIN_PRIORITY ); running = true ; upkeep.start(); }

Анализ документа XML в DOMlibrary осуществляется в методе loadXML, как показано в листинге 7.39. Чтобы избежать многократных попыток загрузить документ с неверно указанным атрибутом scr (путь к файлу) или документ, загрузка которого вызывает синтаксическую ошибку, этот метод помещает в таблицу domHash строку, содержащую сообщение об ошибке, если таковая встречается. Если анализ документа проходит успешно, в таблицу trackerHash записывается соответствующий объект DomTracker. Это единственный метод, в котором вызываются специфические для анализа документов методы; если бы вы вместо анализатора Sun использовали для анализа что-либо другое, вам потребовалось бы несколько модифицировать этот метод.




Содержание  Назад  Вперед