<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    afunms

    My Software,My Dream—Forge a more perfect NMS product.

    #

    研究portal的實現

    研究Java來實現Portal。


    1) Dynamic Include
    首先,我們采用最簡單的思路,我們用100個JSP文件(1.jsp, 2.jsp, 3.jsp, … 100.jsp等),代表100個Portlet。
    用戶頁面MyPage.jsp包含用戶選定的多個Portlet。
    現在,假設用戶選取的Portlet為1.jsp, 3.jsp, 7.jsp等3個Portlet,那么我們如何在MyPage.jsp中顯示這些Portlet?最直觀的做法是,用jsp:include。比如:
    <table>
    <tr><td>
    <jsp:include page=”1.jsp” />
    </td></tr>
    <tr><td>
    <jsp:include page=”3.jsp” />
    </td></tr>
    <tr><td>
    <jsp:include page=”7.jsp” />
    </td></tr>
    </table>
    由于<jsp:include>只能指定固定的jsp文件名,不能動態指定jsp文件名。我們需要把<jsp:include>翻譯為Java code – RequestDispatcher.include();
    下面我們換成這種寫法。
    Java代碼
    <table>  
    <tr><td>  
    <% request.getRequestDispatcher(”1.jsp”).include(request, response); />  
    </td></tr>  
    <tr><td>  
    <% request.getRequestDispatcher(”3.jsp”).include(request, response); />  
    </td></tr>  
    <tr><td>  
    <% request.getRequestDispatcher(”7.jsp”).include(request, response); />  
    </td></tr>  
    </table> 

    <table>
    <tr><td>
    <% request.getRequestDispatcher(”1.jsp”).include(request, response); />
    </td></tr>
    <tr><td>
    <% request.getRequestDispatcher(”3.jsp”).include(request, response); />
    </td></tr>
    <tr><td>
    <% request.getRequestDispatcher(”7.jsp”).include(request, response); />
    </td></tr>
    </table>

    進一步改進MyPage.jsp。
    Java代碼
    <% String[] fileNames = {“1.jsp”, “3.jsp”, “7.jsp”}; %>  
    <table>  
    <% for(int i = 0; i < fileNames.length; i++) {  
      String fileName = fileName s[i]; %>  
    <tr><td>  
    <% request.getRequestDispatcher(fileName).include(request, response); />  
    </td></tr>  
    <% } // end for %>  
    </table> 


    其中的fileNames的內容可以各種各樣,只要RequestDispatcher能夠處理。
    比如Velocity,fileNames = {“1.vm”, “3.vm”, “7.vm”};
    比如URL,fileNames = {“/portlet1.do”, “/portlet3.do”, “/portlet4.do”};
    我們可以看到,如果我們從用戶配置中讀取fileNames的內容,這就是一個簡單的Portal實現。
    Java代碼
    <% String[] fileNames = (String[])session.getAttribute(“portlets.config”); %>  
    <table>  
    <% for(int i = 0; i < fileNames.length; i++) {  
      String fileName = fileNames[i]; %>  
    <tr><td>  
    <% request.getRequestDispatcher(fileName).include(request, response); />  
    </td></tr>  
    <% } // end for %>  
    </table> 


    2) Portlet Interface
    下面我們來擴展這個例子。
    假設每個Portlet都規定實現一個Portlet接口。
    Java代碼
    interface Portlet {  
      void render(request, response);  
    };  
     
    MyPage.jsp如下:  
     
    <% String[] portletClassNames = (String[])session.getAttribute(“portlets.config”); %>  
    <table>  
    <% for(int i = 0; i < portletClassNames.length; i++) {  
      String className = portletClassNames[i];  
      Portlet portlet = (Portlet)Class.forName(className).newInstance(); %>  
    <tr><td>  
    <% portlet. render (request, response); />  
    </td></tr>  
    <% } // end for %>  
    </table>  
     
    Portlet類的示例代碼如下:  
    public class Portlet7{  
      public void render(request, response){  
        request.getRequestDispatcher(“7.jsp”).include(request, response);  
      }  
    }; 

    interface Portlet {
      void render(request, response);
    };

    MyPage.jsp如下:

    <% String[] portletClassNames = (String[])session.getAttribute(“portlets.config”); %>
    <table>
    <% for(int i = 0; i < portletClassNames.length; i++) {
      String className = portletClassNames[i];
      Portlet portlet = (Portlet)Class.forName(className).newInstance(); %>
    <tr><td>
    <% portlet. render (request, response); />
    </td></tr>
    <% } // end for %>
    </table>

    Portlet類的示例代碼如下:
    public class Portlet7{
      public void render(request, response){
        request.getRequestDispatcher(“7.jsp”).include(request, response);
      }
    };

    上述代碼是Portal顯示Portlet的核心流程的一個簡化版本。
    JSR168 Portlet規范里面定義了真正的Portlet接口定義。

    posted @ 2011-08-28 12:29 afunms 閱讀(211) | 評論 (0)編輯 收藏

    揭陽topo

    去年在揭陽痛苦了三天三夜也沒把拓撲做出來,今天有機會再次在同一環境下測試程序。
    與去年相比,產品的成熟度有較大提高。我也基本搞清楚H3C各型號FDB數據的獲取方法。
     
    拓撲發現結果
      開始時間 結束時間 耗時
    1 2011-07-15 16:01:33 2011-07-15 16:08:03 6分鐘30秒
    發現設備
      IP地址 名稱 型號 類型
    1 10.46.129.100 jygaj7510E hh3c-s7510E 路由交換機
    2 10.46.129.111 jygaj4507 cat4507 路由交換機
    3 10.46.131.146 JieXiDaDui hh3c-s5500-28C-EI 路由交換機
    4 10.46.159.51 JYSJ_5500 hh3c-s5500-28C-EI 路由交換機
    5 10.46.131.150 HuiLaiDaDui hh3c-s5500-28C-EI 路由交換機
    6 10.46.131.138 YuHuDaDui hh3c-s5500-28C-EI 路由交換機
    7 10.46.131.193 HuiLaiGaoSuDaDui hh3c-s5500-28C-EI 路由交換機
    8 10.46.131.169 RongChengDaDui hh3c-s5500-28C-EI 路由交換機
    9 10.46.131.190 JiaoJingZhiDui hh3c-S7503E-S 路由交換機
    10 10.46.131.158 JieDongGaoSuDaDui hh3c-s5500-28C-EI 路由交換機
    11 10.46.131.1 DongShanDaDui hh3c-s5500-28C-EI 路由交換機
    12 10.46.131.202 PuHuiGaoSuDaDui hh3c-s5500-28C-EI 路由交換機
    13 10.46.131.118 PuHuiGaoSu2Donggang hh3c-s5100-24P-SI 路由交換機
    14 10.46.131.166 GuiLingKaoChang hh3c-s5100-24P-SI 路由交換機
    15 10.46.130.128 jiedong hh3c-S7503E-S 路由交換機
    16 10.46.131.10 RongXinZhongDui hh3c-s5100-24P-SI 路由交換機
    17 10.46.131.170 JinXianZhongDui hh3c-s5100-24P-SI 路由交換機
    18 10.46.150.96 puning hh3c-S7503E-S 路由交換機
    19 10.46.155.160 huilai s3328 交換機
    20 10.46.157.65 rongcheng hh3c-s5500-28C-EI 路由交換機
    21 10.46.155.130 AoJiang hh3c-S5120-28P-SI 路由交換機
    22 10.46.155.178 KuiFeng hh3c-S5120-28P-SI 路由交換機
    23 10.46.155.226 ZhouTian hh3c-S5120-28P-SI 路由交換機
    24 10.46.155.242 DongLong hh3c-S5120-28P-SI 路由交換機
    25 10.46.156.82 HeLin hh3c-S5120-28P-SI 路由交換機
    26 10.46.155.62 XianKanShouSuo hh3c-S5120-28P-SI 路由交換機
    27 10.46.131.6 YuQiaoZhongDui s2326TP 路由交換機
    28 10.46.136.18 jiexi hh3c-S7503E-S 路由交換機
    29 10.46.131.126 PuHuiGaosu_1_zd_xichang hh3c-s5100-24P-SI 路由交換機
    30 10.46.135.249 jygaj3560A catalyst3560G24TS 交換機
    31 10.46.129.226 jieyang_3640 cisco3640 路由交換機
    32 10.46.159.100 puhua hh3c-s5100-24P-EI 路由交換機
    33 10.46.159.40 dananshan hh3c-s5100-24P-EI 路由交換機
    34 10.46.155.210 10.46.155.210 hh3c-S5120-28P-SI 路由交換機
    35 10.46.141.64 yuhu hh3c-s5500-28C-EI 路由交換機
    36 10.46.133.64 dongshan-master hh3c-s5500-28C-EI 路由交換機
    37 10.46.149.30 shuishangpaichusuo hh3c-s5100-24P-EI 路由交換機
    38 10.46.146.99 jingxiao hh3c-s5500-28C-EI 路由交換機
    39 10.46.135.44 kanshousuo hh3c-s5100-24P-EI 路由交換機
    40 10.46.135.8 tejing hh3c-s5100-24P-EI 路由交換機
    合計:40臺
    發現子網
      子網地址 子網掩碼
    1 10.46.128.0 255.255.224.0
    2 10.46.128.112 255.255.255.248
    3 10.46.128.120 255.255.255.248
    4 10.46.128.128 255.255.255.248
    5 10.46.128.136 255.255.255.248
    6 10.46.128.16 255.255.255.248
    7 10.46.128.160 255.255.255.248
    8 10.46.128.176 255.255.255.248
    9 10.46.128.184 255.255.255.248
    10 10.46.128.192 255.255.255.248
    11 10.46.128.200 255.255.255.248
    12 10.46.128.208 255.255.255.240
    13 10.46.128.224 255.255.255.248
    14 10.46.128.232 255.255.255.248
    15 10.46.128.248 255.255.255.248
    16 10.46.128.8 255.255.255.248
    17 10.46.129.0 255.255.255.0
    18 10.46.130.0 255.255.255.0
    19 10.46.131.0 255.255.255.252
    20 10.46.131.100 255.255.255.252
    21 10.46.131.116 255.255.255.252
    22 10.46.131.12 255.255.255.252
    23 10.46.131.124 255.255.255.252
    24 10.46.131.128 255.255.255.252
    25 10.46.131.136 255.255.255.252
    26 10.46.131.140 255.255.255.252
    27 10.46.131.144 255.255.255.252
    28 10.46.131.148 255.255.255.252
    29 10.46.131.156 255.255.255.252
    30 10.46.131.164 255.255.255.252
    31 10.46.131.168 255.255.255.252
    32 10.46.131.172 255.255.255.252
    33 10.46.131.176 255.255.255.252
    34 10.46.131.180 255.255.255.252
    35 10.46.131.188 255.255.255.252
    36 10.46.131.192 255.255.255.252
    37 10.46.131.196 255.255.255.252
    38 10.46.131.200 255.255.255.252
    39 10.46.131.240 255.255.255.252
    40 10.46.131.244 255.255.255.252
    41 10.46.131.248 255.255.255.248
    42 10.46.131.4 255.255.255.252
    43 10.46.131.8 255.255.255.252
    44 10.46.131.80 255.255.255.252
    45 10.46.131.88 255.255.255.252
    46 10.46.131.92 255.255.255.252
    47 10.46.131.96 255.255.255.252
    48 10.46.132.0 255.255.255.0
    49 10.46.133.0 255.255.255.0
    50 10.46.134.0 255.255.255.0
    51 10.46.135.0 255.255.255.0
    52 10.46.135.128 255.255.255.128
    53 10.46.135.32 255.255.255.224
    54 10.46.135.64 255.255.255.192
    55 10.46.136.0 255.255.255.252
    56 10.46.136.100 255.255.255.252
    57 10.46.136.108 255.255.255.252
    58 10.46.136.136 255.255.255.252
    59 10.46.136.16 255.255.255.252
    60 10.46.136.20 255.255.255.252
    61 10.46.136.200 255.255.255.252
    62 10.46.136.32 255.255.255.252
    63 10.46.137.0 255.255.255.0
    64 10.46.138.0 255.255.255.0
    65 10.46.139.0 255.255.255.224
    66 10.46.139.128 255.255.255.224
    67 10.46.139.192 255.255.255.240
    68 10.46.139.232 255.255.255.248
    69 10.46.139.240 255.255.255.240
    70 10.46.139.32 255.255.255.224
    71 10.46.139.64 255.255.255.192
    72 10.46.140.0 255.255.255.0
    73 10.46.141.0 255.255.255.128
    74 10.46.141.128 255.255.255.128
    75 10.46.142.0 255.255.255.240
    76 10.46.142.128 255.255.255.224
    77 10.46.142.16 255.255.255.240
    78 10.46.142.160 255.255.255.224
    79 10.46.142.192 255.255.255.224
    80 10.46.142.224 255.255.255.224
    81 10.46.142.32 255.255.255.240
    82 10.46.142.64 255.255.255.192
    83 10.46.143.0 255.255.255.192
    84 10.46.143.128 255.255.255.224
    85 10.46.143.160 255.255.255.224
    86 10.46.143.192 255.255.255.192
    87 10.46.143.64 255.255.255.224
    88 10.46.143.96 255.255.255.224
    89 10.46.144.0 255.255.255.224
    90 10.46.144.112 255.255.255.240
    91 10.46.144.128 255.255.255.240
    92 10.46.144.144 255.255.255.240
    93 10.46.144.160 255.255.255.240
    94 10.46.144.176 255.255.255.240
    95 10.46.144.224 255.255.255.240
    96 10.46.144.240 255.255.255.240
    97 10.46.144.64 255.255.255.224
    98 10.46.144.96 255.255.255.240
    99 10.46.145.0 255.255.255.240
    100 10.46.145.128 255.255.255.240
    101 10.46.145.144 255.255.255.240
    102 10.46.145.16 255.255.255.240
    103 10.46.145.160 255.255.255.240
    104 10.46.145.176 255.255.255.240
    105 10.46.145.192 255.255.255.240
    106 10.46.145.208 255.255.255.240
    107 10.46.145.224 255.255.255.240
    108 10.46.145.32 255.255.255.240
    109 10.46.145.48 255.255.255.240
    110 10.46.145.64 255.255.255.240
    111 10.46.145.80 255.255.255.240
    112 10.46.145.96 255.255.255.240
    113 10.46.146.0 255.255.255.0
    114 10.46.147.0 255.255.255.0
    合計:114個
    發現鏈路
      名稱
    1 jygaj7510E[GigabitEthernet0/0/28]--JieXiDaDui[GigabitEthernet1/0/24]  
    2 jygaj7510E[GigabitEthernet0/0/24]--JiaoJingZhiDui[GigabitEthernet1/0/39]  
    3 JiaoJingZhiDui[GigabitEthernet1/0/6]--DongShanDaDui[GigabitEthernet1/0/21]  
    4 jygaj7510E[GigabitEthernet0/0/26]--JieDongGaoSuDaDui[GigabitEthernet1/0/24]  
    5 jygaj7510E[GigabitEthernet0/0/30]--RongChengDaDui[GigabitEthernet1/0/24]  
    6 jygaj7510E[GigabitEthernet0/0/27]--HuiLaiDaDui[GigabitEthernet1/0/24]  
    7 jygaj7510E[GigabitEthernet0/0/39]--JYSJ_5500[GigabitEthernet1/0/1]  
    8 jygaj7510E[GigabitEthernet0/0/29]--YuHuDaDui[GigabitEthernet1/0/24]  
    9 jygaj7510E[GigabitEthernet0/0/25]--HuiLaiGaoSuDaDui[GigabitEthernet1/0/24]  
    10 jygaj7510E[GigabitEthernet0/0/40]--jygaj4507[GigabitEthernet3/32]  
    11 jygaj4507[GigabitEthernet3/26]--jieyang_3640[FastEthernet2/0]  
    12 jygaj7510E[GigabitEthernet0/0/6]--rongcheng[GigabitEthernet1/0/24]  
    13 jygaj7510E[GigabitEthernet0/0/32]--PuHuiGaoSuDaDui[GigabitEthernet1/0/24]  
    14 jygaj7510E[GigabitEthernet0/0/4]--jiexi[GigabitEthernet1/0/24]  
    15 jygaj7510E[GigabitEthernet0/0/7]--yuhu[GigabitEthernet1/0/24]  
    16 jygaj7510E[GigabitEthernet0/0/5]--dongshan-master[GigabitEthernet1/0/24]  
    17 jygaj7510E[GigabitEthernet0/0/3]--puning[GigabitEthernet1/0/40]  
    18 jygaj7510E[GigabitEthernet0/0/1]--jiedong[GigabitEthernet1/0/24]  
    19 jygaj7510E[GigabitEthernet0/0/13]--jingxiao[GigabitEthernet1/0/24]  
    20 DongShanDaDui[GigabitEthernet1/0/23]--YuQiaoZhongDui[Vlanif3]  
    21 huilai[Ethernet0/0/8]--HeLin[GigabitEthernet1/0/24]  
    22 JYSJ_5500[GigabitEthernet1/0/6]--shuishangpaichusuo[GigabitEthernet1/0/24]  
    23 JYSJ_5500[GigabitEthernet1/0/3]--puhua[GigabitEthernet1/0/24]  
    24 JYSJ_5500[GigabitEthernet1/0/5]--tejing[GigabitEthernet1/0/24]  
    25 RongChengDaDui[GigabitEthernet1/0/22]--RongXinZhongDui[GigabitEthernet1/0/24]  
    26 JYSJ_5500[GigabitEthernet1/0/2]--dananshan[GigabitEthernet1/0/24]  
    27 JYSJ_5500[GigabitEthernet1/0/4]--kanshousuo[GigabitEthernet1/0/24]  
    28 huilai[Ethernet0/0/7]--DongLong[GigabitEthernet1/0/24]  
    29 huilai[Ethernet0/0/5]--KuiFeng[GigabitEthernet1/0/20]  
    30 RongChengDaDui[GigabitEthernet1/0/21]--JinXianZhongDui[GigabitEthernet1/0/24]  
    31 huilai[Ethernet0/0/2]--ZhouTian[GigabitEthernet1/0/24]  
    32 huilai[Ethernet0/0/3]--10.46.155.210[GigabitEthernet1/0/24]  
    33 huilai[Ethernet0/0/6]--AoJiang[GigabitEthernet1/0/24]  
    34 huilai[Ethernet0/0/1]--XianKanShouSuo[GigabitEthernet1/0/24]  
    35 JiaoJingZhiDui[GigabitEthernet1/0/40]--GuiLingKaoChang[GigabitEthernet1/0/24]  
    36 jygaj7510E[GigabitEthernet0/0/48]--jygaj3560A[GigabitEthernet0/27]  
    37 jygaj7510E[GigabitEthernet0/0/2]--huilai[Ethernet0/0/24]  
    38 JiaoJingZhiDui[GigabitEthernet1/0/8]--PuHuiGaoSu2Donggang[GigabitEthernet1/0/2]  
    39 JiaoJingZhiDui[GigabitEthernet1/0/7]--PuHuiGaosu_1_zd_xichang[GigabitEthernet1/0/24]  
    40 jygaj4507[GigabitEthernet3/21]--jygaj3560A[GigabitEthernet0/22]  
    合計:40條


    posted @ 2011-07-15 22:53 afunms 閱讀(445) | 評論 (1)編輯 收藏

    JBPM流程展現改進

    1.在連線加上文字
    2.換了圖標




    posted @ 2011-05-30 10:52 afunms 閱讀(195) | 評論 (0)編輯 收藏

    JBPM流程展現

         摘要: Flex開發的JBPM流程展現器 ---JBPM流程定義XML---- Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><?xml version="1.0" encoding="UTF-8"?><proces...  閱讀全文

    posted @ 2011-05-28 17:07 afunms 閱讀(378) | 評論 (0)編輯 收藏

    2.INTRODUCTION TO IT SERVICE MANAGEMENT

    IT Service Management Objectives
    ITIL is a Best Practice Framework used …..
    1.To align IT services with the current and future needs
       of the business and its Customers
    2.To develop the quality of the IT services delivered
    3.To reduce the long term cost of service provision

    Why Service Management
    1.Increasing IT visibility and Reliance
    2.Increasing demand from Business to deliver effective
       IT solutions/services (Cost Effective)
    3.Increasing complexity of IT infrastructure and processes
    4.Increasing competition
    5.Increasing pressure to realise return on investment

    Considerations
    1.Do not be over ambitious
    2.Consider what elements already exist, are in use and effective
    3.Identify what can be re-used or needs to be developed
    4.Adapt the guidelines to meet your requirements

    Process Improvement Model
    Process Improvement Stages
    1.Process improvement definition
    2.Communication
    3.Planning
    4.Implementation
    5.Review and Audit

    ITIL Service Management
    Service Support
       Day to day operational support of IT services
    Service Delivery
       Long term planning and improvement of IT service provision

    Key Definitions
     Customer: recipient of a service: usually the Customer management   
                     has responsibility for the funding of the service.
     Provider: the unit responsible for the provision of IT service.
     Supplier:  a third party responsible for supplying or supporting    
                   underpinning elements of the IT service.
     User: the person using the service on a daily basis.

    IT Service Management Overview




    posted @ 2011-05-02 09:37 afunms 閱讀(199) | 評論 (0)編輯 收藏

    1.Introduction

    ITIL Service Management Foundation

    Course Objectives

    1.To introduce ITIL As Best Practice framework
      Terms, Definitions, Phrases
    2.Gain an understanding of the essential ITIL processes and how they relate
      to each other,in order to support and deliver a quality IT service

    Course Content – Day 1
    1.Introduction
    2.Introduction to IT Service Management
    3.Service Desk
    4.Configuration Management
    5.Incident Management
    6.Problem Management
    7.Change Management
    8.Release Management

    Course Content – Day 2
    1.Service Level Management
    2.Financial Management for IT Services
    3.Capacity Management
    4.IT Service Continuity Management
    5.Availability Management

    ITIL Overview
    1.ITIL is a Best Practice Framework
    2.Integrated into OGC and BSI guidance
    3.ITIL Philosophy – Scaleable Process driven approach
    4.Key Objective 1
    5.Align IT services with the Current and Future needs of the business and its Customers
    6.Key Objective 2
    7.To improve Quality of the services delivered
    8.Key Objective 3
    9.Reduce long term Cost of service provision


    Introduction to Service Management
    The Service Desk
    Configuration Management
    Incident Management
    Problem Management
    Change Management
    Release Management

    posted @ 2011-05-01 09:11 afunms 閱讀(165) | 評論 (0)編輯 收藏

    Tomcat服務器IP沖突

    啟動Tomcat后,服務器IP沖突或IP地址改變會導致以下錯誤:


        I/O exception (java.net.ConnectException)

    caught when processing request: Connection timed out: connect

     

        Retrying request

    posted @ 2011-02-24 13:57 afunms 閱讀(301) | 評論 (0)編輯 收藏

    正則表達式中轉義字符

    除 .$ ^ { [ ( | ) * + ? \ 外,其他字符與自身匹配。

    點的轉義:.  ==> \\u002E
    美元符號的轉義:$  ==> \\u0024
    乘方符號的轉義:^  ==> \\u005E
    左大括號的轉義:{  ==> \\u007B
    左方括號的轉義:[  ==> \\u005B
    左圓括號的轉義:(  ==> \\u0028
    豎線的轉義:| ==> \\u007C
    右圓括號的轉義:) ==> \\u0029
    星號的轉義:*  ==> \\u002A
    加號的轉義:+  ==> \\u002B
    問號的轉義:?  ==> \\u003F
    反斜杠的轉義:\ ==> \\u005C

    test:

     public static void main(String[] args){
         Pattern p 
    = Pattern.compile("/\\u002A\\s{1,5}\\d{0,4}\\s{1,5}\\u002A/");
         Matcher m 
    = p.matcher("/* 1369 */");
         System.out.println(m.find());    
     }

    結果為true

    posted @ 2011-01-29 09:34 afunms 閱讀(3447) | 評論 (0)編輯 收藏

    log4j

    http://dev.csdn.net/htmls/21/21291.html
    log4j雖然用了很久,其實一直沒搞清楚。今天認真學習了。

    1.簡介
    程序開發環境中的日志記錄是由嵌入在程序中以輸出一些對開發人員有用信息的語句所組成。例如,跟蹤語句(trace),結構轉儲和常見的System.out.println或printf調試語句。log4j提供分級方法在程序中嵌入日志記錄語句。日志信息具有多種輸出格式和多個輸出級別。

    使用一個專門的日志記錄包,可以減輕對成千上萬的System.out.println語句的維護成本,因為日志記錄可以通過配置腳本在運行時得以控制。log4j維護嵌入在程序代碼中的日志記錄語句。通過規范日志記錄的處理過程,一些人認為應該鼓勵更多的使用日志記錄并且獲得更高程度的效率。

    2.安裝
    為了使用我們即將要安裝的日志記錄工具,還必須要設置操作環境,只有這樣,工具才能知道從哪里找到它所需要的信息,并且操作系統知道從哪里找到這個工具。那么,怎樣做呢?實際上,它要求更改操作環境。我有一些這方面的資格文檔。 Configuring A Windows Working Environment 和 Configuring A Unix Working Environment.

    從 http://jakarta.apache.org/log4j/docs/download.html下載log4j發行版。

    解壓存檔文件到合適的目錄中。

    添加文件 dist/lib/log4j-1.2.6.jar 到 CLASSPATH 環境變量中。

    3.log4j的基本概念
    使用log4j大概涉及3個主要概念:

    公共類 Logger

    Logger 負責處理日志記錄的大部分操作。

    公共接口 Appender

    Appender 負責控制日志記錄操作的輸出。

    公共抽象類Layout

    Layout 負責格式化Appender的輸出。

    3.1.Logger
    日志記錄器(Logger)是日志處理的核心組件。log4j具有5種正常級別(Level)。 日志記錄器(Logger)的可用級別Level (不包括自定義級別 Level), 以下內容就是摘自log4j API (http://jakarta.apache.org/log4j/docs/api/index.html):

    static Level DEBUG

    DEBUG Level指出細粒度信息事件對調試應用程序是非常有幫助的。

    static Level INFO

    INFO level表明 消息在粗粒度級別上突出強調應用程序的運行過程。

    static Level WARN

    WARN level表明會出現潛在錯誤的情形。

    static Level ERROR

    ERROR level指出雖然發生錯誤事件,但仍然不影響系統的繼續運行。

    static Level FATAL

    FATAL level指出每個嚴重的錯誤事件將會導致應用程序的退出。

    另外,還有兩個可用的特別的日志記錄級別: (以下描述來自log4j API http://jakarta.apache.org/log4j/docs/api/index.html):

    static Level ALL

    ALL Level是最低等級的,用于打開所有日志記錄。

    static Level OFF

    OFF Level是最高等級的,用于關閉所有日志記錄。

    日志記錄器(Logger)的行為是分等級的。如下表所示:

    圖.日志輸出等級


    日志記錄器(Logger)將只輸出那些級別高于或等于它的級別的信息。如果沒有設置日志記錄器(Logger)的級別,那么它將會繼承最近的祖先的級別。因此,如果在包com.foo.bar中創建一個日志記錄器(Logger)并且沒有設置級別,那它將會繼承在包com.foo中創建的日志記錄器(Logger)的級別。如果在com.foo中沒有創建日志記錄器(Logger)的話,那么在com.foo.bar中創建的日志記錄器(Logger)將繼承root 日志記錄器(Logger)的級別,root日志記錄器(Logger)經常被實例化而可用,它的級別為DEBUG。

    有很多方法可以創建一個日志記錄器(Logger),下面方法可以取回root日志記錄器:

    Logger logger = Logger.getRootLogger();
     

    還可以這樣創建一個新的日志記錄器:

    Logger logger = Logger.getLogger("MyLogger");
     

    比較常用的用法,就是根據類名實例化一個靜態的全局日志記錄器:

    static Logger logger = Logger.getLogger(test.class);
     

    所有這些創建的叫"logger"的日志記錄器都可以用下面方法設置級別:

    logger.setLevel((Level)Level.WARN);
     

    可以使用7個級別中的任何一個; Level.DEBUG, Level.INFO, Level.WARN, Level.ERROR, Level.FATAL, Level.ALL and Level.OFF.

    3.2.Appender
    Appender 控制日志怎樣輸出。下面列出一些可用的Appender(log4j API中所描述的 http://jakarta.apache.org/log4j/docs/api/index.html):

    ConsoleAppender:使用用戶指定的布局(layout) 輸出日志事件到System.out或者 System.err。默認的目標是System.out。

    DailyRollingFileAppender 擴展FileAppender,因此多個日志文件可以以一個用戶選定的頻率進行循環日志記錄。

    FileAppender 把日志事件寫入一個文件

    RollingFileAppender 擴展FileAppender備份容量達到一定大小的日志文件。

    WriterAppender根據用戶的選擇把日志事件寫入到Writer或者OutputStream。

    SMTPAppender 當特定的日志事件發生時,一般是指發生錯誤或者重大錯誤時,發送一封郵件。

    SocketAppender 給遠程日志服務器(通常是網絡套接字節點)發送日志事件(LoggingEvent)對象。

    SocketHubAppender 給遠程日志服務器群組(通常是網絡套接字節點)發送日志事件(LoggingEvent)對象。

    SyslogAppender給遠程異步日志記錄的后臺精靈程序(daemon)發送消息。

    TelnetAppender 一個專用于向只讀網絡套接字發送消息的log4j appender。

    還可以實現 Appender 接口,創建以自己的方式進行日志輸出的Appender。

    3.2.1.使用ConsoleAppender
    ConsoleAppender可以用這種方式創建:

    ConsoleAppender appender = new ConsoleAppender(new PatternLayout());
     

    創建了一個控制臺appender,具有一個默認的PatternLayout。它使用了默認的System.out 輸出。

    3.2.2.使用FileAppender
    FileAppender可以用這種方式創建:

              FileAppender appender = null;
              try {
                 appender = new FileAppender(new PatternLayout(),"filename");
              } catch(Exception e) {}
           
     

    上面用到的構造函數:

    FileAppender(Layout layout, String filename)
              實例化一個FileAppender并且打開變量"filename"指定的文件。
           
     

    另一個有用的構造函數是:

    FileAppender(Layout layout, String filename, boolean append)
              實例化一個FileAppender并且打開變量"filename"指定的文件。
           
     

    這個構造函數還可以選擇是否對指定的文件進行追加的方式輸出。如果沒有指定值,那么默認的方式就是追加。

    3.2.3.使用WriterAppender
    WriterAppender可以用這種方式創建:

              WriterAppender appender = null;
              try {
                appender = new WriterAppender(new PatternLayout(),new FileOutputStream("filename"));
              } catch(Exception e) {}
           
     

    這個WriterAppender使用的構造函數帶有PatternLayout和OutputStream參數,在這種情況下, FileOutputStream用于向一個文件輸出。當然,它還具有其他可用的構造函數。

    3.3.Layout
    Appender必須使用一個與之相關聯的 Layout,這樣它才能知道怎樣格式化它的輸出。當前,log4j具有三種類型的Layout:

    HTMLLayout 格式化日志輸出為HTML表格。

    PatternLayout 根據指定的 轉換模式格式化日志輸出,或者如果沒有指定任何轉換模式,就使用默認的轉換模式。

    SimpleLayout 以一種非常簡單的方式格式化日志輸出,它打印級別 Level,然后跟著一個破折號“-“ ,最后才是日志消息。

    3.4.基本示例
    3.4.1.SimpleLayout和 FileAppender
    這里是一個非常簡單的例子,程序實現了SimpleLayout和FileAppender:

    import org.apache.log4j.Level;
    import org.apache.log4j.Logger;
    import org.apache.log4j.SimpleLayout;
    import org.apache.log4j.FileAppender;
    public class simpandfile {
       static Logger logger = Logger.getLogger(simpandfile.class);
       public static void main(String args[]) {
          SimpleLayout layout = new SimpleLayout();
          FileAppender appender = null;
          try {
             appender = new FileAppender(layout,"output1.txt",false);
          } catch(Exception e) {}
          logger.addAppender(appender);
          logger.setLevel((Level) Level.DEBUG);
          logger.debug("Here is some DEBUG");
          logger.info("Here is some INFO");
          logger.warn("Here is some WARN");
          logger.error("Here is some ERROR");
          logger.fatal("Here is some FATAL");
       }
    }
           
     

    你可以下載: simpandfile.java。 還可以查看它的輸出: output1.txt.

    3.4.2.HTMLLayout和 WriterAppender
    這里是一個非常簡單的例子,程序實現了 HTMLLayout和WriterAppender:

    import java.io.*;
    import org.apache.log4j.Level;
    import org.apache.log4j.Logger;
    import org.apache.log4j.HTMLLayout;
    import org.apache.log4j.WriterAppender;
    public class htmlandwrite {
       static Logger logger = Logger.getLogger(htmlandwrite.class);
       public static void main(String args[]) {
          HTMLLayout layout = new HTMLLayout();
          WriterAppender appender = null;
          try {
             FileOutputStream output = new FileOutputStream("output2.html");
             appender = new WriterAppender(layout,output);
          } catch(Exception e) {}
          logger.addAppender(appender);
          logger.setLevel((Level) Level.DEBUG);
          logger.debug("Here is some DEBUG");
          logger.info("Here is some INFO");
          logger.warn("Here is some WARN");
          logger.error("Here is some ERROR");
          logger.fatal("Here is some FATAL");
       }
    }
           
     

    你可以下載: simpandfile.java. 還可以查看它的輸出:output1.txt.

    3.4.3.PatternLayout和 ConsoleAppender
    這里是一個非常簡單的例子,程序實現了PatternLayout和ConsoleAppender:

    import org.apache.log4j.Level;
    import org.apache.log4j.Logger;
    import org.apache.log4j.PatternLayout;
    import org.apache.log4j.ConsoleAppender;
    public class consandpatt {
       static Logger logger = Logger.getLogger(consandpatt.class);
       public static void main(String args[]) {
          // Note, %n is newline
          String pattern =  "Milliseconds since program start: %r %n";
                 pattern += "Classname of caller: %C %n";
                 pattern += "Date in ISO8601 format: %d{ISO8601} %n";
                 pattern += "Location of log event: %l %n";
                 pattern += "Message: %m %n %n";
         
          PatternLayout layout = new PatternLayout(pattern);
          ConsoleAppender appender = new ConsoleAppender(layout);
          logger.addAppender(appender);
          logger.setLevel((Level) Level.DEBUG);
          logger.debug("Here is some DEBUG");
          logger.info("Here is some INFO");
          logger.warn("Here is some WARN");
          logger.error("Here is some ERROR");
          logger.fatal("Here is some FATAL");
       }
    }
           
     

    你可以下載:simpandfile.java. 還可以查看它的輸出: output2.txt.

    4.使用外部配置文件
    Log4j經常與外部日志文件聯合使用,這樣很多可選項不必硬編碼在軟件中。使用外部配置文件的優點就是修改可選項不需要重新編譯程序。唯一的缺點就是,由于用到io 指令,速度稍微有些減慢。

    有兩個方法可以用來指定外部配置文件:文本文件或者XML文件。既然現在所有事情都寫成XML文件,那么該教程就重點講解XML文件方法,但是也包含相關文本文件的例子。首先,看看下面的XML配置文件示例:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
           
      <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.SimpleLayout"/>
      </appender>
      <root>
        <priority value ="debug" />
        <appender-ref ref="ConsoleAppender"/>
      </root>
    </log4j:configuration>
       
     

    文件以標準的XML聲明作為開始,后面跟著指出DTD(文檔類型定義)的DOCTYPE聲明,它定義了XML文件的結構,例如,什么元素可以嵌入在其他元素中等等。上面文件在log4j發行版的src/java/org/apache/log4j/xml目錄中。 接著看看封裝所有元素的 log4j:configuration 元素,它在DOCTYPE聲明中被指定為根元素。嵌入在根元素中有兩個結構:

      <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.SimpleLayout"/>
      </appender>     
       
     

    這里創建一個名叫"ConsoleAppender"的 Appender,注意,你可以選擇任何名字,該示例之所以選擇"ConsoleAppender",完全是為了示例的設計。接著這個appender類以全名形式給出,經常用規范(fully qualified)類名。 Appender必須具有一個指定的 name和class。嵌入在 Appender之內的是 layout元素,這里它被指定為SimpleLayout。 Layout 必須具有一個 class屬性。

      <root>
        <priority value ="debug" />
        <appender-ref ref="ConsoleAppender"/>
      </root>     
       
     

    root元素必須存在且不能被子類化。示例中的優先級被設置為"debug",設置appender飽含一個appender-ref元素。還有更多的屬性或元素可以指定。查看log4j發行版中的src/java/org/apache/log4j/xml/log4j.dtd以了解關于XML配置文件結構的更多信息??梢杂孟旅孢@種方法把配置信息文件讀入到Java程序中:

    DOMConfigurator.configure("configurationfile.xml");
       
     

    DOMConfigurator 用一棵DOM樹來初始化log4j環境。這里是示例中的XML配置文件:plainlog4jconfig.xml。這里是執行該配置文件的程序: files/externalxmltest.java:

    import org.apache.log4j.Logger;
    import org.apache.log4j.xml.DOMConfigurator;
    public class externalxmltest {
       static Logger logger = Logger.getLogger(filetest.class);
       public static void main(String args[]) {
          DOMConfigurator.configure("xmllog4jconfig.xml");
          logger.debug("Here is some DEBUG");
          logger.info("Here is some INFO");
          logger.warn("Here is some WARN");
          logger.error("Here is some ERROR");
          logger.fatal("Here is some FATAL");
       }
    }
       
     

    這里是一個實現帶有PatternLayout的FileAppender的日志記錄器Logger的XML配置文件:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
           
      <appender name="appender" class="org.apache.log4j.FileAppender">
        <param name="File" value="Indentify-Log.txt"/>
        <param name="Append" value="false"/>
        <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern" value="%d [%t] %p - %m%n"/>
        </layout>
      </appender>
      <root>
        <priority value ="debug"/>
        <appender-ref ref="appender"/>
      </root>
    </log4j:configuration>
       
     

    你可以從這里下載示例: xmllog4jconfig2.xml。 想要得到更多的使用XML文件配置log4j環境的例子,請查看log4j發行版的目錄src/java/org/apache/log4j/xml/examples/ 。

    這就是上面討論的文本文件形式的配置文件:

    # initialise root logger with level DEBUG and call it BLAH
    log4j.rootLogger=DEBUG, BLAH
    # add a ConsoleAppender to the logger BLAH
    log4j.appender.BLAH=org.apache.log4j.ConsoleAppender
    # set set that layout to be SimpleLayout
    log4j.appender.BLAH.layout=org.apache.log4j.SimpleLayout
       
     

    從這里可以下載: plainlog4jconfig.txt。這就是執行該配置文件的程序:

    import org.apache.log4j.Logger;
    import org.apache.log4j.PropertyConfigurator;
    public class externalplaintest {
       static Logger logger = Logger.getLogger(externalplaintest.class);
       public static void main(String args[]) {
          PropertyConfigurator.configure("plainlog4jconfig.xml");
          logger.debug("Here is some DEBUG");
          logger.info("Here is some INFO");
          logger.warn("Here is some WARN");
          logger.error("Here is some ERROR");
          logger.fatal("Here is some FATAL");
       }
    }
       
     

    你可以下載使用該配置文件的示例: externalplaintest.java。想要獲得更多的使用文本文件配置log4j環境的例子,請查看log4j發行版中的目錄examples。

    使用外部配置文件的例子就簡單的討論到這里,現在應該可以肯定你已經有能力獨立學習更多的log4j發行版和測試版中提供的例子。

     

    posted @ 2011-01-28 10:14 afunms 閱讀(249) | 評論 (0)編輯 收藏

    snmp4j中文亂碼問題

    snmp4j遇到中文直接轉成16進制字符串,網上有些解決辦法,試過之后,亂碼問題是解決了,卻帶來意想不到的副作用。
    研究之后,還是自己寫一個方法,把16進制字符串轉成正常的字符串。
    /**
         * 解決snmp4j中文亂碼問題
         
    */

        
    public static String getChinese(String octetString){
            
    try{
                String[] temps 
    = octetString.split(":");
                
    byte[] bs = new byte[temps.length];
                
    for(int i=0;i<temps.length;i++)
                    bs[i] 
    = (byte)Integer.parseInt(temps[i],16);
            
                
    return new String(bs,"GB2312");
            }
    catch(Exception e){
                
    return null;
            }

        }

    posted @ 2011-01-19 09:40 afunms 閱讀(2007) | 評論 (1)編輯 收藏

    華為交換機fdb表的四種可能

     

    華為交換機FDB表四種取值方式:

    1.     bridge.mib


     

    getTable(dot1dTpFdbAddress,dot1dTpFdbPort)

    2.q-bridge.mib


    getTable(dot1dTpFdbAddress,dot1dTpFdbPort)

    3.     huawei-l2mam.mib

     walk(hwDynFdbPort)

     4.     huawei-lswmam.mib

     


     

    posted @ 2010-12-28 12:29 afunms 閱讀(2049) | 評論 (1)編輯 收藏

    tomcat把日志輸出到文本文件

    • 在Linux系統中,Tomcat 啟動后默認將很多信息都寫入到catalina.out 文件中,我們可以通過tail -f catalina.out 來跟蹤Tomcat 和相關應用運行的情況。 在windows下,我們使用startup.bat啟動Tomcat以后,會發現catalina日志與Linux記錄的內容有很大區別,大多信息只輸出到屏幕而沒有記錄到catalina.out里面。
    • 本文的內容就是要實現在windows下,將相關的控制臺輸出記錄到后臺的catalina.out文件中以便將來查看。
    • 關于在Windows2003下如何實現類似Linux下tail命令功能的方法,請見讓windows也擁有tail功能一文

    把控制臺的信息輸出到%CATALINA_BASE%\logs\catalina.out里:
    一、修改startup.bat中
    call "%EXECUTABLE%" start %CMD_LINE_ARGS%

    call "%EXECUTABLE%" run %CMD_LINE_ARGS%
    二、修改catalina.bat中
    rem Execute Java with the applicable properties
    if not "%JPDA%" == "" goto doJpda
    if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity
    %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
    goto end
    :doSecurity
    %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
    goto end
    :doJpda
    if not "%SECURITY_POLICY_FILE%" == "" goto doSecurityJpda
    %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% -Xdebug -Xrunjdwp:transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=n %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
    goto end
    :doSecurityJpda
    %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% -Xdebug -Xrunjdwp:transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=n %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
    goto end

    為:

    rem Execute Java with the applicable properties
    if not "%JPDA%" == "" goto doJpda
    if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity
    %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION% >> %CATALINA_BASE%\logs\catalina.out
    goto end
    :doSecurity
    %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION% >> %CATALINA_BASE%\logs\catalina.out
    goto end
    :doJpda
    if not "%SECURITY_POLICY_FILE%" == "" goto doSecurityJpda
    %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% -Xdebug -Xrunjdwp:transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=n %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION% >> %CATALINA_BASE%\logs\catalina.out
    goto end
    :doSecurityJpda
    %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% -Xdebug -Xrunjdwp:transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=n %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION% >> %CATALINA_BASE%\logs\catalina.out
    goto end

    posted @ 2010-12-27 12:32 afunms 閱讀(3082) | 評論 (1)編輯 收藏

    NDP,NTDP

    NDP Neighbor Discovery Protocol  鄰居發現協議
    NTDP Network Topology Discovery Protocol  網絡拓撲發現協議

            NDP(Neighbor Discovery Protocol)是用來發現鄰接點相關信息的協議。支持設備都維護NDP鄰居信息表,表項是可以老化的。當老化時間到,自動刪除相應的表項。同時,用戶可以清除當前的NDP 信息以重新收集鄰接信息。
      NTDP(Neighbor Topology Discovery Protocol)是用來收集網絡拓撲信息的協議。NTDP 為集群管理提供可加入集群的設備信息,收集指定跳數內的交換機的拓撲信息。NDP 為NTDP 提供鄰接表信息,NTDP 根據鄰接信息發送和轉發NTDP 拓撲收集請求,收集一定網絡范圍內每個設備的NDP 信息和它與所有鄰居的連接信息。收集完這些信息后,管理設備或者網管可以根據需要使用這些信息,完成所需的功能。當成員設備上的NDP 發現鄰居有變化時,通過握手報文將鄰居改變的消息通知管理設備,管理設備可以啟動NTDP 進行指定拓撲收集,從而使NTDP 能夠及時反映網絡拓撲的變化。


     

    posted @ 2010-12-03 11:47 afunms 閱讀(261) | 評論 (0)編輯 收藏

    用福建地名組成的祝福

    生活如永定;價值如連城;
    幸福如龍海;長壽比東山;  
    身體要永泰;事業定長泰;  
    生意擬建甌;道路登上杭;  
    快樂永長樂;笑容如石獅;  
    人生愿福安;命運靠德化;
    運氣至將樂;財氣沖云霄;  
    愛情似羅源;緣份聚浦城;  
    佳人倚屏南;秋眸透閩清;  
    生活悠寧德;穩定勝龍巖;  
    閑來學仙游;累了歇閩候;  
    悠然過連江;漫步武夷山;  
    春天踏漳浦;夏季潛安溪;  
    秋來往南靖;冬至望建陽;   
    客家祖長?。煌翗浅缛A安;  
    景美嘆松溪;水幽贊尤溪;  
    世世祈詔安;代代久惠安;  
    居住乃福州;屋建依晉江;  
    家廣置莆田;戶望有霞浦;  
    雄偉大廈門;門奢贏金門;  
    飲水來泉州;想吃去沙縣;  
    耕種有大田;豐收看古田;  
    心靜能三明;神怡時南平;  
    大力舉福鼎;脾性當平和;  
    人心慈平潭;量大自福清;  
    心靜照明溪;為人切清流;  
    日子挺順昌;滋潤有光澤;  
    國盛須政和;民心盼永定;  
    亂世用武平;盛世民柘榮;  
    健康學邵武;產業富連城;  
    父母長壽寧;家人常泰寧;  
    交友圓周寧;諸事全寧化;  
    祈兄弟永安;禱愛人永春;  
    祝親戚漳平;愿朋友南安;  
    風物滿漳州;寶地屬福建!

    posted @ 2010-12-02 11:45 afunms 閱讀(155) | 評論 (0)編輯 收藏

    問題進展

     

    經過對揭陽數據的研究,我終于找到問題的根源。

    1. 對路由的發現,以前的代碼有點問題。又找出以前的論文,明確一下算法。

    2. 揭陽設備路由表的nextHop全是VLAN。所以,這不是H3C或Cisco的問題。如果cisco這樣設置,如果沒有CDP,目前的程序一樣得不出正確的結果。

    3. 比較吃驚或者奇怪的是,H3C的設備有支持Bridge.mib,有的支持Q-brideg.mib,而有的二者都有。

    4. 另一個,H3C的設備比較奇怪的是,它的bridge-mac不會出現在任何交換機的fdb表。因此,通用的二層鏈路發現算法無法運用。

    5. 因為4,所以我只能從路由表進行發現,對于nextHop是VLAN,必須轉成物理接口,然后用排除法(這個算法與通用二層鏈路算法有點類似,只是不用依賴bridge-mac)判斷這條鏈路是否是真實的物理鏈路。

        6. 根據5,修改了發現程序,對現在數據進行“發現”,得到了正確結果!

    posted @ 2010-04-12 20:11 afunms 閱讀(315) | 評論 (2)編輯 收藏

    僅列出標題
    共25頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 Last 

    My Links

    News

    留言簿(18)

    隨筆檔案

    相冊

    搜索

    最新評論

    閱讀排行榜

    主站蜘蛛池模板: 性色av极品无码专区亚洲| 两个人日本WWW免费版| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 国内自产拍自a免费毛片| 日本永久免费a∨在线视频| 亚洲精品乱码久久久久久| 国产高清免费视频| 麻豆va在线精品免费播放| 亚洲v高清理论电影| 麻豆国产人免费人成免费视频 | 亚洲最大中文字幕无码网站| 亚洲日韩人妻第一页| 亚洲免费观看网站| 三年片在线观看免费观看大全中国| 亚洲AV福利天堂一区二区三| 免费黄网在线观看| 久久精品免费视频观看| 国产精品亚洲av色欲三区| 内射干少妇亚洲69XXX| 亚洲AV中文无码乱人伦| 免费h片在线观看网址最新| 久久免费国产精品| 亚洲成av人片在线天堂无| 亚洲欧洲国产日韩精品| 亚洲 国产 图片| 成年女人毛片免费播放视频m| AAAAA级少妇高潮大片免费看| 日韩亚洲不卡在线视频中文字幕在线观看| 亚洲精品综合久久| 成年男女免费视频网站| 久久久久免费看黄a级试看| 粉色视频免费入口| 亚洲欧洲日韩极速播放| 精品日韩亚洲AV无码一区二区三区| 国产猛烈高潮尖叫视频免费| 国产精品久久久久久久久免费| aa毛片免费全部播放完整| 色噜噜的亚洲男人的天堂| 亚洲校园春色另类激情| 午夜亚洲国产理论秋霞| 亚洲综合色自拍一区|