随笔 - 12, 文章 - 0, 评论 - 5, 引用 - 0
数据加载中……

2012年7月26日

esxi 中两台vesx vmkernel不能通信

在一台DELL R710上安装了esxi5.0,并部署了两台esxi5.0的VM,名为vesxA,vesxB.

并在两台vesx上分别创建了vmkernel,连接到同一vSwitch,完成后,发现两台vesx间不能用vmkernel通信。

 

后请教有经验的同事,说是虚中虚需要在vSwitch中开启 混杂模式,经测试问题解决。

 

但是为什么呢?

 

请教高人得出答案:

 

由于vSwitch中的MAC TABLE记录只能从虚拟机的.vmx文件中读取。而.vmx中记录的MAC是虚拟机的网卡的MAC,当我们新建了一个vmkernel port后,生成的MAC并没有写入.vmx。所以当vSwitch 收到关于vmkernel port后,发现没有相关MAC记录,就会把包丢弃。

有人会问,交换机不是有Flooding功能么?

估计是由于vSwitch节省资源开销的原因,没有使用这个功能,所以这个时候就需要打开混杂模式,将vSwitch变成vHUB.

posted @ 2012-07-26 22:36 拼搏 阅读(1689) | 评论 (1)编辑 收藏

Suse Linux开启FTP服务

一、配置/etc/vsftpd.conf文件

 

1、vi /etc/vsftpd.conf

 

2、修改如下配置项

 

 anonymous_enable=YES  改成 anonymous_enable=NO   // 不启用匿名访问

 

 #local_enable=YES           改成 local_enable=YES             // 开启本地用户登录服务

 

 #write_enable=YES          改成 write_enable=YES            // 开启任何用户的写权限

 

二、配置/etc/ftpusers文件

 

1、vi  /etc/ftpusers

 

2、该文件中列出的用户是禁止使用FTP登录的,如果要使这些用户通过FTP登录,在用户前面加上#

 

三、重启FTP服务

 
service vsftpd restart

posted @ 2012-07-26 22:35 拼搏 阅读(8784) | 评论 (0)编辑 收藏

Myeclipse启动不了的解决方法

   我们在开发过程中经常在加载大工程时由于项目很大,导致编译时间很长。或是其他原因导致进度条有时候一直在不停地跑,占用了大量内存,在无奈之下直接将进程kill掉,当再次打开,这时候悲剧的事情发生了 。 
    发现MyEclipse启动不了了,进程的内存大小永远都是恒定值。陷入了一个纠结中。 

这里就说一下在工作经常遇到这样的问题是怎样解决的: 

环境说明 
IDE版本: Myecplise6.0(其他版本方法相同) 
安装路径:D:\dev_IDE\myeclipse 
工作空间:D:\dev_IDE\myeclipse\workspace 

方法一:修改工作空间 
    在刚启动Myeclipse的时候会有一个选择工作空间的地方。换一个新的工作空间即可,若是原来将默认工作空间勾中了,没有出来,就去你的MyEclipse安装路径中(如:D:\dev_IDE\myeclipse\eclipse\configuration\.settings),里面有个org.eclipse.ui.ide.prefs文件,将里面的SHOW_WORKSPACE_SELECTION_DIALOG修改为true即可。 
    这样做有个坏处,就是需要你重新import你的工程,需要重新编译,需要你养成经常备份的习惯。 

方法二:删除错误编译信息 
    这个方法最近才发现,当你由于在编译工程期间将进程kill掉以后,就会有编译加载“内容”出错,导致在启动的时候无法解析这个“内容”,所以要将该内容清除。如,当你的工程名为“TestProject”,在安装文件夹中(D:\dev_IDE\myeclipse\workspace\.metadata\.plugins\org.eclipse.core.resources\.projects\TestProject),有两个文件.markers和.markers.snap,将这两个文件删除。重启Myeclipse,OK了。  

posted @ 2012-07-26 22:34 拼搏 阅读(27538) | 评论 (3)编辑 收藏

2012年7月21日

三十而立的人生准则,会有更新

第一条: 
    学习是和我的社会地位、收入等挂钩,学习是一种最好的投资。 
第二条: 
    时间管理不是让我在有限的时间里面做更多的事,而是让我在把时间都放在有投资时间里面,去掉不必要做的事,做有投资价值的事(就是很重要但不紧急的事)。比如:锻炼身体,每天锻炼一小时,健康快乐生活一辈子,幸福一辈人。 
第三条: 
    这个世界上不是什么事情都是非黑既白,有很多灰色地带的,为生存有时还会踩界。 
第四条: 
    in:out=1:1 

posted @ 2012-07-21 22:24 拼搏 阅读(1144) | 评论 (0)编辑 收藏

与JDK奋斗的一上午

话说本人也是手欠啊,操作系统是Win7的前几天无法识别自己的移动硬盘,于是我就还原系统了,JDK安装在D盘。当时还原完就直接将以前安装在D盘的程序文件夹全部删除了。 
然后就是各位熟知的悲剧了,无论怎么重新安装都不行了,我也把注册表里面几乎所有的方法都尝试过了,都不行。查看了网上。总结来看有以下几种“偏方”: 
1、删除注册表里面所有和Java相关的表项 ---------事实上我试过了,但是很不幸,我把有Java的都删了大半,但是我这里没用 

2、关闭windows的windows installer功能打开命令行 ,输入msiexec /unregserver 
重新下载一个 windows installer,重新安装一遍然后再启用就好了                 再输入msiexec /regserver 

3、什么360啊,完美卸载啊都无法删除。 

4、这就是大救星啊...去下一个window  installer  clean up ,打开软件,然后把里面关于JDK的项删除。 

终于可以重新安装JDK了。  

posted @ 2012-07-21 22:24 拼搏 阅读(1126) | 评论 (0)编辑 收藏

设计模式--状态模式(State)

前几天由于忙工作上的事情,每天加班到10点左右才回家,回到家就没有再开电脑更新东西,今天早了一些回家,开始继续更新东西,今天要写的是状态模式,哦,对于一个没有状态的人来说,写状态模式,不知道会写成什么样子,反正是一起讨论用嘛,能把我所知道的清楚表达出来已经很心满意足啦。在理解状态模式的时候,我总觉得它和策略模式很像很像,有人说它们是孪生兄弟,那我们现在看看状态模式到底是一个什么样的东西。

状态模式是对象的一个行为模式,它允许一个对象在其内部状态改变的时候改变其行为,这个对象看上去就像改了了它的类一样。

下图是关于红绿灯转换的一个实现类图,具体的转换是这样子的,在初始的情况下,设定一个灯的状态,比如是绿灯,那么灯的下一个状态则是黄灯,紧接着是红灯,然后再是绿灯,依次循环;通过改变灯的状态,改变其行为。

下面是这个类图的实现代码:

package com.plabmedia.state;

public interface LightState {

/**
* 打印当前的状态
*/
public void print(Light light);

}

package com.plabmedia.state;

public class RedLight implements LightState{

@Override
public void print(Light light) {
System.out.println("current state is red");
light.setState(new GreenLight());
}

}

package com.plabmedia.state;

public class YellowLight implements LightState{

@Override
public void print(Light light) {
System.out.println("current state is yellow");
light.setState(new RedLight());
}

}

package com.plabmedia.state;

public class GreenLight implements LightState {

@Override
public void print(Light light) {
System.out.println("current state is green");
light.setState(new YellowLight());
}

}

package com.plabmedia.state;

public class Light {

private LightState state;

public LightState getState() {
return state;
}

public void setState(LightState state) {
this.state = state;
}

public void print(){
state.print(this);
}

public Light(LightState state){
this.state = state;
}

}

package com.plabmedia.state;

public class Client {

public static void main(String args[]){
Light light = new Light(new GreenLight());
light.print();
light.print();
light.print();
light.print();
light.print();
light.print();
}

}

运行结果:

current state is green
current state is yellow
current state is red
current state is green
current state is yellow
current state is red

上面是对状态模式一个小小的实现,这个实现也仅仅是认识级的,在我们实际应用中,如果用到状态模式,应该比这个要负责的多,只是基本的结构是相似的。那我们下面针对状态模式做一些讨论。

1.在什么情况下使用状态模式:

  • 一个对象的行为依赖于它所处的状态,对象的行为必须随着其状态的改变而改变;
  • 需要多多重条件转移语句进行演化的时候,可以把每个分支封装成一个状态类;现在写代码的时候,我是不太喜欢用条件转移语句,特别是最好的那个else语句,我觉得它承担的东西太多了,前面不满足的情况它都要来处理,凭什么啊。
2.状态模式要注意的地方:
  • 谁来定义状态的变化:客户端还是状态内部决定?这要看当时应用的环境,如果状态的变化是固定的,我觉得可以再客户端进行设定;如果状态的变化依赖于前一个状态,比如在工作流系统中,当前状态是依赖于前一个状态的,这需要状态内部来觉得。
  • 状态对象创建时机:需要的时候创建?还是事先创建好所有的对象,供需要的时候调用?这要分系统需要来决定,如果一个系统,状态变化的顺序固定,不那么频繁,则可以在需要的时候创建所需要的对象;否则,对于频繁变化的状态,从性能上将,还是首先创建好各个状态对象,供需要时调用。
  • 可以把环境类传到具体的状态类中,状态类在需要的时候调用环境类,比如示例中的样子,其实在每个状态类里面,也可以直接调用环境类的print方法,这样看来,Client只需要初始化环境类,然后就可以看到它的状态在不停地变化。
3.状态模式与策略模式的区别:
我粗俗的说一些,从我的理解的基础上,二者之间的区别在于状态模式在集体作战,而策略模式是单兵作战,怎么说呢?状态模式因为其内部状态的改变会有不同的行为出现,而对于策略模式,只要客户端选中了一种策略,在整个生命周期内,都是这种策略。所以,在区分使用状态模式和策略模式的时候,主要是看系统有没有状态的变化,如果系统在整个生命周期内,只有一种状态,那很好,选择策略模式;如果系统在整个过程中,状态多样性,那需要选择状态模式。
先写这么多吧,好没有状态啊,希望大家都抽出时间一起讨论,说说自己对状态模式的看法。

posted @ 2012-07-21 22:23 拼搏 阅读(920) | 评论 (0)编辑 收藏

2012年7月19日

tomcat 配置环境变量

1.我的电脑---属性---高级系统设置---环境变量---(系统变量)新建


变量名:CATALINA_HOME(必须)

变量值:tomcat的路径      (我的是:   E:\工具\学习软件\apache-tomcat-6.0.35\apache-tomcat-6.0.35)


2.找到path变量,在后面加上

   变量值后:;%CATALINA_HOME%;%CATALINA_HOME%\bin;(用;和前面的分开)


3. win+R 就可以cmd了(默认是startup开启,shutdown 结束;我是改成ts开启,td结束)

posted @ 2012-07-19 22:21 拼搏 阅读(676) | 评论 (0)编辑 收藏

Spring AOP源于生活的原理(一)

AOP原理

          spring用代理类包裹切面,把他们织入到Spring管理的bean中。也就是说代理类伪装成目标类,它会截取对目标类中方法的调用,让调用者对目标类的调用都先变成调用伪装类,伪装类中就先执行了切面,再把调用转发给真正的目标bean。 


生活中的AOP

现在可以自己想一想,怎么搞出来这个伪装类,才不会被调用者发现(过JVM的检查,JAVA是强类型检查,哪里都要检查类型)。 
实现和目标类相同的接口,我也实现和你一样的接口,反正上层都是接口级别的调用,这样我就伪装成了和目标类一样的类(实现了同一接口,咱是兄弟了),也就逃过了类型检查,到java运行期的时候,利用多态的后期绑定(所以spring采用运行时),伪装类(代理类)就变成了接口的真正实现,而他里面包 裹了真实的那个目标类,最后实现具体功能的还是目标类,只不过伪装类在之前干了点事情(写日志,安全检查,事物等)。 

兄弟模式

