Vue d'ensemble
Les principaux composants de SAINet sont présentés dans l’image ci-dessous:
Une série de tutoriels vidéo est disponible au bas de cette page. Pour les nouveaux, il est conseillé de :
- parcourir la présente page afin de se faire une idée d’ensemble de SAINet et de son fonctionnement, puis
- installer son espace de travail
- suivre les tutoriels)
Les différents composants peuvent être compilés et lancés sur le poste en local. Pour cela il sera nécessaire d’avoir au préalable :
- JDK
- Maven
- un accès à git
- Git Bash (Windows)
- IntelliJ, NetBeans ou un autre IDE qui supporte Java et Maven
- (pour la documentation) Node.js (>=14)
Ce guide présente de manière globale les différents composants de l’espace de travail ainsi que leur fonctionnement général. N’hésitez pas à cliquer sur les différents liens pour en savoir plus sur leur fonctionnement en détail.
L’environnement de développement SAINet est composé de 3 parties.
- La partie res_data qui contient les jeux de données pour le démarrage d’un serveur local, les tests et les demos.
- La partie sainet qui contient le code du serveur.
- La partie client riche.
Afin d’éviter d’avoir à installer un serveur de base de données sur la machine, SAINet utilise H2, qui est une base de données embarquées assez proche de MySQL/MariaDB.
Les différents éléments sont à récupérer dans son espace de travail local.
Pour faciliter l’installation, le lancement et le partage de scripts et d’alias, il est conseillé d’installer SAINet et ses différents composants conformément à ce qui est proposé dans ce document. Toutes les commandes et l’aide y feront référence. De plus, il est préférable d’installer SAINet et ses différents composants dans un répertoire situé à la racine du disque pour éviter les problèmes liés aux noms de chemin trop longs, surtout sous Windows.
Les projets du groupe res_data sont des jeux de données de référence qui permettent de lancer un serveur avec des données déjà préchargées. Elles sont aussi utilisées lors de l’exécution des tests d’intégration.
Il existe plusieurs bases de données de référence qui correspondent à chaque métier (régie, creche, …).
Exemple : récupération du jeu de données pour les créche
$~> cd /c/res_data
$/c/res_data> git clone ssh://git@git.admin.sai-erp.net:10022/res_data/cre.git
Le serveur SAINet est une application Java EE qui peut être lancée en mode Embedded Server.
Exemple : récupération du server SAINet
$~> cd /c/Work1
$/c/Work1> git clone ssh://git@git.admin.sai-erp.net:10022/dev/sainet.git
Une fois récupéré en local, il est nécessaire de compiler le server avec maven.
$/c/Work1> cd sainet
$/c/Work1/sainet> mvn clean install -T2 -DuniqueVersion=false -P no-check
Une fois la compilation terminée, plusieurs fichiers/dossiers auront été créés, tels que:
- l’EAR à déployer (server/SNV4SRV-ear/target/SNV4SRV.ear)
- les librairies pour le code à chaud (server/libapps/static et server/libapps/dynamic)
L’exécution du serveur se fait à l’aide d’un shell à la base du projet.
Exemple: Lancement d’une instance de serveur avec le jeu de données crèche (cre)
$/c/Work1/sainet> ./run-server.sh --runtime .sai_runtime --import "C:\res_data\cre" --mailhog --start
A la fin de l’exécution des informations concernant le serveur et un prompt d’administration est affiché permettant de directement agir le serveur.
Since the embedded jar is not compiled, maven will be used (set USE_EMBEDDED=true to force compilation).
Debug port: 9009 (set DEBUG_PORT=<port> to force the debug port)
Admin port: 9019 (set ADMIN_PORT=<port> to force the admin port)
The local SAINet sources will be used to speedup bootstrap. (set USE_LOCAL_SOURCES=false to disable)
Listening for transport dt_socket at address: 9009
...
The installation dir is C:\Work1\sainet\.sai_runtime\glassfish\gfembed9125176816292457004tmp
The SAINet runtime dir is C:\Work1\sainet\.sai_runtime
The SAINet log dir is C:\Work1\sainet\.sai_runtime\edms\log
Database: jdbc:h2:C:/Work1/sainet/.sai_runtime/database/data.db;MODE=MariaDB;IGNORECASE=TRUE;WRITE_DELAY=0;OPTIMIZE_REUSE_RESULTS=0 (2.3.232)
JDBC driver: H2 JDBC Driver (2.3.232 (2024-08-11))
Ports used: HTTP=9090 (forwarded to 19090), HTTPS=9191
Client API: http://localhost:8090/SNV4SRV-ws-war/EPS
JSON API: http://localhost:9090/api/v1
Host: 192.168.0.x
================================================================================
SAINet server is now running !
SAINet console is accessible through port 9019
SAINet bootstrap completed in xxxms.
--------------------------------------------------------------------------------
SAINet admin console is ready.
You can type 'help' to list available commands.
>>
Dans cet exemple, un serveur est lancé en utilisant les ports par défaut :
- SAINET_PORT_HTTP: 9090
- SAINET_PORT_HTTPS: 9191
- DEBUG_PORT: 9009
- ADMIN_PORT: 9019
Une fois le serveur SAINet lancé, la procédure d’installation du client riche permet de récupérer l’installeur via le lien
https://localhost:<SAINET_PORT_HTTPS>/SNV4SRV-ws-war/installer?format=zip
L’installeur n’est pas signé sur la version de développement locale. Il est nécessaire d’ajouter le paramètre format=zip dans l’url pour éviter que le fichier soit bloqué par l’antivirus.
Exemple de récupération de l’installeur du client riche pour un serveur lancé dans l’espace de travail avec les ports par défaut (9090/9191).
Une fois téléchargé, installez-le dans le répertoire de travail correspondant au serveur. Après l’installation, le client est automatiquement préconfiguré pour accéder au serveur via le fichier SAINETV4.ini
.
Une fois téléchargé et installé une première fois, le client riche se met à jour automatiquement au lancement. Il n’est pas nécessaire de le re-télécharger
Dans le répertoire SAINetV4Client se trouve un fichier SAINETV4.ini qui contient l’url pour se connecter au serveur ainsi que les différents paramètres du client
- Récupération/préparation des sources:
- récupération res_data.
- récupération sainet.
- compilation sainet.
- Lancement du serveur en mode embedded.
- Lancement du client.
Il est possible d’avoir plusieurs espaces de travail ainsi que des clients/serveurs sains lancés en parallèle sur la même machine (ex. : C:\Works1, C:\Works2, …). Concernant les res_data, il n’est pas nécessaire de les dupliquer, car ils peuvent être partagés entre les différents espaces de travail.
C:
|-- res_data
| |-- cre
| |-- reg
| `-- ...
|-- Work1
| |-- SAINetV4Client
| `-- sainet
|-- Work2
| |-- SAINetV4Client
| `-- sainet
|-- Work3
| |-- SAINetV4Client
| `-- sainet
Afin de faciliter le lancement des différents serveurs, il est recommandé de créer un fichier run-env.sh
à l’intérieur de chaque repertoire sainet où est téléchargé le serveur.
Par exemple
C:\Work1\sainet\run-env.sh | C:\Work2\sainet\run-env.sh | C:\Work3\sainet\run-env.sh |
---|---|---|
export DEBUG_PORT='7009' export ADMIN_PORT='7019' export SAINET_PORT_HTTP='7090' export SAINET_PORT_HTTPS='7191' |
export DEBUG_PORT='8009' export ADMIN_PORT='8019' export SAINET_PORT_HTTP='8090' export SAINET_PORT_HTTPS='8191' |
export DEBUG_PORT='9009' export ADMIN_PORT='9019' export SAINET_PORT_HTTP='9090' export SAINET_PORT_HTTPS='9191' |
Voici quelques exemples d’alias/scripts qu’il est possible de mettre en place (dans le .bashrc de git bash). Pour cela il faut éditer le fichier ~/.bashrc et y ajouter ces commandes :
## permet de définir le répertoire où se trouve les jeux de données <res_data>
export RES_DATA_HOME='C:/res_data'
## permet de se mettre dans un des espace de travail
alias ws1="cd /c/Work1/sainet"
alias ws2="cd /c/Work2/sainet"
alias ws3="cd /c/Work3/sainet"
## alias à utiliser dans le répertoire sainet
alias _buildSainet="mvn clean install -T2 -DuniqueVersion=false -P no-check" ## permet de builder le serveur sainet
alias _tailServerLog="tail -f ./.sai_runtime/edms/log/sailog-snv4srv-i0_0-default-NA.log" ## tail des logs du serveur
alias _tailServerLog200="tail -200 ./.sai_runtime/edms/log/sailog-snv4srv-i0_0-default-NA.log" ## affiche les 200 dernière lignes des logs
alias _admClient="java -jar tools/AdminClient.jar" ## lancement de la console d'administration
## chargement des variables d'environnements puis lancement avec le <res_data> passé en paramètre
_runServer () {
source run-env.sh;
rm -Rf .sai_runtime;
./run-server.sh --runtime .sai_runtime --import $RES_DATA_HOME/$1 --mailhog --start
}
Le lancement de la commande _runServer <res_data>
dans le répertoire sainet
d’un espace de travail permettra ainsi de lancer facilement différent serveurs SAInet (sur différents ports) avec le jeu de données passé en paramètre.
Exemple: Lancement du deuxième espace de travail avec le jeu de données régie
$/c/Work2/sainet>
_runServer reg
Permet de lancer le serveur sainet de l’espace de travail 2 sur les ports 8090/8191/8009/8019 avec le jeux de données reg.
Il est recommandé d’utiliser IntelliJ comme environnement de développement.
Chaque répertoire de travail peut être ouvert en parallèle dans différentes instances d’IntelliJ.
Pour lancer les tests JUnit dans IntelliJ, il est nécessaire d’ajouter en paramètre le répertoire runtime choisi. Le fait d’utiliser un répertoire dans le projet (ex: ./sainet/.sai_runtime
) permet de le définir une seule fois.
Pour plus d’informations : Lancer les tests à partir de l’IDE.
Il est possible que certaines informations présentes dans ces vidéos aient évolué. Référez-vous à la documentation pour avoir des informations à jour.
-
Gitlab - débuter - 6’53 : Bonnes pratiques, merge requests et pipelines
-
Structure SAINet - 1h25’02
Timeline :
00’00 : Structure du logiciel
08’15 : Présentation du logiciel et principe d’installation et de mise à jour.
14’35 : Correspondance affichage-données, avec :
- dès 23’08 : définition des données structure TablesAndDataFields_—.xml
- dès 28’19 : définition du visuel : TasksAndFields_—.xml
- dès 41’15 : les combos (enums)
- dès 44’00 : Les Dashboards
- dès 45’03 : Les Grilles (Grids) et les formateurs (47’21)
- dès 52’03 : LSV (Le Saviez-Vous), Notifications et PopupMenus (1h00’36)
1h06’45 : Messages et labels custom & messages d’erreur business
1h09’48 : intro sur la partie JAVA.
-
Outils : AdminClient et ConfigurationWatch - 13’23
00’18 : AdminClient
02’13 : ConfigurationWatch
-
Création d’une page - 32’03
00’00 : Page simple
19’29 : merge request pour la page créée
22’23 : Page avec couples et combos
-
PageHandler - 4’06 : classe java gérant les comportements au sein d’une page.
-
CallOnValidate - 5’35 : attribut de champ (xml) et comportement (
onFieldChange
) java. -
onGetPageData - 3’06 : à l’ouverture / chargement d’une page.
-
API de dossier - 6’18 : éviter les queries sql - gérer les données dossier par java
-
Utilitaires business (
---Utils_---.java
) - 2’56 : Fonctions business utilisées à plusieurs endroit du code. -
Code business - hot reload - 7’15
-
Créer des tests en local - 5’21
-
Les Grilles (Grids) - 13’55
-
Les Dashboards - partie 1 - 6’50
-
Les Dashboards - partie 2 - 5’23