摘要: 可以看到,對于這個解析過程,一般的步驟就是:
A.獲取channnel下的某個子節(jié)點元素
B.如果該子節(jié)點元素有子元素或?qū)傩裕瑒t繼續(xù)遞歸訪問
C.調(diào)用該channnel子元素的createXxx方法加載或創(chuàng)建該子元素
D.調(diào)用Channel的setXxx方法添加該子元素到channel實例中
閱讀全文
posted @
2009-12-30 10:45 Paul Lin 閱讀(252) |
評論 (0) |
編輯 收藏
摘要: FeedParser是一個facade類,這個類的工作就是根據(jù)讀入的RSS Feed的協(xié)議系和版本“委托(delegate)”給已經(jīng)硬編碼的規(guī)則(concrete rules)指定的解析器,而且這些解析器是私有的。這意味著:用戶不能直接調(diào)用一個RSS_0_91_Parser類的實例來進(jìn)行解析工作。
閱讀全文
posted @
2009-12-29 15:56 Paul Lin 閱讀(1488) |
評論 (0) |
編輯 收藏
摘要: ChannelBuilder對channel object的創(chuàng)建原則就是:
A.如果能夠從持久層中找到對應(yīng)的記錄,那么從持久層返回
B.如果找不到,則創(chuàng)建它并持久化它,然后返回該對象(已持久化)
只要記得的一點就是:從ChannelBuilder返回的對象都是已經(jīng)持久化的。
閱讀全文
posted @
2009-12-28 15:57 Paul Lin 閱讀(1240) |
評論 (0) |
編輯 收藏
摘要: 經(jīng)過和impl.basic包中Channel的比較,發(fā)現(xiàn)兩者的實現(xiàn)有如下的不同:
A.構(gòu)造方法中多了3個方法,其中兩個是使用title和location來構(gòu)造的,最后一個是使用Element,title,location來構(gòu)造的
B.從Hibernate中檢索出來的是不用設(shè)置ID的,而從內(nèi)存中生成的必須使用IdGenerator產(chǎn)生唯一ID
C.basic實現(xiàn)中沒有g(shù)etLocationString方法和setLocationString方法
D.basic實現(xiàn)中沒有g(shù)etSiteString方法和setSiteString方法
E.basic實現(xiàn)中沒有g(shù)etGroup方法和setGroup方法
F.basic實現(xiàn)中沒有g(shù)etFormatString和setFormatString方法
G.basic中沒有setItems方法,而且getItems方法中的實現(xiàn)不同(basic采用了同步的hashset,而hibernate沒有)
H.basic中的addItem方法是添加到hashmap,而hib
閱讀全文
posted @
2009-12-28 10:51 Paul Lin 閱讀(233) |
評論 (0) |
編輯 收藏
摘要: 其中dbscheme是關(guān)鍵,它的主要工作包括:
A.創(chuàng)建用于保存DDL輸出結(jié)果的scripts目錄
B.定義一個名為schemaexport的Ant task,用于把hbm文件導(dǎo)出為ddl文件
C.執(zhí)行schemaexport任務(wù),把classes目錄下的hbm文件export成DDL,并輸出到指定的位置
D.輸出執(zhí)行結(jié)果信息
閱讀全文
posted @
2009-12-23 10:45 Paul Lin 閱讀(1343) |
評論 (0) |
編輯 收藏
摘要: 這個ID生成類采用了系統(tǒng)當(dāng)前時間作為隨即數(shù)產(chǎn)生的種子,這個并不難理解。但是有一個地方需要我們注意的就是關(guān)鍵字transient的使用。這個關(guān)鍵的作用是告訴編譯器假設(shè)該類的對象被序列化了,這個值不需要被保存。因為它是“瞬時”的。
閱讀全文
posted @
2009-12-23 00:03 Paul Lin 閱讀(1338) |
評論 (0) |
編輯 收藏
摘要: 在ChannelBuilder下有幾種類型的方法:
★構(gòu)造方法和初始化方法:即創(chuàng)建Channel對象的方法及初始化的方法
★元素構(gòu)建方法:即構(gòu)建Channel子元素的方法
★事務(wù)控制方法:即控制構(gòu)建,析構(gòu)過程的方法
閱讀全文
posted @
2009-12-22 23:52 Paul Lin 閱讀(1271) |
評論 (0) |
編輯 收藏
摘要: 總結(jié)起來,channel的創(chuàng)建,更新過程如下:
①接收經(jīng)過ChannelParser解析后的XML Element元素,和其他一系列屬性,調(diào)用構(gòu)造方法
②構(gòu)造方法為channel生成一個全局唯一ID
③構(gòu)造方法創(chuàng)建item列表,觀察者列表,設(shè)置好分類(Category),首次更新時間
④如果有新item到來,則添加到item列表,同時更新item的channel歸屬
⑤如果現(xiàn)有channel更新,則設(shè)置最新更新時間
⑥通知每一個已注冊的觀察者有事件發(fā)生
閱讀全文
posted @
2009-12-22 23:31 Paul Lin 閱讀(1257) |
評論 (0) |
編輯 收藏
摘要: Informa的core包介紹如下:
“This package contains interfaces for the news channel objects, it builds the core API for all news channel storage implementation. ”
從上面這句話來看,core包里面定義的都是關(guān)于“news channel objects”的接口---實際上就是RSS協(xié)議中的channel和item元素。經(jīng)過一個多小時查看源代碼和閱讀API,發(fā)現(xiàn)Informa對core包的設(shè)計有如下特點:
core包中的元素被分為標(biāo)記接口、實體接口、行為接口
閱讀全文
posted @
2009-12-21 22:09 Paul Lin 閱讀(1246) |
評論 (0) |
編輯 收藏
摘要: Informa的API結(jié)構(gòu)如下:
★core包:
核心包。訂閱了RSS中channel,item等一系列元素和元數(shù)據(jù)的接口
★impl.basic包:
基本功能包。使用in-memory模式實現(xiàn)了core包訂閱的接口
★impl.hibernate包:
基于hibernate實現(xiàn)的包,使用關(guān)系型數(shù)據(jù)庫模式實現(xiàn)了core包定義的接口
★parsers包:
定義了永遠(yuǎn)解析channel,item的解析器工具
★exporters包:
定義了一組把channel,item導(dǎo)出成各種協(xié)議格式的工具
★search包:
定義了用于全文搜索channel,item的工具
★utils.manager.memory包:
定義了一組用于管理“in-memory”模式持久化的工具
★utils.manager.hibernate包:
閱讀全文
posted @
2009-12-21 15:39 Paul Lin 閱讀(1259) |
評論 (0) |
編輯 收藏