1. 解決了有時(shí)發(fā)現(xiàn)程序結(jié)束不了的問題,根本原因在于有一個(gè)set沒有同步,改為
hasDetected = Collections.synchronizedSet(new HashSet<String>())
后,問題解決。
2. 更改了路由發(fā)現(xiàn)中關(guān)于子網(wǎng)的一個(gè)bug:
原代碼:
if(!pool.existSubnet(subnet)){
engine.addSubnet(subnet);
router.addSubnet(subnet);
}
改為:
Subnet subnet = pool.getSubnetByIP(item.getDest());
if(subnet==null){ //if subnet doesn't exist
subnet = new Subnet();
subnet.setNetAddress(item.getDest());
subnet.setNetMask(item.getNetMask());
engine.addSubnet(subnet);
}
router.addSubnet(subnet);
3. 2.0中只能對一個(gè)網(wǎng)絡(luò)進(jìn)行發(fā)現(xiàn),3.0可以對多個(gè)網(wǎng)絡(luò)進(jìn)行發(fā)現(xiàn),畫出多個(gè)拓?fù)鋱D。
4. 2.0中只能有一個(gè)發(fā)現(xiàn)范圍,3.0可以增加多個(gè)發(fā)現(xiàn)范圍。
5. 2.0中各表之間沒有關(guān)聯(lián),初始化時(shí)要執(zhí)行多條SQL代碼,3.0中利用表外鍵,
只要刪除一條記錄,就可以刪除所有相關(guān)數(shù)據(jù)。
6. 3.0在發(fā)現(xiàn)完之后,保存所有設(shè)備的SNMP表數(shù)據(jù)。
7. 3.0為再發(fā)現(xiàn)留有接口,使拓?fù)湓侔l(fā)現(xiàn)成為可能,只是暫時(shí)沒時(shí)間去實(shí)現(xiàn)。
8. 拓?fù)涔?jié)點(diǎn)排序算法以及拓?fù)鋱D的生成
排序算法 MapCompositor 給它節(jié)點(diǎn)以及連接,按一定算法計(jì)算出各節(jié)點(diǎn)的位置坐標(biāo)。
DefaultCompositor實(shí)現(xiàn)接口computeCoordinate,把節(jié)點(diǎn)按排成若干個(gè)圓。
用DefaultMapBuilder dmb = new DefaultMapBuilder();
dmb.buildMap(config.getId());
來測試排序算法,因?yàn)樗灰玫絻?nèi)存中的數(shù)據(jù),直接取數(shù)據(jù)庫的數(shù)據(jù)。
發(fā)現(xiàn)執(zhí)行的是 NewDiscoveryVisitor.buildDefaultMap()
調(diào)用發(fā)現(xiàn)后內(nèi)存中的數(shù)據(jù)。
9.增加網(wǎng)絡(luò)設(shè)備的服務(wù)器時(shí),可以重用發(fā)現(xiàn)模塊中的代碼。在2.0中是專門寫了一長串代碼,
與發(fā)現(xiàn)模塊沒關(guān)系。