Configuration SAINet

Les configurations spécifiques du serveur SAINet se trouvent dans le fichier <runtime>/server.properties. Certaines d’entre elles peuvent également être directement définies en tant que variable d’environnement (généralement pour une installation Docker). Certaines peuvent ensuite être écrasées par une variable SYS22 dans SAINet (voir les variables applicatives en fin de page).

Les différentes définitions sont lues dans l’ordre ci-dessous. Lorsque l’une d’elle est définie, les définitions suivantes sont ignorées. Il est possible de voir la valeur d’une variable ainsi que sa source dans la tâche SYSSV.

  1. Variable SYS22.
  2. Variable d’environnement.
  3. Propriété système (server.properties).
  4. Valeur par défaut.

Configuration globale

Ces propriétés sont globales au serveur.

Propriété Environnement Type Description
server.customerFile SAINET_CUSTOMER_FILE string Configuration des modules du serveur. Doit contenir le nom d’un fichier (avec extension) existant dans modules/customers.
server.webapp.enabled SAINET_WEBAPP_ENABLED boolean Détermine si l’interface web doit être déployée (nécessite une compilation pour le développement). Cela n’a pas d’impact sur l’API JSON.
server.port.http SAINET_PORT_HTTP int Port HTTP (utiliser une valeur négative pour un lookup dynamique). Par défaut 9090.
server.port.https SAINET_PORT_HTTPS int Port HTTPS (utiliser une valeur négative pour un lookup dynamique). Par défaut 9191 (en mode développement), 0 (désactivé en production).
server.port.admin int Port d’administration (utiliser une valeur négative pour un lookup dynamique).
server.port.jmx int Interne, ne pas utiliser.
server.port.jms int Interne, ne pas utiliser.
server.port.iiop_orb int Interne, ne pas utiliser.
server.port.iiop_ssl int Interne, ne pas utiliser.
server.port.iiop_sslma int Interne, ne pas utiliser.
SAINET_MOCK_SERVER_ENABLED boolean Détermine si le mock-serveur doit être activé ou non (true par défaut). Permet notamment d’avoir une réponse lorsque le serveur SAINet en cours de (re)démarrage. Par défaut, true.
SAINET_MOCK_SERVER_ALLOW_IDLE_CONNECTIONS boolean Le mock-serveur garde la connexion ouverte tant que celle-ci n’est pas fermée par le client (typiquement par traefik). Par défaut, true.
SAINET_VERBOSE boolean Active le mode verbeux des logs. Peut être surtout utile en cas de problème lors du démarrage du service SAINet. Par défaut true dans Docker, false en mode service.

Lorsque la valeur d’un port est négative, cela indique au serveur SAINet de faire une recherche dynamique d’un port ouvert. Par exemple, si la valeur est -9301, le serveur va essayer d’utiliser le port 9301. Si celui-ci n’est pas disponible, il va essayer le 9302 et ainsi de suite jusqu’à 9601 (limite à 300). La valeur d’un port ne peut pas être mise à zéro.

Note:

L’utilisation d’un port en-dessous de 1024 requiert généralement les accès root/administrateur. Il est donc déconseillé de les utiliser.

Par défaut, le système va utiliser les port 9090 (HTTP) et 9191 (HTTPS) afin de ne pas entrer en conflit avec d’éventuelles autres applications qui sont généralement configurées par défaut sur les ports 8080 et 8181.

Identification du serveur

Ces propriétés sont globales au serveur et servent principalement à l’identifier.

Propriété Environnement Type Description
server.sainet.instance.type SAINET_INSTANCE_TYPE string Type de l’instance (MASTER_SINGLE, MASTER ou SLAVE). Par défaut, MASTER_SINGLE.
server.sainet.instance.name SAINET_INSTANCE_NAME string Nom de l’instance (affiché dans le header SAINet). Par défaut, NA.
server.sainet.domain.name SAINET_DOMAIN_NAME string Nom du domaine. Cette valeur peut être utilisée pour facilier l’identification de serveur. Il est toutefois recommandé de la laisser vide.
server.sainet.domain.env SAINET_ENV_NAME string Environnement du serveur. Cette valeur doit correspondre à l’identifiant d’un des tags <environment> du fichier customer.
SAINET_EXTERNAL_URL string URL complète d’accès externe à SAINet (par exemple https://sainet.mydomain.com/SNV4SRV-ws-war/EPS). Cette variable n’est pas nécessaire si l’environnement pointe déjà sur la bonne URL.

Sur un serveur de production, généralement seule la variable server.sainet.domain.env nécessite d’être définie afin que le serveur puisse connaître l’URL par laquelle il est accédé (nécessaire pour le mobile).

Si plusieurs instances sont disponibles, il est nécessaire de définir les variables server.sainet.instance.name (pour identifier l’instance) et server.sainet.instance.type. Seule une instance peut avoir le type MASTER et toutes les autres doivent avoir le type SLAVE. Dans le cas où il n’y a qu’une seule instance, le type MASTER_SINGLE doit être utilisé.

Attention:

Toutes les instances doivent accéder à la même base de données ainsi qu’à la même GED.

Fonctionnement des mises à jour

Seule l’instance ayant le type MASTER (ou MASTER_SINGLE) va effectuer les modifications en base de données et autres migrations globales. C’est également elle qui doit être mise à jour, les instances de type SLAVE se pilotant automatiquement sur la version du MASTER. Par défaut, l’instance MASTER va vérifier tous les jours à 3h du matin si une nouvelle mise à jour est disponible et l’applique automatiquement lorsque la variable sainet.update.restart est à true. L’heure de la vérification peut être personnalisée avec la propriété schedule.system.automatic_update_master.

Une fois que l’instance MASTER a été mise à jour (manuellement ou automatiquement), les instances SLAVE se mettent automatiquement à jour 15 minutes après, de manière échelonnée (si une instance SLAVE est en cours de mise à jour, les autres attendent et réessaient 15 minutes plus tard). Ce laps de temps de vérification peut être personnalisé dans la propriété schedule.system.automatic_update_slave.

Note:

Lorsque le type d’instance est MASTER, le package du serveur lui-même est copié dans la GED afin que les instances SLAVE puisse le récupérer et se mettre à jour. Si le type MASTER_SINGLE est utilisé, ce package n’est pas copié et aucun SLAVE ne peut se mettre à jour, d’où l’importance de spécifier le type d’instance correct.

Accès au serveur

Ces propriétés sont utilisées par les descripteurs internes à SAINet et ont un impact sur les différentes URLs et resources JNDI.

Propriété Environnement Type Description
sainet.context_root SAINET_CONTEXT_ROOT string Racine de l’application (par défaut SNV4SRV-ws-war).
sainet.context_root_mobile SAINET_MOBILE_CONTEXT_ROOT string Racine de l’application mobile (par défaut SNV4SRV-mobile-war).
sainet.jdbc_resource_ref_name string Nom JNDI pour la resource JDBC (par défaut jdbc/sainet) afin de se connecter à la base de données.
sainet.mail_resource_ref_name string Nom JNDI pour la resource MAIL (par défaut mail/sainet) afin que l’application puisse envoyer des mails.

A moins d’avoir des besoins spécifiques (généralement un environnement avec d’autres applications), il est recommandé de ne pas modifier ces variables.

Accès à la base de données

Ces propriétés définissent où sont stockées les données de SAINet.

Info:

Depuis la version 4.11, il est recommandé d’utiliser les variables d’environnement génériques afin de configurer l’accès la base de données.

Lorsque l’URL complète est spécifiée, les variables d’environnement suivantes sont disponibles:

Variable Type Description
SAINET_DATABASE_URL string URL complète vers la base de données. Doit commencer par jdbc:h2:, jdbc:mariadb:// ou jdbc:mysql://.
SAINET_DATABASE_USER string Nom d’utilisateur.
SAINET_DATABASE_PASSWORD string Mot de passe.

Il est possible de spécifier uniquement certaines parties des données:

Variable Type Description
SAINET_DATABASE_TYPE h2,mariadb Type de base de données. Dans ce mode, H2 n’est pas supporté. Si cette valeur n’est pas spécifiée, mariadb est utilisé comme valeur par défaut.
SAINET_DATABASE_HOST string Adresse de l’hôte.
SAINET_DATABASE_PORT int Numéro du port. Par défaut 3306 pour mariadb et mysql.
SAINET_DATABASE_SCHEMA string Nom du schema.
SAINET_DATABASE_USER string Nom d’utilisateur.
SAINET_DATABASE_PASSWORD string Mot de passe.
Info:

Depuis la version 4.11, il est recommandé d’utiliser partout les variables ‘MARIADB’ au lieu de ‘MYSQL’, toutefois ces dernières restent disponibles afin de faciliter la transition.

Propriété Environnement Type Description
database.type h2,mariadb Type de base de données.
database.h2.path SAINET_DATABASE_H2_URL string Si h2, chemin d’accès au fichier des données (relatif au dossier <runtime>).
database.mariadb.host SAINET_DATABASE_MARIADB_HOST string Si mariadb, nom de l’hôte (par défaut localhost).
database.mariadb.port SAINET_DATABASE_MARIADB_PORT int Si mariadb, numéro du port (par défaut 3306).
database.mariadb.schema SAINET_DATABASE_MARIADB_SCHEMA string Si mariadb, nom du schema.
database.mariadb.user SAINET_DATABASE_MARIADB_USER string Si mariadb, nom d’utilisateur.
database.mariadb.password SAINET_DATABASE_MARIADB_PASSWORD string Si mariadb, mot de passe utilisateur.
database.parameter.<name> SAINET_DATABASE_<type>_PARAMS, SAINET_DATABASE_<type>_PARAMS_FILE string Paramètre <name> supplémentaire pour la base de données.

Généralement la base de données h2 est utilisée pour les tests. Pour une base de données en production, il est recommandé d’utiliser MariaDB (configurable avec mariadb).

Il est possible d’utiliser les variables d’environnement SAINET_DATABASE_H2_PARAMS et SAINET_DATABASE_MARIADB_PARAMS afin de spécifier des paramètres supplémentaires. La valeur de ces variables doit être donnée sous la forme key1=value1;key2=value2;.... Il est également possible d’utiliser les variables SAINET_DATABASE_H2_PARAMS_FILE et SAINET_DATABASE_MARIADB_PARAMS_FILE pour spécifier un fichier .properties avec les propriétés supplémentaires.

Note:

Si une des variables *_PARAMS est spécifiée, la variable correspondante *_PARAMS_FILE sera ignorée.

Configuration EDMS

Ces propriétés définissent les différents emplacements qui touchent au système de fichier. Par défaut, aucune de ces propriétés n’est obligatoire et les sous-dossiers nécessaires sont créés automatiquement dans <runtime>/edms.

Propriété Environnement Type Description
sainet.fs.root.ged SAINET_EDMS_GED string Chemin absolu de l’emplacement de la GED. Par défaut dans <runtime>/edms/ged.
sainet.fs.root.log SAINET_EDMS_LOG string Chemin absolu de l’emplacement des fichiers de logs. Par défaut dans <runtime>/edms/log.
sainet.fs.root.tmp SAINET_EDMS_TMP string Chemin absolu de l’emplacement des fichiers temporaires. Par défaut dans <runtime>/edms/tmp.
sainet.fs.root.bck SAINET_EDMS_BCK string Chemin absolu de l’emplacement des fichiers de backups internes de la GED. Par défaut dans <runtime>/edms/bck.
sainet.fs.root.conf SAINET_EDMS_CNF string Chemin absolu de l’emplacement des fichiers de configuration. Par défaut dans <runtime>/edms/conf.

En cas d’architecture multi-instances, l’emplacement de la GED doit être commun à toutes les instances. Il est donc nécessaire de définir sainet.fs.root.ged ou SAINET_EDMS_GED.

De manière générale, les autres propriétés n’ont pas besoin d’êtres définies. Dans le cas où elles seraient définies, il est recommandé que les emplacements se situent sur le disque local de la machine afin de ne pas pénaliser les performances.

Configuration SMTP (serveur mail)

Ces propriétés permettent de configurer un serveur SMTP afin que SAINet puisse envoyer des emails.

Info:

La configuration du serveur SMTP peut être faite entièrement via SYS22.

Propriété Environnement Type Description
mail.type none,local,simple Type de resource.
mail.local.port SAINET_MAIL_LOCAL_PORT int Si local, détermine le port local à utiliser.
mail.simple.protocol SAINET_MAIL_STMP_PROTOCOL smtp,smtps Si simple, protocole à utiliser (par défaut, smtp).
mail.simple.host SAINET_MAIL_STMP_HOST string Si simple, nom de l’hôte.
mail.simple.port SAINET_MAIL_STMP_PORT int Si simple, numéro du port (optionnel).
mail.simple.from SAINET_MAIL_STMP_FROM string Si simple, adresse email à utiliser dans le From.
mail.simple.user SAINET_MAIL_STMP_USER string Si simple, nom d’utilisateur (si authentification nécessaire).
mail.simple.password SAINET_MAIL_STMP_PASSWORD string Si simple, mot de passe utilisateur. Implique la création (automatique) de la variable mail.smtp.auth=true.
mail.simple.timeout SAINET_MAIL_SMTP_CONNECTION_TIMEOUT / SAINET_MAIL_SMTP_READ_TIMEOUT int Si simple, détermine le timout (en millisecondes) pour la connexion et la lecture au serveur SMTP. Une valeur à zéro ou négative signifie un timeout infini.
mail.* SAINET_MAIL_STMP_PARAMS, SAINET_MAIL_STMP_PARAMS_FILE Autre propriétés relatives à la configuration des mails (voir ici).

Le type de mail local est généralement utilisé pour les tests. Cela démarre un serveur SMTP local sur le port spécifié et stocke les mails envoyés par SAINet afin qu’ils puissent être vérifiés par la suite (uniquement par API).

De la même manière que pour les paramètres de la base de données, il est possible d’utiliser la variable SAINET_MAIL_STMP_PARAMS sous la forme key1=value1;key2=value2;... afin de spécifier des paramètres supplémentaires. Il est également possible d’utiliser la variable SAINET_MAIL_STMP_PARAMS_FILE afin de pointer vers un fichier contenant les propriétés supplémentaires.

Note:

La configuration par propriétés/variables d’environnement est statique. En cas de changement, un redémarrage du serveur sera nécessaire. La configuration SYS22 est dynamique et ne nécessite pas de redémarrage.

Une liste de propriété étendue peut être trouvée ici.

Par exemple, la variable SAINET_MAIL_STMP_PARAMS peut être définie comme suit: SAINET_MAIL_STMP_PARAMS_FILE=mail.smtp.from=noreply@mydomain.com;mail.smtp.starttls.required=true;.... Dans le cas de la varaible SAINET_MAIL_STMP_PARAMS_FILE, le fichier spécifié contient les variables sous la forme suivante:

mail.smtp.from=noreply@mydomain.com
mail.smtp.starttls.required=true
...

Authentification

Ces propriétés permettent de configurer comment un utilisateur est authentifié dans SAINet. Par défaut, SAINet utiliser un JDBCRealm qui utilise la base de données afin d’authentifier un utilisateur.

Propriété Environnement Type Description
realm.classname SAINET_REALM_CLASSNAME string Nom complet de la classe du Realm.
realm.prop.<name> SAINET_REALM_PARAMS, SAINET_REALM_PARAMS_FILE string Propriété relative au Realm. La partie <name> sera utilisée pour créer la propriété dans la configuration.
Note:

La propriété realm.prop.jaas-context doit généralement être spécifiée en relation avec le Realm autorisé. Elle peut prendre une des valeurs suivantes: fileRealm, ldapRealm, solarisRealm, jdbcRealm, jdbcDigestRealm ou pamRealm.

Les modules d’authentification fournis peuvent être trouvés ici. Les classes principales peuvent être les suivantes:

  • com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm (Realm par défaut utilisé en arrière-plan)
  • com.sun.enterprise.security.auth.realm.ldap.LDAPRealm

De la même manière que pour les paramètres de la base de données, il est possible d’utiliser la variable SAINET_REALM_PARAMS sous la forme key1=value1;key2=value2;... afin de spécifier des paramètres supplémentaires. Il est également possible d’utiliser la variable SAINET_REALM_PARAMS_FILE afin de pointer vers un fichier contenant les propriétés supplémentaires.

Typiquement, dans le cas d’un ActiveDirectory / LDAP, la variable SAINET_REALM_PARAMS peut être définie comme ceci: SAINET_REALM_PARAMS=directory=ldap://<url>;base-dn=DC=domain,DC=lan;.... Dans le cas de la variable SAINET_REALM_PARAMS_FILE, le fichier spécifié contiendra les variables sous la forme suivante:

directory=ldap://<url>
base-dn=DC=domain,DC=lan
...
Attention:

Avant de configurer l’authentification LDAP, il est nécessaire de configurer la synchronisation Active Directory au niveau des paramètres SYS22.

Lorsque la synchronisation avec Active Directory est activée, les propriétés SYS22 relatives au salt (auth.password.salt et auth.password.salt_fallback) ne sont plus prises en compte.

Exemple d’authentification avec ActiveDirectory / LDAP

La documentation des différentes propriétés peut être trouvée ici.

realm.classname=com.sun.enterprise.security.auth.realm.ldap.LDAPRealm
realm.prop.directory=ldap://<url>
realm.prop.search-filter=(&(objectClass=user)(sAMAccountName=%s)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
realm.prop.search-bind-dn=<domain>\\<username>
realm.prop.base-dn=DC=domain,DC=lan
realm.prop.group-search-filter=(&(objectClass=group)(member=%d))
realm.prop.search-bind-password=<password>
realm.prop.group-base-dn=OU=UO-DataCenter,DC=domain,DC=lan

Les différentes valeurs sont composées de la manière suivante (voir également la RFC ou cette documentation):

  • %s contiendra le nom du sujet (subject name).
  • %d contiendra le DN (Distingused Name) de l’utilisateur.
  • (&...) indique une liste de conditions AND.
  • (|...) indique une liste de conditions OR.
  • (!(...)) indique une condition NOT.
  • (<attr>:<matchingrule>:=<value>) indique d’utiliser la règle avec OID <matchingrule> pour vérifier la valeur de <attr> dans le DN.
Note:

Le realm ne sert qu’à l’authentification de l’utilisateur. Il est nécessaire de configurer les variables relatives à l’Active Directory dans SYS22 afin de synchroniser les données une fois l’utilisateur authentifié.

L’utilisateur doit faire partie d’un ou plusieurs groupes (group-search-filter) qui doivent correspondre à un rôle SAINet. Ces groupes sont:

  • USER ou SAIUSER
  • ADMIN ou SAIADMIN
  • SUPERADMIN ou SAISUPERADMIN
Note:

Si l’utilisateur ne fait partie d’aucun de ces groupes, l’authentification sera refusée et il ne pourra pas accéder à SAINet.

Multithreading

La configuration des Managed Executor Service peut être trouvée ici. Toutes les propriétés ne sont pas listées, uniquement celles fournies en standard par SAINet.

Propriété Environnement Type Description
executor.core-pool-size SAINET_EXECUTOR_CORE_POOL_SIZE int Nombre de threads actifs, même si aucun processus en cours. Par défaut, 4.
executor.maximum-pool-size SAINET_EXECUTOR_MAXIMUM_POOL_SIZE int Nombre de threads maximum en parallèle. Par défaut, 128.
executor.task-queue-capacity SAINET_EXECUTOR_TASK_QUEUE_CAPACITY int Nombre de processus maximum en attente d’un thread. Par défaut, 8192.

Mises à jour automatiques

Ces propriétés permettent de configurer les mises à jour automatiques de l’application. Les données d’authentification sont stockées dans le fichier infra/auth/htpasswd.

Note:

Dans le cas d’un service, la configuration des mises à jour se fait dans le fichier <runtime>/services/<service>/sainet-vars.<ext> (les parties <service> et <ext> dépendent du système d’exploitation).

Propriété Environnement Type Description
sainet.update.url SAINET_UPDATE_URL string URL pour le téléchargement des paquets de mise à jour (par défaut https://dev2.sai-erp.net/update).
sainet.update.username SAINET_UPDATE_USERNAME string Nom d’utilisateur.
sainet.update.password SAINET_UPDATE_PASSWORD string Mot de passe.
sainet.update.store SAINET_UPDATE_STORE string Chemin d’accès complet où le paquet de mise à jour doit être téléchargé.
sainet.update.mode SAINET_UPDATE_MODE snapshot,rc,release Mode de mise à jour désiré (voir les types de version.
sainet.update.restart SAINET_UPDATE_RESTART boolean Détermine si le serveur doit être redémarré (par défaut false).

Pour que les mises à jour soient automatiquement appliquées, il faut mettre sainet.update.restart=true car sinon, le paquet de mise à jour est seulement téléchargé.

Serveur Redis (mobile)

Cette configuration s’applique uniquement pour la partie mobile, dans le cas où le cache redis est délocalisé.

Propriété Environnement Type Description
sainet.mobile.redis.url SAINET_REDIS_URL string URL du serveur Redis (par défaut redis://127.0.0.1:6379).

Autres WARs

Il est possible de déployer d’autres applications au sein du serveur SAINet.

Propriété Type Description
server.extra-wars string Liste de fichiers WAR à déployer (séparés par des virgules).

Système de test

Cette configuration est utile pour les serveurs de tests uniquement. Les opérations suivantes sont effectuées:

  • tous les utilisateurs sont déactivés (sauf ceux indiqués par SAINET_SYSTEM_TEST_ENABLED_USERS).
  • toutes les configurations SYS93 sont supprimées.
  • toutes les configurations relatives aux emails en SYS22 sont supprimées. Si la propriété SAINET_SYSTEM_TEST_MAILHOG est définie, alors les propriétés mail.smtp.host et mail.smtp.port sont renseignées.
  • les propriétés relatives au portail en SYS22 sont mises à jour pour pointer sur l’URL du serveur de test (portal.account.activation.url, portal.reset.password.url et portal.news.url).
  • les propriétés relatives au chiffrage en SYS22 sont regénérées (auth.token.encryption_key et password.encryption_key). Les mots de passe stockés dans l’application deviennent inaccessibles.
Environnement Type Description
SAINET_SYSTEM_TEST boolean Active le mode test.
SAINET_SYSTEM_TEST_ENABLED_USERS string Désactive tous les utilisateurs, exceptés ceux listés dans cette propriété. Il est possible de lister plusieurs valeurs séparées par des virgules et d’utiliser des wildcards. Par défaut, sai,sai-*.
SAINET_SYSTEM_TEST_MAILHOG string Nom d’hôte du serveur mailhog pour l’envoi des mails (le port peut être précisé avec le format <host>:<port>). Si pas spécifié, le serveur ne pourra pas envoyer de mail.

Variables applicatives

Beaucoup d’autres variables sont utilisées au sein de SAINet, dont certaines peuvent êtres déclarées comme variables d’environnement. Une vue complète de toutes ces variables peut être obtenue dans la tâche SYSSV.

Toutes les variables applicatives utilisées dans SAINet sont déclarées au niveau du paramétrage:

Fichier Description
sainet.properties Contient les variables applicatives spéciales qui doivent être accessibles en dehors d’une configuration (par exemple, durant l’initialisation du serveur).
system.properties Contient toutes les variables applicatives utilisables de manière standard dans SAINet. Ce fichier peut être personnalisé par module afin de déclarer/modifier des variables en fonction de la modularisation.
Note:

Toutes les propriétés préfixées par sainet. sont également définies comme propriété système et peuvent donc être accédées dans le programme par System.getProperty(<id>).