#
看了一天ext,头都晕了。感觉学习新的东西成本真是太大了。对js不熟悉,
学起ajax和ext来真是费劲。呵呵,还是算了吧,就算以后项目中真的要用到这
些东西,那就专门招这方面的人来做,我自己就不用再学这些新东西了。
另外,无间中发现FineReport,这个报表制作工具,试了一下,还真好用,
至少比iReport容易上手。如果以后要用到报表,可以考虑FineReport。
安装Oracle后MyEclipse不能启动,经常遇到这个问题。解决方法:
更改环境变量path
去掉C:\Program Files\Oracle\jre\1.3.1\bin;C:\Program Files\Oracle\jre\1.1.8\bin;
加上C:\Program Files\Java\jdk1.5.0_05\bin
今天学习了Spring中jdbc framework,感觉spring jdbc framework真的搞得太复杂了。
平时我们根本用不到那么多东西。但我还是得把所有的源码都看一遍,因为这是我
的学习内容。
同时,还了解了一下ajax dwr和ext ,下一个版本可以考虑要用ajax,ext做出来的
界面真的太漂亮了,将来,软件界面将成为软件的一个卖点。
http://network.ccidnet.com/art/3723/20071114/1274987_1.html
为了适应网络应用深化带来的挑战,网络在规模和速度方向都在急剧发展,局域网的速度已从最初的10Mbit/s 提高到100Mbit/s,目前千兆以太网技术已得到普遍应用。在网络结构方面也从早期的共享介质的局域网发展到目前的交换式局域网。交换式局域网技术使专用的带宽为用户所独享,极大的提高了局域网传输的效率。可以说,在网络系统集成的技术中,直接面向用户的第一层接口和第二层交换技术方面已得到令人满意的答案。但是,作为网络核心、起到网间互连作用的路由器技术却没有质的突破。在这种情况下,一各新的路由技术应运而生,这就是第三层交换技术:说它是路由器,因为它可操作在网络协议的第三层,是一种路由理解设备并可起到路由决定的作用;说它是交换器,是因为它的速度极快,几乎达到第二层交换的速度。二层交换机、三层交换机和路由器这三种技术究竟谁优谁劣,它们各自适用在什么环境?为了解答这问题,我们先从这三种技术的工作原理入手
1.二层交换技术
二层交换机是数据链路层的设备,它能够读取数据包中的MAC地址信息并根据MAC地址来进行交换。交换机内部有一个地址表,这个地址表标明了MAC地址和交换机端口的对应关系。当交换机从某个端口收到一个数据包,它首先读取包头中的源MAC地址,这样它就知道源MAC地址的机器是连在哪个端口上的,它再去读取包头中的目的MAC地址,并在地址表中查找相应的端口,如果表中有与这目的MAC地址对应的端口,则把数据包直接复制到这端口上,如果在表中找不到相应的端口则把数据包广播到所有端口上,当目的机器对源机器回应时,交换机又可以学习一目的MAC地址与哪个端口对应,在下次传送数据时就不再需要对所有端口进行广播了。二层交换机就是这样建立和维护它自己的地址表。由于二层交换机一般具有很宽的交换总线带宽,所以可以同时为很多端口进行数据交换。如果二层交换机有N个端口,每个端口的带宽是M,而它的交换机总线带宽超过N×M,那么这交换机就可以实现线速交换。二层交换机对广播包是不做限制的,把广播包复制到所有端口上。
二层交换机一般都含有专门用于处理数据包转发的ASIC (Application specific Integrated Circuit)芯片,因此转发速度可以做到非常快。
2.路由技术
路由器是在OSI七层网络模型中的第三层——网络层操作的。路由器内部有一个路由表,这表标明了如果要去某个地方,下一步应该往哪走。路由器从某个端口收到一个数据包,它首先把链路层的包头去掉(拆包),读取目的IP地址,然后查找路由表,若能确定下一步往哪送,则再加上链路层的包头(打包),把该数据包转发出去;如果不能确定下一步的地址,则向源地址返回一个信息,并把这个数据包丢掉。
路由技术和二层交换看起来有点相似,其实路由和交换之间的主要区别就是交换发生在OSI参考模型的第二层(数据链路层),而路由发生在第三层。这一区别决定了路由和交换在传送数据的过程中需要使用不同的控制信息,所以两者实现各自功能的方式是不同的。
路由技术其实是由两项最基本的活动组成,即决定最优路径和传输数据包。其中,数据包的传输相对较为简单和直接,而路由的确定则更加复杂一些。路由算法在路由表中写入各种不同的信息,路由器会根据数据包所要到达的目的地选择最佳路径把数据包发送到可以到达该目的地的下一台路由器处。当下一台路由器接收到该数据包时,也会查看其目标地址,并使用合适的路径继续传送给后面的路由器。依次类推,直到数据包到达最终目的地。
路由器之间可以进行相互通讯,而且可以通过传送不同类型的信息维护各自的路由表。路由更新信息主是这样一种信息,一般是由部分或全部路由表组成。通过分析其它路由器发出的路由更新信息,路由器可以掌握整个网络的拓扑结构。链路状态广播是另外一种在路由器之间传递的信息,它可以把信息发送方的链路状态及进的通知给其它路由器。
3.三层交换技术
一个具有第三层交换功能的设备是一个带有第三层路由功能的第二层交换机,但它是二者的有机结合,并不是简单的把路由器设备的硬件及软件简单地叠加在局域网交换机上。
从硬件上看,第二层交换机的接口模块都是通过高速背板/总线(速率可高达几十Gbit/s)交换数据的,在第三层交换机中,与路由器有关的第三层路由硬件模块也插接在高速背板/总线上,这种方式使得路由模块可以与需要路由的其他模块间高速的交换数据,从而突破了传统的外接路由器接口速率的限制。在软件方面,第三层交换机也有重大的举措,它将传统的基于软件的路由器软件进行了界定,其做法是: 对于数据包的转发:如IP/IPX包的转发,这些规律的过程通过硬件得以高速实现。
对于第三层路由软件:如路由信息的更新、路由表维护、路由计算、路由的确定等功能,用优化、高效的软件实现。
假设两个使用IP协议的机器通过第三层交换机进行通信的过程,机器A在开始发送时,已知目的IP地址,但尚不知道在局域网上发送所需要的MAC地址。要采用地址解析(ARP)来确定目的MAC地址。机器A把自己的IP地址与目的IP地址比较,从其软件中配置的子网掩码提取出网络地址来确定目的机器是否与自己在同一子网内。若目的机器B与机器A在同一子网内,A广播一个ARP请求,B返回其MAC地址,A得到目的机器B的MAC地址后将这一地址缓存起来,并用此MAC地址封包转发数据,第二层交换模块查找MAC地址表确定将数据包发向目的端口。若两个机器不在同一子网内,如发送机器A要与目的机器C通信,发送机器A要向“缺省网关”发出ARP包,而“缺省网关”的IP地址已经在系统软件中设置。这个IP地址实际上对应第三层交换机的第三层交换模块。所以当发送机器A对“缺省网关”的IP地址广播出一个ARP请求时,若第三层交换模块在以往的通信过程中已得到目的机器C的MAC地址,则向发送机器A回复C的MAC地址;否则第三层交换模块根据路由信息向目的机器广播一个ARP请求,目的机器C得到此ARP请示后向第三层交换模块回复其MAC地址,第三层交换模块保存此地址并回复给发送机器A。以后,当再进行A与C之间数据包转发进,将用最终的目的机器的MAC地址封装,数据转发过程全部交给第二层交换处理,信息得以高速交换。既所谓的一次选路,多次交换。
第三层交换具有以下突出特点:
有机的硬件结合使得数据交换加速;
优化的路由软件使 得路由过程效率提高;
除了必要的路由决定过程外,大部分数据转发过程由第二层交换处理;
多个子网互连时只是与第三层交换模块的逻辑连接,不象传统的外接路由器那样需增加端口,保护了用户的投资。
4.三种技术的对比
可以看出,二层交换机主要用在小型局域网中,机器数量在二、三十台以下,这样的网络环境下,广播包影响不大,二层交换机的快速交换功能、多个接入端口和低谦价格为小型网络用户提供了很完善的解决方案。在这种小型网络中根本没必要引入路由功能从而增加管理的难度和费用,所以没有必要使用路由器,当然也没有必要使用三层交换机。
三层交换机是为IP设计的,接口类型简单,拥有很强二层包处理能力,所以适用于大型局域网,为了减小广播风暴的危害,必须把大型局域网按功能或地域等因素划他成一个一个的小局域网,也就是一个一个的小网段,这样必然导致不同网段这间存在大量的互访,单纯使用二层交换机没办法实现网间的互访而单纯使用路由器,则由于端口数量有限,路由速度较慢,而限制了网络的规模和访问速度,所以这种环境下,由二层交换技术和路由技术有机结合而成的三层交换机就最为适合。
路由器端口类型多,支持的三层协议多,路由能力强,所以适合于在大型网络之间的互连,虽然不少三层交换机甚至二层交换机都有异质网络的互连端口,但一般大型网络的互连端口不多,互连设备的主要功能不在于在端口之间进行快速交换,而是要选择最佳路径,进行负载分担,链路备份和最重要的与其它网络进行路由信息交换,所有这些都是路由完成的功能。在这种情况下,自然不可能使用二层交换机,但是否使用三层交换机,则视具体情况而下。影响的因素主要有网络流量、响应速度要求和投资预算等。三层交换机的最重要目的是加快大型局域网内部的数据交换,揉合进去的路由功能也是为这目的服务的,所以它的路由功能没有同一档次的专业路由器强。在网络流量很大的情况下,如果三层交换机既做网内的交换,又做网间的路由,必然会大大加重了它的负担,影响响应速度。在网络流量很大,但又要求响应速度很高的情况下由三层交换机做网内的交换,由路由器专门负责网间的路由工作,这样可以充分发挥不同设备的优势,是一个很好的配合。当然,如果受到投资预算的限制,由三层交换机兼做网间互连,也是个不错的选择。
annotation 不能对private的属性进行注解,真让人郁闷。
其实对private属性注解,不会出错,只Class.getFields()只能得到那些public属性,
取不private属性,当然就不可能取到它的注解了,这个问题不知怎么解决。
struts里总用到Thread.currentThread().getContextClassLoader()
而我们一般只用到Class.forName()或Class.getClassLoader()
所以想知道二者有什么区别,以下是从网上找到的:
Classloader存在下面问题:
在一个JVM中可能存在多个ClassLoader,每个ClassLoader拥有自己的NameSpace。
一个ClassLoader只能拥有一个class对象类型的实例,但是不同的ClassLoader可能
拥有相同的class对象实例,这时可能产生致命的问题。如ClassLoaderA,装载了
类A的类型实例A1,而ClassLoaderB,也装载了类A的对象实例A2。逻辑上讲A1=
A2,但是由于A1和A2来自于不同的ClassLoader,它们实际上是完全不同的,
如果A中定义了一个静态变量c,则c在不同的ClassLoader中的值是不同的。
Class.getClassLoader() returns the ClassLoader that loaded the class it
is invoked on.
Thread.getContextClassLoader() returns the ClassLoader set as the
context ClassLoader for the Thread it is invoked on, which can be
different from the ClassLoader that loaded the Thread class itself if
the Thread's setContextClassLoader(ClassLoader) method has been invoked.
This can be used to allow the object starting a thread to specify a
ClassLoader that objects running in the thread should use, but the
cooperation of some of those objects is required for that to work.
PVC数据有从Excel中导入的,也有程序自动扫描的结果,真是挺乱的。
但用户最关心这个PVC数据,所以我必须把两部分数据整合到一起。
1. 程序扫描整个网络,得到所有PVC数据,把数据存入nms_atm_pvc
2. 把nms_atm_pvc数据整合到pl_pvc_info中去,对于pl_pvc_info中没有数据,则加入。
3. 以后每隔两小时扫描全网PVC,与pl_pvc_info对比,如果有增加则报警。
4. 对于从ITSM来的PVC数据,是用户手工加入的合法数据,加入pl_pvc_info。
1
|
在ITSM新增一条PVC后,自动把PVC信息插入NMS。
|
2
|
PVC报警:
a.如果PVC带宽变大,要报警;
b.如果有增加PVC,而且又不是从ITSM那边过来的,也要报警;
c.如果PVC状态从active变为inactive也要报警;
报警考虑以声音报警。
|
3
|
对于PVC数据,以程序自动扫描结果为主,以Excel文件为参考。
|
4
|
对于路由器,8个部门应该有8张图。
|
5
|
把“纵向专网带宽分配”PPT加入NMS系统,以便给领导演示。
|
水长从福州到东莞,拐道过来广州看我。呵呵,三年没见过了。见了老同学特别高兴。
晚上也给在厦门的多位同学打了电话,确实很久没与他们联系了。
这个周末很愉快。
JDK、Tomcat和MySQL的绿色安装方法。
要制作web系统setup一键安装程序,必须先解决JDK、Tomcat和MySQL三者的绿色
安装问题。今天研究了半天,终于有了结果。
现在假设我们要把这三者安装到C:\SourceView目录下。
1. JDK。Copy安装好的JDK,C:\Program Files\Java\jdk1.5.0_11到
C:\SourceView下就可以了。
2. Tomcat。Copy安装好的Tomcat到C:\Sourceview下。然后修改bin下的startup.bat
在文件顶部加上
set CATALINA_HOME=C:\SourceView\tomcat
set JAVA_HOME=C:\SourceView\jdk1.5.0_11
3. MySQL。最麻烦的就是MySQL了。Copy安装好的MySQL到C:\SourceView下。
首先修改my.ini.
basedir=C:/sourceview/MySQL/
datadir=C:/sourceview/MySQL/data/
然后,执行
C:\sourceview\MySQL\bin>mysqld-nt --install MySQL5.0
--defaults-file="C:\sourceview\MySQL\my.ini"
安装MySQL服务,服务名MySQL5.0。
C:\windows\system32\net start MySQL5.0
启动MySQL服务。
这样,以后只要copy SourceView到需要安装的地方,然后修改一下几点文件,
这三者就能用了。
把ATM Discovery独立出来,而且去掉了一个bug,多发现了四台设备,
下图是今天发现的结果。估计这是我能做出最好的结果了,呵呵
1. createConnection,close,rollback这些操作都应该在dao之外的service来做。
2. 默认connection的autoCommit为true。当要执行事务时,应该置为false,
因为autoCommit=true时,rollback不能用。
3. 当conn.getAutoCommit()=false时,说明要去进行事务操作,这时commit
应该由调用dao的service来执行。
4. 涉及到update的dao方法都应该throw exception,以便在service中catch。
5. dao的设计遵循原子操作的原则,不在这些接口中实现复杂的业务逻辑。
学习Struts的过程中认识了DynaBean,一时不理解何为动态Bean。看了以下的例子,
就很容易明白了。
import java.util.Date;
import org.apache.commons.beanutils.BasicDynaClass;
import org.apache.commons.beanutils.DynaBean;
import org.apache.commons.beanutils.DynaClass;
import org.apache.commons.beanutils.DynaProperty;
public class TestService {
public static void main(String[] hey) throws Exception{
DynaProperty[] pro = new DynaProperty[]{//准备一个属性,动态定义类依靠这些属性来决定类的构成。
new DynaProperty("title", String.class),
new DynaProperty("content", String.class),
new DynaProperty("createdTime", Date.class),
new DynaProperty("id", Integer.class),
};
DynaClass articleClass = new BasicDynaClass("Article",null,pro);//定义了一个类
DynaBean article = articleClass.newInstance();//声明了一个ArticleClass的对象
article.set("title","this is a test");//对该对象进行操作
article.set("content","oh my god");
article.set("createdTime",new Date());
article.set("id",new Integer(1));
System.out.println(article.get("title"));
System.out.println(article.get("content"));
System.out.println(article.get("createdTime"));
System.out.println(article.get("id"));
}
}
1.Java Annotations.A new feature of Java Tiger.I realized this functionality
would be helpful to our next architecture design(next version of our NMS
product).
2.Java Concurrency Programming.The section is particularly useful to us as
polling thread is an important element in NMS product,so I should learn
more about concurrency programming.
3.JMX.It provides a simple,scalable management solution to a distributed
system,I think it is the best instrument for me.With Java Management
Extensions (JMX), you can configure, manage and monitor your Java
applications at run-time, as well as break your applications into components
that can be swapped out. JMX provides a window into an application's state
and its behavior, and a protocol-independent way of altering both state and
behavior. It lets you expose portions of your application in just a few lines of
code.
JMX in action is a good book,The examples were easy to follow and thorough
though sometimes trivial.
4.Spring.A powerful framework,I don't use it at all, but I want to study its
thinking.My goal is to build a simple,scalable MVC framework,must be better
than our present.
原来不理解Spring jdbc中的核心类JdbcTemplate的DataSource为什么都是当参数从外面传入,
今天看了一篇“DAO的困惑-事务处理”,其中提到“Dao只能使用资源,而不应该管理资源,
也就是说,Dao可以使用Connection,但不能维护它--生成和关闭”。
在简单的应用系统中,也许根本不会遇到事务,但在一个比较复杂的系统中,经常要处理
事务,这时JdbcTemplate的这种设计就显示出它的合理和完美。 在SourceView的一个版本中,
我一定会重新考虑Dao的设计。