实现通用的CRUD之二—用jsonRPC打通B/S的任督二脉
?
static public Object handle(char method,HashMap<String, Object> rm,String sn,HttpServletRequest request) throws Exception {// TODO Auto-generated method stubif(sn==null || sn.trim().equals(""))sn = DEFAULTHANDLER;//session检查 为空且非登录请求/*if(method!=METHOD_LOGIN){throw new ServletException(Info.ERR_INVALID_SESSION);}*///如果存在before回调String cn = "";String[] cns= (String[])rm.get("cns");if(cns!=null){cn = cns[0];}//根据HHUtil中对sn+method的事务要求,采用编程决定是否启动事务管理Integer transanctionMode = hhutil.getTransactionMode(sn,method);PlatformTransactionManager transactionManager=null;TransactionStatus transactionStatus=null;if(transanctionMode!=null){transactionManager=(PlatformTransactionManager)Cfg.getBean("transactionManager"); TransactionDefinition transactionDefinition=new DefaultTransactionDefinition(transanctionMode);transactionStatus=transactionManager.getTransaction(transactionDefinition);}try{IHandleHook hcb = hhutil.getHandleHook(sn, method, cn);if(hcb!=null)hcb.beforeHandle(method,rm,request);Object result= getHandleImpl(sn).handle(method,rm,request);//如果存在after回调if(hcb!=null)hcb.afterHandle(method, rm, request, result);if(transactionManager!=null)transactionManager.commit(transactionStatus);return result;}catch(Exception e){e.printStackTrace();if(transactionManager!=null)transactionManager.rollback(transactionStatus);throw e;}}?
该方法处理调用的前后的切面,允许在默认处理前后便携特殊处理。另外,允许将多个调用封装为一个事务。
进一步编写数据库CRUD操作的服务作为一个handle实例。
?
?附件说明如下:
BObj.java——对象的部分属性形态
Handler.java——jsonRPC调用的总入口,负责调用前后特殊逻辑调度和事务处理
?
HDDefault.java——负责数据库通用操作的服务
?
HDUtil——数据库操作辅助工具类
?
<!--EndFragment-->