无论是脚本还是dev_debug.bat还是debug工程执行main方法都会调用
BootServer server = getBootServer(); if (args == null) {args = new String[0];} server.start(args);
以jetty为例都会加载指定的webcontent
如:C:\\biz-evn-dev\\mservice\\webapp
指定加载bos-resources-1.0.jar中的xml文件,启动的时候会加载,并解析保存在内存中。
String source = getProperty("JETTY_WEBXML_PATH", EmbedJettyServer.class.getClassLoader(). getResource(WebResourceUtils.getWebReousrceXmlPath()).getPath()); context.setDescriptor("jar:" + source);
Web.xml中设置了过滤器,根据请求的url适配处理器。
bos-dispatcher-1.0.jar中的ActionFilter类转发。
根据url的参数,映射到不同的类处理。如FormAction类的batchInvokeAction方法。
invoker = ActionConfig.lookupActionInvoker(package1, action);
ActionConfig.Package p = (ActionConfig.Package)packageMap.get(_package);
通过反射调用相应的方法
以点击保存为例,进行分析:
bos-webactions-1.0.jar 中FormAction类的batchInvokeAction方法
service = (DispatchService)ServiceLookup.lookup(DispatchService.class, serviceAppId);
T obj = this.doLookupImpl(clazz, appId);
通过lookup方法获取kd.bos.service.DispatchServiceImpl类
执行impl的invoke方法
通过serviceName获取serviceObject,即FormServiceImpl类,如:
Object serviceObject = this.serviceObjectMap.get(serviceName);
Invoke方法调用bos-mservice-form-1.0.jar中FormServiceImpl的实现类batchInvokeAction方法,
通过commons-beanutils-1.9.4.jar中 MethodUtils中的invokeMethod方法
通过bos-form-core-1.0.jar 中Toolbar执行itemClick
包含调用操作代码
this.getView().invokeOperation(operationKey);
通过bos-form-mvc-1.0.jar 中FormView调用invokeOperation
然后调用BillView中的invokeOperation
然后调用FormView中的
OperationResult invokeOperation(String operationKey, OperateOption option) 方法:
执行excute()方法
然后调用bos-form-core-1.0.jar 中的FormOperate类中的excute()方法
调用bos-entity-business-1.0.jar中的Save类,该类继承了DefaultEntityOperate,
DefaultEntityOperate继承了EntityOperate
EntityOperate继承了FormOperate
最后调用callBIllOperationService()方法:
调用localInvokeOperation
OperationServiceImpl类中获取operate 对象
EntityOperateService operate = this.initializeOperate(operationKey, mainEntityType, dataEntities, option);
然后EntityOperateService调用doExcete()方法
bos-mservice-operation-1.0.jar 中的save类继承了Draft
Draft extends StatusConvertOperateService
StatusConvertOperateService extends EntityOperateService
私有方法执行doExcete()方法,包含一些列的模版方法模式。
执行excuteOperate方法,然后调用Draft的executeOperate方法。
使用SaveServiceHelper.save(objs, this.getOption());
最后通过savePrvate()方法进行转换SaveDataSet保存。
bos-ormengine-1.0.jar DataManagerImplement类中。
到此,调用orm框架保存信息。
推荐阅读