ApacheOFbizMiniLang源码解读



# MiniLang所有元素的父类——MiniLangElement

MiniLang 是基于XML的“描述型语言”。所有的元素,包括节点、属性都继承自该类。它包含三个属性:





lineNumber:表示解析MiniLang的源码(通常是Java)所处的行号,主要是为了便于日志记录 tagName:当前元素的tag名称,主要用于日志记录

* simpleMethod:simpleMethod是一个大的“传输对象”,里面实现了MiniLang支持的所有执行方式,其作用类似于serviceengine中的serviceDispatcher。
该类中没有太多的功能代码,除了outputTraceMessage。它用于记录跟踪日志消息,以上提及的两个属性(lineNumber/tagName)主要用在这里。

对应于服务引擎的实现——SimpleServiceEngine

在之前一篇关于ofbizservice engine的剖析中,我们谈到了里面也有minilang相关的一个执行引擎,其实就是此处的SimpleServiceEngine。它继承了GenericAsyncEngine(这里继承的语义并不是is-a的关系,主要是代码复用,因为GenericAsyncEngine实现了runAsync,而其他的子引擎都没必要实现这个接口方法)。
SimpleServiceEngine的继承关系图:

SimpleServiceEngine实现了父类中的两个抽象run方法:


但这两个方法都不包含主要的实现逻辑,真正的逻辑被定义在私有方法:serviceInvoker中,它最终是通过SimpleMethod的静态runSimpleService方法来执行的。

BeanScript的引擎实现——SimpleMethodBsfEngine

准确来说,它是对IBM的Beanscripting 库的适配器。用于在minilang中调用Beanscript。它实现了如下方法: