2/25/2008
1/26/2008
安装Jetspeed-2
1.下载jetspeed
http://apache.mirror.phpchina.com/portals/jetspeed-2/binaries/jetspeed-2.1.3-installer.jar
2.执行jetspeed-2.1.3-installer.jar,选择安装目录,选择数据库类型为postgres
3.postgres中创建数据库prod-2
4.进入Jetspeed-2.1.3\database,修改database.properties,完整数据库的配置
5.将postgres下的jdbc jar复制至server/shared/lib 下
6.进入Jetspeed-2.1.3\database,运行ant
7.启动tomcat
11/24/2007
CGLIB部分翻译
原文:http://www.ociweb.com/jnb/jnbNov2005.html
使用CGLIB库创建动态代理
介绍CGLIB库
代理提供一个替身或持有者去控制访问目标对象。他引入了一种间接访问对象的方式,自从JDK1.3开始,JDK就引入了动态代理,被经常用做创建动态代理。JDK的动态代理使用简单,但是它所代理的类需要有一个或多个接口。如果需要代理旧系统中遗留下来但没有接口的类,怎么办呢?你需要使用CGLIB库。
CGLIB库是一个强大的、高效的代码生成类库。它广泛的被使用在基于面向方面编程(AOP)的框架中,比如Spring AOP和dynaop,提供方法去拦截。Hibernate,最流行的object-relation mapping工具,也用CGLIB库去代理单联关系.(many-to-one和one-to-one)关联(非对集合的延迟加载,它使用不同的机制实现).EasyMock和jMock使用模拟对象对Java代码进行测试的类库,他们都使用CGLIB库为那些没有接口的类创建模拟对象。
CGLIB库在底层使用一个而快的字节码处理框架—ASM,它将存在的字节码进行转换并生成新的类。除CGLIB之外,脚本语言解析器,比如Groovy和BeanShell也使用ASM生成Java字节码。ASM使用类似SAX解析器方式的机制来实现高性能。不鼓励直接使用ASM,因为它需要较高的JVM知识,包括类文件形式和命令集.
图1: CGLIB库和ASM字节码框架
图1展示了CGLIB库相关框架和语言直接的关系.。注意一些框架,比如Spring AOP和Hibernate,通常会根据需要,既使用CGLIB库又使用JDK动态代理.Hibernate为网状的应用服务器使用JDK动态代理来实现事务管理适配器;而Spring AOP,除非你指定使用CGLIB代理,否则默认使用JDK动态代理。
CGLIB Proxy APIs
CGLIB库基本代码很小,但是由于缺乏文档,因此很难学习.目前版本为2.1.2。CGLIB库的结构如下
• net.sf.cglib.core
底层字节码处理类,他们大部分与ASM有关系。
• net.sf.cglib.transform
编译期或运行期类和类文件的转换
• net.sf.cglib.proxy
实现创建代理和方法拦截器的类
• net.sf.cglib.reflect
实现快速反射和C#风格代理的类
• net.sf.cglib.util
集合排序工具类
• net.sf.cglib.beans
JavaBean相关的工具类
要创建动态代理,你只需要使用在代理包里的一些API.
如之前的章节中所述,CGLIB库是一个比ASM级别高的层。它无需实现接口去代理类是非常有效的。本质上,它动态的生成一个子类去覆盖被代理类的non-final方法并且wires up hooks去毁掉用户定义的拦截器。他比JDK动态代理方式更快速.
图2: CGLIB库用作代理的常用API
如图2所示,CGLIB库常用于实现代理的API. net.sf.cglib.proxy.Callback接口是一个标记接口。所有的回调接口都继承这个接口并被net.sf.cglib.proxy.Enhancer使用。
net.sf.cglib.proxy.MethodInterceptor是最普遍的回调类型。它通常使用于基于代理的AOP实现来拦截方法调用,这个接口有单一的一个方法
public Object intercept(Object object, java.lang.reflect.Method method, Object[] args, MethodProxy proxy) throws Throwable;
当net.sf.cglib.proxy.MethodInterceptor是一个代理的所有方法的回调时,调用该方法前,代理调用的方法会通知原有对象上的方法. 如图3所示。第一个参数是代理对象。第二个参数是原始对象,第三个参数是方法被拦截是方法的参数原始的方法也可以被普通的反射类java.lang.reflect.Method的对象使用,也可以被net.sf.cglib.proxy.MethodProxy对象使用。net.sf.cglib.proxy.MethodProxy由于更快,所以通常是首选,客制化代码能够在调用原始方法之前或者后被注入.
图三: CGLIB MethodInterceptor
10/25/2007
9/21/2007
suse 安装 jdk5
1. 下载jdk5 -- jdk-1_5_0_09-linux-i586-rpm.bin
2. 将下载文件 放在/tmp下
3. 输入./jdk-1_5_0_09-linux-i586-rpm.bin
4. java -version 如果版本是java version "1.4.2_06",则需修改环境变量.
5. 编辑/ect/profile
6. 在最后添加
export JAVA_HOME=/usr/java/jdk1.5.0_06
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVA_HOME/bin:$PATH
7.注销,进入系统 java -version "1.5.0_09"
8/11/2007
young girl
不知不觉喜欢上一个小丫头,比我小...6岁
怪怪的感觉
她要是问我喜欢她什么,我肯定还是不知道怎么回答
因为喜欢,所以喜欢
比如:
被一个变态骚扰的时候
她认为吸引对方的是她的文采胜过于她的照片
而忽略了别人正在骚扰她的事实
比如:
谈论我很色的这个问题
到了我也同意自己是个色狼的地步
于是我表示要控制自己的荷尔蒙
她竟然认为这样她很失败
阿弥陀佛!
5/04/2007
新体验
5月3号, 一时的冲动和3618的折磨下, 溜到了五棵松;
下了车, 街上有一坨人, 不过mm们穿的都很到位, 心情不错;
找了个店, 卖手机的mm长的一般, 所以我决定速战速决;
blablablablablablablabla..........
十五分钟后揣着小明出来了;
他有以下几个优点:
1. 是彩屏, 也就是彩色的屏幕, 标识着本人终于进入二十一世纪;
2. 有摄像头, 标志着坐我对面的处长, 你以后上班睡觉的样子会成为我勒索你的证据;
缺点:
1. 写短信要用两只手了.
2. 功能太多,不知道是干什么用的.
3. 会引起贼注意(以前3618小偷看到了都不动手)
给她发了几个短信, 没理我, 这不重要, 拿支笔写短信是很好玩的事情;
以后开会的时候, 把声音开到最大;
再见了3618, 如果哪天和流氓打架, 会有用武之地的.