生活解析

这就好比,一个人让你办件事,每次这个时候,你弟弟就会先出来,当然他分不出来了,以为是你,你这个弟弟虽然办不了这事,但是他知道你能办,所以就答应下来了,并且收了点礼物(写日志),收完礼物了,给把事给人家办了啊,所以你弟弟又找你这个哥哥来了,最后把这是办了的还是你自己。但是你自己并不知道你弟弟已经收礼物了,你只是专心把这件事情做好。 

在兄弟模式中spring会使用JDK的java.lang.reflect.Proxy类,它允许Spring动态生成一个新类来实现必要的接口,织入通知,并且把对这些接口的任何调用都转发到目标类。

实际理论

JDK动态代理:其代理对象必须是某个接口的实现,它是通过在运行期间创建一个接口的实现类来完成对目标对象的代理。

 父子模式

    生活解析

顺着这个思路想,要是本身这个类就没实现一个接口呢,你怎么伪装我,我就压根没有机会让你搞出这个双胞胎的弟弟,那么就用第2种代理方式,创建一个目标类的子类,生个儿子,让儿子伪装我 。

 生成子类调用,这次用子类来做为伪装类,当然这样也能逃过JVM的强类型检查,我继承的吗,当然查不出来了,子类重写了目标类的所有方法,当然在这些重写的方法中,不仅实现了目标类的功能,还在这些功能之前,实现了一些其他的(写日志,安全检查,事物等)。 

这次的对比就是,儿子先从爸爸那把本事都学会了,所有人都找儿子办事情,但是儿子每次办和爸爸同样的事之前,都要收点小礼物(写日志),然后才去办真正的事。当然爸爸是不知道儿子这么干的了。 这里就有件事情要说,某些本事是爸爸独有的(final的),儿子学不了,学不了就办不了这件事,办不了这个事情,自然就不能收人家礼了。  

在父子模式中spring使用CGLIB库生成目标类的一个子类,在创建这个子类的时候,spring织入通知,并且把对这个子类的调用委托到目标类。 

实际理论

CGLIB代理:实现原理类似于JDK动态代理,只是它在运行期间生成的代理对象是针对目标类扩展的子类。CGLIB是高效的代码生成包,底层是依靠ASM(开源的java字节码编辑类库)操作字节码实现的,性能比JDK强。

两种模式总结

相比之下,兄弟模式好些,它能更好的实现松耦合,尤其在今天都高喊着面向接口编程的情况下,父子模式只是在没有实现接口的时候,也能织入通知,应当做一种例外。

posted @ 2012-07-19 22:20 拼搏 阅读(758) | 评论 (0)编辑 收藏

2012年7月17日

Oracle备份和恢复

备份

备份其实就是为了防止出错或者宕机时,作为冗余的一种手段。

一、Oracle备份从备份类型上分可以分为两类:物理备份和逻辑备份

1、 物理备份:copy,将datafilecontrol file等文件copy到别的地方

         Oracle也提供了一些工具比如rman、用户管理备份。

2、 逻辑备份:复制数据

imp/expimpdp/expdp

二、按备份时的数据库状态

   两种状态:启动状态和关闭状态

1、 热备份(联机备份)

2、 冷备份(脱机备份)

三、从备份的状态

1、一致性备份(拥有相同的scn

2、非一致性备份

四、备份规模大小

1、完全备份

      注意:归档模式下的备份才为有效备份,当然要分为一致性和不一致性。

            非归档需要关闭才是有效备份,打开的不建议使用。

3、 表空间备份

注意:当数据库在归档模式下备份才有效备份

     表空间处于只读或者offline有效备份

4、 数据文件

注意:归档下的备份是有效备份

     数据文件被设置为read olny或者offline时的备份有效

5、控制文件

6、归档日志文件

恢复

就是将业务回到数据块崩溃前的状态

一、实例恢复(crash recovery

Oracle自动进行

1、缓存恢复(cache recovery

2、事务恢复(transaction recovery

二、介质恢复(media recovery

三、恢复方式

1、完全恢复

     1)如果是整库恢复

      mount数据库

      确认所有的数据文件为online状态

      执行恢复操作

      用所有Redo logs文件

      2)表空间或者数据文件及恢复

      open

      将需要恢复的表空间设置为offline

      执行恢复

      redo logs

2、 不完全恢复

1) 基于时间

2) 基于scn

3) 基于cancel

