1. 程式人生 > >flowable DmnEngine和DmnEngineConfiguration

flowable DmnEngine和DmnEngineConfiguration

一、DmnEngineConfiguration建立例項

DmnEngineConfiguration 提供了7個公共的靜態方法,用於建立自身例項。

其中5個是使用spring的機制載入配置檔案。
另外2個是Standalone形式的,程式碼如下:

    public static DmnEngineConfiguration createStandaloneDmnEngineConfiguration() {
        return new StandaloneDmnEngineConfiguration();
    }

    public static
DmnEngineConfiguration createStandaloneInMemDmnEngineConfiguration() { return new StandaloneInMemDmnEngineConfiguration(); }

根據前面的分析,StandaloneDmnEngineConfiguration沒有新增任何的程式碼,完全等同與父類;

而StandaloneInMemDmnEngineConfiguration只是修改了父類的jdbc url的引數,設定為h2資料庫的配置。

二、DmnEngine構建

DmnEngineConfiguration例項建立後,呼叫buildDmnEngine(),獲得DmnEngine的例項。

    public DmnEngine buildDmnEngine() {
        init();
        return new DmnEngineImpl(this);
    }

三、服務初始化

在init()方法裡面做了很多初始化的工作。這裡只說和DmnEngine相關的。

protected void init() {
...
initServices();
...
}

 protected void initServices() {
        initService(dmnManagementService);
        initService(dmnRepositoryService);
        initService(ruleService);
        initService(dmnHistoryService);
    }

    protected void initService(Object service) {
        if
(service instanceof ServiceImpl) { ((ServiceImpl) service).setCommandExecutor(commandExecutor); } }

上面程式碼將DmnEngineConfiguration的 commandExecutor屬性賦值給這四個服務。實際上,commandExecutor是DmnEngineConfiguration父類 AbstractEngineConfiguration的屬性。

這四個服務的程式碼如下:

protected DmnManagementService dmnManagementService = new DmnManagementServiceImpl();
    protected DmnRepositoryService dmnRepositoryService = new DmnRepositoryServiceImpl();
    protected DmnRuleService ruleService = new DmnRuleServiceImpl();
    protected DmnHistoryService dmnHistoryService = new DmnHistoryServiceImpl();

這四個服務有相同的父類: ServiceImpl

ServiceImpl包含一個CommandExecutor屬性。這四個服務的方法都是通過CommandExecutor實現代理模式來完成的。

這裡寫圖片描述