苍穹debug流程原创
金蝶云社区-几道求索
几道求索
28人赞赏了该文章 2,752次浏览 未经作者许可,禁止转载编辑于2021年04月09日 09:28:12

无论是脚本还是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文件,启动的时候会加载,并解析保存在内存中。

image1.png


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

image.png

然后调用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()方法:

image (1).png


调用localInvokeOperation


image (2).png





OperationServiceImpl类中获取operate 对象 

EntityOperateService operate = this.initializeOperate(operationKey, mainEntityType, dataEntities, option);


image (3).png

然后EntityOperateService调用doExcete()方法


image (4).png


bos-mservice-operation-1.0.jar 中的save类继承了Draft

Draft extends StatusConvertOperateService

StatusConvertOperateService extends EntityOperateService


私有方法执行doExcete()方法,包含一些列的模版方法模式。

image (5).png


image (6).png

image (7).png

image (8).png



执行excuteOperate方法,然后调用Draft的executeOperate方法。


image (9).png


使用SaveServiceHelper.save(objs, this.getOption());


image (10).png


image (11).png




最后通过savePrvate()方法进行转换SaveDataSet保存。

bos-ormengine-1.0.jar DataManagerImplement类中。

image (12).png



到此,调用orm框架保存信息。


赞 28