一 一个通讯协议的实现。
主要用到了命令报文的传说和解析。Object和xml的互转,用到了digest和betwixt的jar包。
主要类图
这里参考了commons-beanutils 的ConvertUtils中部分的代码 根据类名作为key注册转换器。避免大量的if else判断
package com.cloud.util;
import java.util.Map;
import java.util.Set;
import com.cloud.util.command.OMALiteCommand;
import com.cloud.util.convert.AddConvert;
import com.cloud.util.convert.AlertConvert;
import com.cloud.util.convert.DeleteConvert;
import com.cloud.util.convert.ExecConvert;
import com.cloud.util.convert.FinalConvert;
import com.cloud.util.convert.GetConvert;
import com.cloud.util.convert.OMALiteCommandConvert;
import com.cloud.util.convert.ReplaceConvert;
import com.cloud.util.convert.ResultConvert;
import com.cloud.util.convert.StatusConvert;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Maps;
/**
*
* <p>Title: </p>
* <p>Description: </p>
* @author zhoulei create 2011-12-23
* @version 1.0
*
*
*/
@Deprecated
public class OMALiteUtilBean {
private Set<String> commandNameSet =new ImmutableSet.Builder<String>().add("add","alert","delete","exec","get","replace","result","status","final").build();
private Map<String, OMALiteCommandConvert> converters = Maps.newHashMap();
private Map<String, String> schemas = Maps.newHashMap();
private static OMALiteUtilBean bean = new OMALiteUtilBean();
public static OMALiteUtilBean getInstance() {
return bean;
}
private OMALiteUtilBean() {
registSchemas();
registConverters();
}
private void registSchemas() {
// schemas.put(Add.class.getSimpleName().toLowerCase(), new AddConvert());
// schemas.put(Alert.class.getSimpleName().toLowerCase(), new AlertConvert());
// schemas.put(Delete.class.getSimpleName().toLowerCase(), new DeleteConvert());
// schemas.put(Exec.class.getSimpleName().toLowerCase(), new ExecConvert());
// schemas.put(Get.class.getSimpleName().toLowerCase(), new GetConvert());
// schemas.put(Replace.class.getSimpleName().toLowerCase(), new ReplaceConvert());
// schemas.put(Result.class.getSimpleName().toLowerCase(), new ResultConvert());
// schemas.put(Status.class.getSimpleName().toLowerCase(), new StatusConvert());
// schemas.put(Final.class.getSimpleName().toLowerCase(), new FinalConvert());
}
private void registConverters() {
converters.put("add", new AddConvert());
converters.put("alert", new AlertConvert());
converters.put("delete", new DeleteConvert());
converters.put("exec", new ExecConvert());
converters.put("get", new GetConvert());
converters.put("replace", new ReplaceConvert());
converters.put("result", new ResultConvert());
converters.put("status", new StatusConvert());
converters.put("final", new FinalConvert());
}
public void registerConverter(String commandName, OMALiteCommandConvert converter) {
converters.put(commandName, converter);
}
public OMALiteCommandConvert lookupConverter(String commandName) {
return ((OMALiteCommandConvert) converters.get(commandName.toLowerCase()));
}
public OMALiteCommandConvert lookup(OMALiteCommand ocommand) {
return lookupConverter(ocommand.getClass().getSimpleName());
}
}
三 JMS
java消息服务。可用于不同服务器之间的消息传递。
JMS 服务器http://activemq.apache.org/
四 异常处理。
异常处理是一个一直很重视但是并没有怎么处理好且没仔细体会的话题了。
如果我们用struts2我们知道可以在将所有异常抛给它,然后在配置文件中配置异常对于的视图。另外spring也有相关的机制。
这一次的编码没有用任何框架,用的servlet编写控制,并分了dao和service层。这里浅谈一下自己在编码中异常处理的一些心得。