Extend the migration logic
擴展遷移邏輯
The migration logic is written in such a way, that it is easy to extend to suit your needs. The source code is available as a Maven 2 project in the srcsubfolder of the downloaded zip file. To build a new zip file, after having changed or extended the logic, simply execute a
遷移邏輯可以編寫,以便輕松地滿足你的需求。源代碼在所下載zip文件里src子文件夾里作一個Maven 2項目來使用。為了構建一個新的zip文件,在已經改變或者擴展邏輯之后,簡單執行下面指令
mvn clean install
to produce a new zip file in the target folder.
在target文件下產生一個新的zip文件。
Following picture gives a high-level overview of the classes in the migration logic.
下圖提供了在遷移邏輯里類的高層次概貌。
- Both the ProcessConversion and ProcessDataMigration classes have a main method that directly is called from the ant build script in the root of the migration zip.
- ProcessConversion and ProcessDataMigration 這兩個類都有在遷移zip的根目錄下的ant構建腳本里調用的main方法。
- These classes construct a ServiceFactory based on the two properties files, using a static factory method
- 通過使用靜態的工廠方法,基于兩個properties文件這些類構建一個ServiceFactory
ServiceFactory.configureFromProperties(jbpmDbProperties, activitiDbProperties);
- The services are constructed by the ServiceFactory (eg. getProcessConversionService()) and are used to execute the migration logic:
- 通過ServiceFactory (eg. getProcessConversionService())構建這些服務,這些服務被用來執行遷移邏輯:
1 public void execute() throws IOException {
2
3 // convert processes
4 ServiceFactory serviceFactory = createServiceFactory();
5 ProcessConversionService processConversionService = serviceFactory.getProcessConversionService();
6 Map<String, Document> migratedProcesses = processConversionService.convertAllProcessDefinitions();
7
8 // write results to bpmn20.xml files
9 writeConvertedProcesses(migratedProcesses, workingDir);
10
11 // Deploy processes to Activiti
12 ActivitiService activitiService = serviceFactory.getActivitiService();
13 activitiService.deployConvertedProcesses(migratedProcesses);
14
15 // data migration
16 
17 }
- The ProcessConversionService is an interface that contains process conversion and process definition data retrievel operations. It uses an implementation of Jbpm3Dao. The default implementation of this class uses a Hibernate SessionFactory to retrieve all the data from jBPM 3 tables.
The ActivitiService offers operation needed to get the migrated data in the Activiti tables. For example, deploying the converted process definitions is such an operation
ProcessConversionService 是一個包含流程轉換和數據檢索的流程定義借口。它使用了 Jbpm3Dao.的實現。這個類的缺省實現使用了Hibernate的SessionFactory從jBPM 3的數據庫表里檢索所有的數據。
ActivitiService 提供需要從Activiti數據庫表遷移數據的操作。例如,部署轉換之后的流程定義就是如此的操作。
- All these dependencies, ProcessConversionService, Jbpm3Dao, Sessionfactory, ActivitiService and ProcessEngine, are interfaces and can be implemented by your own implementation. You can inject them into the ServiceFactory using regular JavaBean setters. When no such custom implementation is set, the ServiceFactory will fall back to creating the default implementation:
- 所有這些依賴, ProcessConversionService, Jbpm3Dao, Sessionfactory, ActivitiService 和 ProcessEngine都是接口,并能由你自己實現。采用正常的JavaBean設置器,能將它們注入到ServiceFactory。當沒有設置這些實現,ServiceFactory將后退一步,建立缺省的實現:
1 public ProcessConversionService getProcessConversionService() {
2 if (processConversionService == null) {
3 this.processConversionService = createDefaultProcessConversionService();
4 }
5 return processConversionService;
6 }
7
8 protected ProcessConversionService createDefaultProcessConversionService() {
9 ProcessConversionServiceImpl service = new ProcessConversionServiceImpl(getJbpm3Dao());
10 return service;
11 }