EximeeBPMS to fork Camunda 7, który jest w pełni kompatybilny z Camunda 7.23.0 i umożliwia bezpieczną migrację projektów z zachowaniem ich logiki i struktury.
Migracja z Camunda do EximeeBPMS to prosty i dobrze udokumentowany proces, który bez problemu przeprowadzisz samodzielnie. W tym artykule pokażemy, jak krok po kroku przeprowadzić migrację z Camunda 7.23.0 do EximeeBPMS 1.0.0, korzystając z przygotowanego narzędzia oraz oficjalnego pluginu rewrite-maven-plugin. Wszystko to na konkretnym przykładzie oraz z pełną dokumentacją i komentarzem od zespołu Consdata – twórców EximeeBPMS.
Przed wykonaniem poniższych instrukcji należy koniecznie upewnić się, że używana wersja Camundy została zaktualizowana do 7.23.0. Wykonanie kroków na starszej wersji może prowadzić do nieprawidłowego działania systemu.
Zanim wykonasz migrację na swoim docelowym projekcie, warto zapoznać się z procesem na przykładowym repozytorium przygotowanym przez zespół EximeeBPMS. To okazja, aby w bezpiecznych warunkach zrozumieć, jak działa automatyczna transformacja kodu, zanim wprowadzisz ją w swoim środowisku produkcyjnym.
Pierwszy krok to zapoznanie się z narzędziem, które odpowiada za cały proces transformacji – mowa o OpenRewrite.
OpenRewrite to framework do automatycznej refaktoryzacji kodu, który pozwala zmieniać struktury w repozytoriach Maven bez konieczności ręcznej modyfikacji wielu plików.
Cały mechanizm działa na bazie tzw. recept (recipes) – czyli gotowych skryptów modyfikujących kod źródłowy i pliki konfiguracyjne.
Dzięki temu migracja z Camundy do EximeeBPMS może zostać przeprowadzona za pomocą jednego polecenia. Zanim jednak zaczniemy działanie na projekcie docelowym, przyjrzyjmy się migracji przykładowego projektu.
Na początek sklonuj oficjalne repozytorium migracyjne:
bash
------------------------------------------------------------------
git clone git@github.com:EximeeBPMS/eximeebpms-migration.git
Wewnątrz znajdziesz wszystko, co potrzebne do wykonania pierwszej migracji.
Przyjrzyjmy się najpierw, jak wygląda stan początkowy. Oto fragment oryginalnego pom.xml w przykładowym projekcie:
pom.xml
------------------------------------------------------------------
<properties>
<camunda.version>7.23.0</camunda.version>
</properties>
<!-- ... -->
<dependencies>
<dependency>
<groupId>org.camunda.bpm</groupId>
<artifactId>camunda-engine</artifactId>
</dependency>
<dependency>
<groupId>org.camunda.bpm</groupId>
<artifactId>camunda-engine-spring</artifactId>
</dependency>
<!-- ... -->
</dependencies>
Ten plik zawiera klasyczne zależności do Camundy, które zostaną automatycznie przekształcone w odpowiedniki EximeeBPMS.
CalculateInterestService.java
------------------------------------------------------------------
package org.example.bpm.getstarted.loanapproval;
import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.camunda.bpm.engine.delegate.JavaDelegate;
public class CalculateInterestService implements JavaDelegate {
public void execute(DelegateExecution delegate) {
System.out.println("Spring Bean invoked");
}
}
replace-camunda-with-eximeebpms.yml
------------------------------------------------------------------
type: specs.openrewrite.org/v1beta/recipe
name: org.eximeebpms.ReplaceCamundaWithEximeeBPMS
displayName: Replace "Camunda" with "EximeeBPMS" in package names and imports
recipeList:
- org.openrewrite.maven.RenamePropertyKey:
oldKey: camunda.version
newKey: eximeebpms.version
- org.openrewrite.maven.ChangePropertyValue:
key: eximeebpms.version
newValue: 1.0.0
- org.openrewrite.maven.RenamePropertyKey:
oldKey: version.camunda
newKey: version.eximeebpms
- org.openrewrite.maven.ChangePropertyValue:
key: version.eximeebpms
newValue: 1.0.0
...
- org.openrewrite.java.ChangePackage:
oldPackageName: "org.camunda"
newPackageName: "org.eximeebpms"
recursive: true
- org.openrewrite.java.ChangeType:
oldFullyQualifiedTypeName: "org.camunda"
newFullyQualifiedTypeName: "org.eximeebpms"
recursive: true
Powyższy plik konfiguracyjny zmienia nazwy pakietów oraz wersje wykorzystywane w projekcie z tych, które dotyczą Camundy na te, które związane są z EximeeBPMS. Plik ten wykorzystywany jest przez rewrite-maven-plugin.
Po zapoznaniu się z zasadami działania pluginu oraz jego konfiguracją, a także strukturą przykładowego projektu, można uruchomić skrypt migracyjny poleceniem:
bash
------------------------------------------------------------------
mvn rewrite:run
W efekcie powinny zmienić się zależności w pom.xml, a także pakiety wykorzystywane w projekcie, np.:
pom.xml
------------------------------------------------------------------
<properties>
<eximeebpms.version>1.0.0</eximeebpms.version>
</properties>
<!-- ... -->
<dependencies>
<dependency>
<groupId>org.eximeebpms.bpm</groupId>
<artifactId>eximeebpms-engine</artifactId>
</dependency>
<dependency>
<groupId>org.eximeebpms.bpm</groupId>
<artifactId>eximeebpms-engine-spring</artifactId>
</dependency>
<!-- ... -->
</dependencies>
camunda.version
zmieniło się na eximeebpms.version
, a wszystkie artefakty org.camunda.bpm
zostały zastąpione przez org.eximeebpms.bpm
.
Uwaga
Jeśli zadeklarujesz inną nazwę wersji w sekcji <properties></properties>
, to musisz to uwzględnić w pliku z recipe (yaml).
Przykładowo, jeżeli w tagach:
<camunda.version>7.23.0</camunda.version>
albo
<version.camunda>7.23.0</version.camunda>
zadeklarujesz wersję Camundy, to musisz uwzględnić to we wcześniej wspomnianym pliku.
CalculateInterestService.java
------------------------------------------------------------------
package org.example.bpm.getstarted.loanapproval;
import org.eximeebpms.bpm.engine.delegate.DelegateExecution;
import org.eximeebpms.bpm.engine.delegate.JavaDelegate;
public class CalculateInterestService implements JavaDelegate {
public void execute(DelegateExecution delegate) {
System.out.println("Spring Bean invoked");
}
}
Dzięki wykonaniu migracji na testowym projekcie będziesz mieć pewność, że proces migracji przebiega poprawnie. W kolejnym kroku pokażemy, jak przeprowadzić analogiczne działania na swoim docelowym projekcie.
Po przetestowaniu migracji na przykładowym projekcie nadszedł moment, by przejść do migracji Twojego właściwego projektu. Dobra wiadomość jest taka, że proces będzie dokładnie taki sam, jak w wersji testowej. Jedyną różnicą jest to, że teraz migracja dotyczy danych, kodu i zależności, które są używane na co dzień w Twoim systemie.
Poniżej znajdziesz dokładne instrukcje, które krok po kroku poprowadzą Cię przez cały proces.
Aby przeprowadzić migrację, niezbędne będzie:
rewrite-maven-plugin
------------------------------------------------------------------
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.2</version>
</plugin>
<plugin>
<groupId>org.openrewrite.maven</groupId>
<artifactId>rewrite-maven-plugin</artifactId>
<version>6.3.2</version>
<configuration>
<configLocation>
${maven.multiModuleProjectDirectory}/replace-camunda-with-eximeebpms.yml
</configLocation>
<activeRecipes>
<recipe>org.eximeebpms.ReplaceCamundaWithEximeeBPMS</recipe>
</activeRecipes>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
bash
-----------------------------------------------------------------
mvn rewrite:run
bash
------------------------------------------------------------------
mvn clean install
Przeprowadzenie działań migracyjnych zgodnie z przedstawioną przez nas instrukcją zapewni bezpieczne i skuteczne przeniesienie projektu docelowego na nową platformę.
Odstępstwa od tych wytycznych mogą sprawić, że w Twoim projekcie pojawią się błędy i problemy z zachowaniem pełnej kompatybilności, dlatego w procesie migracji należy podążać za instrukcją.
Choć migracja do nowego narzędzia może wydawać się dużą zmianą, to z dobrze przygotowanym środowiskiem i jasną instrukcją będzie to po prostu kolejny etap rozwoju Twojego systemu.
Potrzebujesz dodatkowej pomocy podczas migracji lub chcesz zautomatyzować ten proces dla wielu projektów jednocześnie? Skontaktuj się z nami – jako twórcy EximeeBPMS chętnie pomożemy Ci przejść przez ten etap sprawnie i bezpiecznie.
Powered by Consdata