4) 基于日志序列号

   常见的备份和恢复技术

1、 用户管理的备份和恢复

2、 RMAN

3、 Imp/expimpdp/expdp

4、 FLASHBACK

5、 GG

posted @ 2012-07-17 21:32 拼搏 阅读(1039) | 评论 (0)编辑 收藏

SQL Server 数据转换

数据转换服务的概念


       通常数据总是以不同的格式,存储在不同的地方,有的可能是文本文件,有的虽然具有表结构但不属于同一种数据源。这些情况极大地妨碍了数据的集中处理。为此SQL Server提供了DTS(Data Transformation Servers)组件。

       DTS本身包含多个工具,并提供了接口来实现在任何支持OLEDB的数据源间导入,导出或传递数据,并使这一工作变得简单,高效。

       利用DTS可能在任何OLEDB,ODBC 驱动程序的数据源或文本文件和SQL Server之间导入导出或传递数据具体表现在:

数据的导入导出服务

       通过读写数据在不同应用程序间交换数据。例如:可以将文本文件或Microsoft Access数据库导入到SQL Server,也可以把数据从SQL Server导出到任何OLEDB数据源。

转换数据

       所谓传递是指在数据未到达目标数据源前而对数据采取的系列操作。比如:DTS允许从源数据源的一列或多列计算出新的列值,然后将其存储在目标数据库中。

传递数据库对象

       在异构数据源情况下,DTS的内置工具只能在数据源间传递表定义和数据。如果要传递其他数据库对象,如索引,约束,视图时,必须定义一个任务,从而在目标数据库上执行那些包含在任务中的SQL语句,SQL语句是被用来创建这些数据库对象的。

DTS结构

      DTS将数据导入,导出或传递定义成可存储的对象,即包裹或称为包,每一个包都是包括一个或具有一定顺序的多个任务的工作流,每个任务可以将数据从某一数据源拷贝至目标数据源,或使用Active脚本转换数据,或执行SQL语句,或运行外部程序。也可以在SQL Server数据源间传递数据库对象。包对象用来创建并存储步骤,这些步骤定义了一系列任务执行的顺序,以及执行任务的必要细节。

      包是顶层对象,它包含三种底层对象:连接,任务,步骤

连接:定义了有关源和目标数据的信息,这些信息包括数据格式和位置以及安全认证的密码。DTS可不包含或包含多个连接

任务:每个DTS包都含有一个或多个任务,每个任务都是数据转换(传递)处理的工作项目。

步骤:步骤对象定义了任务执行的顺序,以及某一任务的执行是否依赖前一任务的结果。步骤的一个重要特性是步骤的优先权约束。

 

数据的导入

       方法一:用企业管理器

1,             打开企业管理器,打开要导入数据的数据库,在表上按右键,所有任务——导入数据,弹出DTS导入/导出向导,按下一步

2,             选择数据源,即要导入的文件,按下一步

3,             选择目的,选择Microsoft OLEDB 提供程序,选择数据库服务器,然后单击必要的身份验证方式。按下一步

4,             在指定表格复制或查询对话框中,单击复制表格

5,             在选择源表格对话框中,单击全部选定。下一步,完成。

        方法二:Transact—SQL语句

数据的导出

       方法一:用企业管理器

1,  打开企业管理器,打开要导入数据的数据库,在表上按右键,所有任务——导入数据,弹出DTS导入/导出向导,按下一步

2,单击下一步就会出现导出数据源对话框

       

3,单击下一步,则选择目的对话框

   

4,单击下一步,则出现指定表复制或查询对话框

  

5,单击下一步,选择源表和视图对话框


6,

 


8,

   

posted @ 2012-07-17 21:31 拼搏 阅读(989) | 评论 (0)编辑 收藏