1.    解决了有时发现程序结束不了的问题,根本原因在于有一个set没有同步,改为
hasDetected = Collections.synchronizedSet(new HashSet<String>())
后,问题解决。
2.    更改了路由发现中关于子网的一个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中只能对一个网络进行发现,3.0可以对多个网络进行发现,画出多个拓扑图。
4.    2.0中只能有一个发现范围,3.0可以增加多个发现范围。
5.    2.0中各表之间没有关联,初始化时要执行多条SQL代码,3.0中利用表外键,
只要删除一条记录,就可以删除所有相关数据。
6.    3.0在发现完之后,保存所有设备的SNMP表数据。
7.    3.0为再发现留有接口,使拓扑再发现成为可能,只是暂时没时间去实现。
8.    拓扑节点排序算法以及拓扑图的生成
排序算法 MapCompositor 给它节点以及连接,按一定算法计算出各节点的位置坐标。
DefaultCompositor实现接口computeCoordinate,把节点按排成若干个圆。
用DefaultMapBuilder dmb = new DefaultMapBuilder();
dmb.buildMap(config.getId());
来测试排序算法,因为它不要用到内存中的数据,直接取数据库的数据。
   发现执行的是 NewDiscoveryVisitor.buildDefaultMap()
   调用发现后内存中的数据。
9.增加网络设备的服务器时,可以重用发现模块中的代码。在2.0中是专门写了一长串代码,
与发现模块没关系。