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 阅读(201) | 评论 (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 阅读(432) | 评论 (1)编辑 收藏

JBPM流程展现改进

1.在连线加上文字
2.换了图标




posted @ 2011-05-30 10:52 afunms 阅读(182) | 评论 (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 阅读(364) | 评论 (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 阅读(180) | 评论 (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 阅读(155) | 评论 (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 阅读(288) | 评论 (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 阅读(3431) | 评论 (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 阅读(239) | 评论 (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 阅读(1923) | 评论 (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 阅读(2007) | 评论 (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 阅读(3061) | 评论 (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 阅读(250) | 评论 (0)编辑 收藏

用福建地名组成的祝福

生活如永定;价值如连城;
幸福如龙海;长寿比东山;  
身体要永泰;事业定长泰;  
生意拟建瓯;道路登上杭;  
快乐永长乐;笑容如石狮;  
人生愿福安;命运靠德化;
运气至将乐;财气冲云霄;  
爱情似罗源;缘份聚浦城;  
佳人倚屏南;秋眸透闽清;  
生活悠宁德;稳定胜龙岩;  
闲来学仙游;累了歇闽候;  
悠然过连江;漫步武夷山;  
春天踏漳浦;夏季潜安溪;  
秋来往南靖;冬至望建阳;   
客家祖长汀;土楼崇华安;  
景美叹松溪;水幽赞尤溪;  
世世祈诏安;代代久惠安;  
居住乃福州;屋建依晋江;  
家广置莆田;户望有霞浦;  
雄伟大厦门;门奢赢金门;  
饮水来泉州;想吃去沙县;  
耕种有大田;丰收看古田;  
心静能三明;神怡时南平;  
大力举福鼎;脾性当平和;  
人心慈平潭;量大自福清;  
心静照明溪;为人切清流;  
日子挺顺昌;滋润有光泽;  
国盛须政和;民心盼永定;  
乱世用武平;盛世民柘荣;  
健康学邵武;产业富连城;  
父母长寿宁;家人常泰宁;  
交友圆周宁;诸事全宁化;  
祈兄弟永安;祷爱人永春;  
祝亲戚漳平;愿朋友南安;  
风物满漳州;宝地属福建!

posted @ 2010-12-02 11:45 afunms 阅读(140) | 评论 (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 阅读(305) | 评论 (2)编辑 收藏

仅列出标题
共25页: 上一页 1 2 3 4 5 6 7 8 9 下一页 Last 

My Links

News

留言簿(18)

随笔档案

相册

搜索

最新评论

阅读排行榜