第一周的工作主要是通读源码,了解相关技术
Netty
根据张老师给定的Netty文档,自己动手跟着例子跑了下程序,了解了Netty的机制,有助于以后的工作。
增加删除指定版本功能
由于项目需求,在录制版本功能中需要有删除指定版本的功能,所以在原来代码的基础中,修改DataIndexMapper.java中 public voiddeleteDateIndexByID(int Id);
相应地在它的xml文件中也加入
在Storage.java中增加 public void deleteRecordDataByID(intid);
相应地在FileStorage.java中实现这个方法
在实现这个方法时,删除指定版本,那么它以后的版本的offset就需要改变,所以我在RequestResponseBundle中加入一个计算对象大小的方法,这样的话就有利于改变之后版本的offset。
在计算对象大小时,因为它是继承了Serializable接口,所以可以根据一些机制来计算。详见public Long calcSize(java.io.Serializableo)
对于这个功能,在数据库中实现改变比较容易
难点在于修改data文件,因为data文件中记录的RequestResponseBundle集。所以我的方法是先把他们全readObject,放到一个List中,然后把data文件删除,再writeObject,这里的话只write非当前dataid的RequestResponseBundle
自己做了个单元测试(由于现在没有http协议,所以签名是自己弄的)
package com.baidu.terminator.test;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.baidu.terminator.manager.bo.Link;
import com.baidu.terminator.manager.common.Config;
import com.baidu.terminator.manager.common.SpringInit;
import com.baidu.terminator.manager.service.LinkControlService;
import com.baidu.terminator.manager.service.LinkService;
import com.baidu.terminator.plugin.signer.algorithm.MD5;
import com.baidu.terminator.storage.RequestResponseBundle;
import com.baidu.terminator.storage.Storage;
import com.baidu.terminator.storage.StorageFactory;
public class AppTest {
private static final Object String = null;
private Logger logger;
@Test
public void test() {
// List<Link> link=new ArrayList<Link>();
ApplicationContext ac=new ClassPathXmlApplicationContext("conf/applicationContext.xml");
SpringInit.setApplicationContext(ac);
LinkControlService linkControlService = (LinkControlService) ac
.getBean("linkControlService");
// linkControlService.stopServer(1);
LinkService linkService= (LinkService) ac.getBean("linkService");
//System.out.println(linkControlService.getLink(1));
Link link = linkService.getLinkById(2);
// System.out.println(link.getRequestSigner());
Storage st=StorageFactory.getStorage(link);
// for(int i=0;i<4;i++){
// linkControlService.startServer(2);
// String req = new String("req");
// String res = new String("res");
// RequestResponseBundle rr=new RequestResponseBundle(req, res);
// MD5 md5 = new MD5();
// st.putRecordData(md5.getMD5ofStr("123".toString()),rr);
// }
// st.deleteRecordDataByID(63);
// st.deleteRecordData();
RequestResponseBundle rs=new RequestResponseBundle();
rs=(RequestResponseBundle)(st.getbyID(61));System.out.println(rs);
rs=(RequestResponseBundle)(st.getbyID(62));System.out.println(rs);
rs=(RequestResponseBundle)(st.getbyID(64));System.out.println(rs);
//
}
}