jPalio Updater   - Opis

Updater jPalio

Założenia

Aplikacja Updater opiera się na elastycznym mechaniźmie budowania Gradle, dlatego też dzięki wykorzystaniu mechanizmu gradle wrapper, wystarczy aby w systemie była zainstalowana java. Aplikacja aktualizuje tylko pliki jar i zip znajdujące się w katalogu lib. Gdy aktualna wersja jPalio <=7.4.93 ze strony http://jpalio.torn.com.pl/lib odczytywane są wszystkie pliki jar i zip dostyczące akutalnej wersji, a następnie są one "usuwane". W kolejnym kroku z repozytorium zostają pobrane wszystkie pliki dotyczące wersji do której jPalio zostanie zaktualizowane. Gdy aktualna wersja jPalio > 7.4.93 na podstawie repozytorium zostaje ustalone jakie pliki należy "usunąć", a jakie dodać.

Od wersji 1.1.0 aplikacja aktualizuje również zależności zapisane w plikach instancji.

Uwaga

Od wersji 1.1.0 Polecenie update, aktualizuje nie tylko jPalio, ale również zależności. Powoduje to, że wszystkie biblioteki, które nie należą do jPalio lub nie są zapisywane w konfiguracji instancji zostaną usunięte(tak na prawdę kopiowane do katalogu oldLib). Dlatego przed wykonaniem polecenia update trzeba poinformować programistów odpowiedzialnych za projekty na danym serwerze, że muszą uaktualnić konfigurację instancji o biblioteki, które dodali wcześniej ręcznie, kopiując je do katalogu lib.

Opis działania

Aplikacj znajduje się w katalogu updater. Po wejściu do katalogu uruchamia się ją poleceniem gradlew nazwaZadania. Przykład:

gradlew update

Repozytorium

Aplikacja korzysta z rezpozytorium nexus znajdującego się pod adresem http://jdesigner.jpalio.com/nexus/. Nexus zawiera zarówno repozytoria publicznie dostępne jak i zabezpieczone hasłem. Aby mieć dostęp do repozytoriów chronionych hasłem należy w pliku grdle.properties(znajdującym się w katalogu domowym gradle, lub katalogu aplikacji updater) dopisać następujące właściwości: tornProtectedRepositoryUserName=xxx tornProtectedRepositoryPassword=xxx

Zapis zależności

Pliku xml konfiguracji instancji należy między znacznikami <dependencies></dependencies> dodać znaczniki <dependency></dependency>, które z koleji zawierają:

Przykład:

<dependencies>
    <dependency>
        <group>org.antlr</group>
        <module>antlr4</module>
        <version>4.5</version> 
        </dependency>
    <dependency>
        <group>org.apache.tomcat</group>
        <module>tomcat</module>
        <version>8.0.21</version>
        <transitive>true</transitive>
        <exclude>
            <group>aopalliance</group>
            <module>aopalliance</module>
        </exclude>
        <exclude>
            <group>commons-logging</group>
        </exclude>
        <exclude>
            <module>spring-beans</module>
        </exclude>
    </dependency>
</dependencies>

Konfiguracje

Aplikacja tworzy 5 własnych konfiguracji gradle:

Polecenie gradlew dependencies

Zadanie dependencies wyświetla wszystkie konfiguracje. Zadanie to jest standardowym zadaniem gradle. Więcej informacji: 11.6.4. Listing project dependencies Każda konfiguracja zawiera listę zależności ułożoną hierarchicznie. Przykładowy wynik dla konfiguracji instances:

instances
+--- jpalioInstance:cms:000
|    \--- org.jsoup:jsoup:1.8.2
\--- jpalioInstance:nzoz:000
     +--- org.apache.tomcat:tomcat:8.0.21
     \--- org.antlr:antlr4:4.5
          +--- org.antlr:antlr4-runtime:4.5
          |    \--- org.abego.treelayout:org.abego.treelayout.core:1.0.1
          +--- org.antlr:antlr-runtime:3.5.2
          \--- org.antlr:ST4:4.0.8
               \--- org.antlr:antlr-runtime:3.5.2

Konfiguracja instances zawiera zależności pochodzące od instancji jPalio. Pierwszy poziom zawiera zapisy typu:jpalioInstance:nazwa_instancji:000. Prefix jpalioInstance: oraz suffix :000 są sztucznie nadanymi nazwami grupy oraz wersją, zapewniającymi zgodność z interfejsem aplikacji.

Polecenie gradlew update

Znajduje najnowszą wersję jPalio w repozytorium oraz odczytuje zależności z plików instancji. Tak uzyskane inforamcje składają sie na konfigurację: instancesWithNewJpalio. Na podstawie konfiguracji instancesWithNewJpalio uaktualniane są pliki w folderze lib zawierającym biblioteki aplikacji.

Polecenie gradlew updateOnlyJpalio

Znajduje aktualną wersję jPalio oraz najnowszą wersję jPalio w repozytorium, umieszcza zależności odpowiednio w configuracjach: currentPalio oraz newPalio. Wyznaczane są różnice między konfiguracjami currentPalio oraz newPalio, a następnie stare biblioteki są "usuwane", a nowe są dodawane.

Polecenie gradlew updateDependencies

Znajduje aktualną wersję oraz odczytuje zależności z plików instancji. Tak uzyskane inforamcje składają sie na konfigurację: instancesWithCurrentPalio. Na podstawie konfiguracji instancesWithNewJpalio uaktualniane są pliki w folderze lib zawierającym biblioteki aplikacji.

Polecenie gradlew listForeignLibs(od wersji 1.1.5)

Wypisuje pliki znajdujące się w katalogu lib, które nie pochodzą z konfiguracji instancesWithCurrentPalio, czyli nie pochodzą ani od jPalio, ani nie są zapisane w plikach konfiguracji instancji.

Backup

Pliki "usuniętę" zostają przeniesione do katalogu oldLib, gdzie na podstawie daty zostaje utworzony nowy katalog oraz plik raportu.

Wymagania

Katalog updater musi znajdować się w katalogu WEB-INF aplikacji jPalio

Parametry konfiguracyjne

Domyślnie jpalio zostanie zaktualizaowane do wersji najnowszej, opcjonalnie można w pliku gradle.properties zmienić parametr new_version oznaczający numer wersji, można też polecenie gradlew wywołać z parametrem -Pnew_version=7.4.93

Zarządzanie zależnościami podczas rozwoju aplikacji - Grape

Grape - jest to narzędzie do zarządzania zależnościami wbudowane w groovy. Wydaje mi się, że świetnie to się nadaje do testów nowych bibliotek, bo nie wymaga restartu jPalio. Ciężko natomiast badać ewentualne konflikty i oraz dostać pełną listę bibliotek od których zależy instancja. Dlatego zaleca się, aby biblioteka po przetestowaniu z użyciem Grape została następnie dopisana do pliku konfiguracji instancji jPalio. Dzięki temu zyskamy większą wiedzę na temat konfiguracji instancji, która trafi na produkcję.