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




Главный управляющий класс - часть 3


// return true if XML source file is found private boolean checkSrc(){ File f = new File( destPath, destFname ); return (f.exists() && f.canRead()); }

В листинге 9.22 показан метод, который создает новый экземпляр класса NewsModel и затем вызывает методы экземпляра loadXML и locateCategories. В случае ошибки переменная usabl е устанавливается равной fal se.

Листинг 9.22. Этот метод создает новый объект NewsModel (NetNewsSuper.java)

// xml source known to exist, go for it private synchronized void createModel(){ newsM = new NewsModel( destPath, destFname ); if( !newsM.loadXML()){ // error in getting data errStr = newsM.lastErr ; usable = false ; } else { newsM.locateCategories(); usable = true ; } }

Как мы увидим при обсуждении в следующем разделе классов NetNewsBean и NetNewsServ и как показано в листинге 9.23, сервлет запрашивает текущую модель NewsModel с помощью метода getNewsModel. Если она отсутствует, что может случиться из-за сбоя в сети, который прерывает нормальную работу метода run, метод getNewsModel делает попытку получить NewsModel заново.

Листинг 9.23. Метод getNewsModel возвращает NewsModel (NetNewsSuper.java)

// Note that there are two steps to getting a news //model resident: // 1. grabbing the current XML to local file if not there already // 2. creating the NewsModel from the local XML public synchronized NewsModel getNewsModel() throws Exception { if( newsM != null ) return newsM ; // must be newly created NetNewsSuper if( !checkSrc() ){ XMLgrabber grab = new XMLgrabber( sourceURL, destPath, destFname ); //System.out.println("getNewsModel runs doQueryNow"); if( !grab.doQueryNow() ){ // System.out.println(" bad return from grab"); return null ; } } // source exists, create model createModel(); return newsM ; // may or may not be usable }

Метод toString, как показано в листинге 9.24, предоставляет краткую сводку о текущем состоянии объекта NetNewSuper.

Листинг 9.24. Метод toString (NetNewsSuper.java)

public String toString() { StringBuffer sb = new StringBuffer( "NetNewsSuper for "); sb.append( sourceURL ); if( newsM == null ){ sb.append(" No NewsModel resident "); } else { sb.append(" NewsModel resident, status: " + usable ); } sb.append(" class loaded: " ); sb.append( new Date( classLoaded ).toString() ); return sb.toString() ; }

}

 




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