Code source wiki de Documentation technique

Version 21.1 par Matthieu Manginot le 17/11/2020 - 14:07

Afficher les derniers auteurs
1
2
3 {{toc/}}
4
5 == Prérequis ==
6
7 * Hypercerts est une application Java qui se connecte à Apogée et au LDAP.
8 * Elle requiert l'utilisation d'une base MariaDB pour son fonctionnement interne.
9 * Elle se déploie sur des serveurs comme une application SpringBoot classique.
10 * Le WAR pourra être pris en charge par un tomcat et servir les utilisateur•ices via l'URL configurée.
11
12 |=(((
13 Technologie
14 )))|=(((
15 Version
16 )))
17 |(((
18 JDK
19 )))|(((
20 11+
21 )))
22 |(% colspan="1" %)(((
23 SpringBoot
24 )))|(% colspan="1" %)(((
25 2.3
26 )))
27 |(% colspan="1" %)(((
28 Vaadin (Frontend)
29 )))|(% colspan="1" %)(((
30 14
31 )))
32 |(((
33 Tomcat
34 )))|(((
35 9+
36 )))
37 |(% colspan="1" %)(((
38 MariaDB
39 )))|(% colspan="1" %)(((
40 14+
41 )))
42 |(% colspan="1" %)(((
43 Maven
44 )))|(% colspan="1" %)(((
45 3.6+
46 )))
47 |(% colspan="1" %)(((
48 Connection Apogée
49 )))|(% colspan="1" %)(((
50 \\
51 )))
52 |(% colspan="1" %)(((
53 Connection Apogée via WS
54 )))|(% colspan="1" %)(((
55 6.00.50
56 )))
57 |(% colspan="1" %)(((
58 Connection LDAP
59 )))|(% colspan="1" %)(((
60 \\
61 )))
62 |(% colspan="1" %)(((
63 Docker (optionnel)
64 )))|(% colspan="1" %)(((
65 docker-compose 3
66 )))
67
68 == Téléchargement des sources ==
69
70 Les sources de l'application peuvent être téléchargées à [[cet endroit>>url:https://download-sig.univ-lorraine.fr/public/hypercerts/hypercerts-1.0.2-SNAPSHOT.zip||shape="rect"]].
71
72 == Installation d'Hypercerts ==
73
74 === **Initialisation de la base** ===
75
76 Après avoir créé une base de données "//hypercerts//", la base de données MariaDB/MySQL s'initialise avec la commande Flyway suivante :
77
78 {{code language="bash" theme="Eclipse"}}
79 mvn -Dflyway.configFiles=flyway.properties flyway:migrate
80 {{/code}}
81
82 Le fichier flyway.properties doit être créé à partir du fichier exemple flyway-sample.properties. Il contient les properties standard à Flyway.
83
84 {{code language="bash" theme="Eclipse" linenumbers="true" collapse="true"}}
85 # Flyway
86 # ConfigFiles : https://flywaydb.org/documentation/configfiles
87 # mvn -Dflyway.configFiles=xxx.properties flyway:migrate
88 flyway.url=jdbc:mariadb://localhost/hypercerts?serverTimezone=Europe/Paris
89 flyway.schemas=hypercerts
90 flyway.user=XXX
91 flyway.password=
92 # Emplacement des fichiers sql de migration
93 flyway.locations=classpath:db/migration
94 # baselineOnMigrate
95 flyway.baselineOnMigrate=false
96 {{/code}}
97
98 Au besoin, les fichiers sql de migration peuvent être trouvés sous //src/main/resources/db/migration//.
99
100 Pour remettre à zéro la base de données "//hypercerts//", lancer le script //src/main/resources/db/reset/reset.sql //puis exécuter à nouveau Flyway//.//
101
102 === Configuration de l'application ===
103
104 Créer et compléter un fichier **application.yaml** à la racine du projet sur le modèle de **application-sample.yaml**
105
106 Des indications sont présentes dans le fichier pour aider à sa configuration.
107
108 === **Éléments de configuration importants** ===
109
110 ==== Property //app.production// ====
111
112 Pour les tests, mettre **app.production** à //false// pour obtenir une année supplémentaire (N-2) pour la génération, ainsi des diplômes avec résultats seront plus facilement trouvables.
113
114 En étant à //false//, cette //property// autorise également la configuration de l'interception de tout les mails applicatifs.
115
116 ==== **Envoi de mail** ====
117
118 (% style="color: rgb(0,51,102);" %)__**Sur votre environnement de test/développement**, pour empêcher l'envoi de mails de test en réel, il est conseillé :__
119
120 * d'utiliser un mail catcher ([[https:~~/~~/mailcatcher.me/>>url:https://mailcatcher.me/||shape="rect"]]) en remplacement de votre smtp
121 * **ou** de configurer l'application pour intercepter tous les mails applicatifs avec ces valeurs :
122 ** **app.production** à //false//
123 ** **spring.mail.intercept.active** à //true//
124 ** et **spring.mail.intercept.mails** contenant une ou plusieurs adresses de réception des mails
125
126 Enfin, la //property //**app.mails** sert à définir une ou plusieurs adresses permettant de recevoir les mails applicatifs. ⚠ Aujourd'hui, dans cette version tous les envois de mails ont en copie de cette //property//. Elle est optionnelle et peut être laissée à vide.
127
128 ==== WebServices Apogée ====
129
130 Les WebServices Apogée sont appelés par l'intermédiaire d'une librairie UL.
131
132 Les //properties// différent du classique fichier de configuration //configUrlServices.properties// de l'AMUE.
133
134 Des //headers// peuvent être ajoutés en paramètre de chaque WebServices.
135
136 Exemple :
137
138 {{code language="bash" theme="Eclipse" linenumbers="true" collapse="true"}}
139 ws:
140 apogee:
141 administratif:
142 url: https://api.univ.fr/apo/amue_apo_administratif
143 headers:
144 # header1: value1
145 # header2: value2
146 username: xxxx
147 password: xxxx
148 {{/code}}
149
150 === Configurer et lancer le projet dans Eclipse ===
151
152 * Importer le projet Maven dans Eclipse.
153 * Lorsque la configuration est terminée, démarrer l'application en faisant un clic droit sur la classe {{code language="none"}}fr.univlorraine.hypercerts.Application.java{{/code}} et en choisissant 'Run As / Java Application'.
154
155 === Customisation des services ===
156
157 Plusieurs services sont personnalisables en fonction de votre environnement.
158
159 Sous //fr.univlorraine.hypercerts.apogee.service.customs// :
160
161 * //ApogeeUserServiceCustomExample//
162 ** Personnalisation de la récupération des adresses mails des utilisateurs Apogée à partir de l'uid LDAP
163 * //BlocageServiceCustomExample//
164 ** Personnalisation de la récupération des blocages/interdits à partir d'un code étudiant Apogée
165 * //ComposanteServiceCustomExample//
166 ** Personnalisation de la récupération :
167 *** de toutes les composantes 
168 **** → utilisé pour donner les droits sur toutes les composantes aux super admins
169 *** des composantes pour un utilisateur à partir de l'uid LDAP
170 *** du nombre de composantes pour un utilisateur à partir de l'uid LDAP
171
172 (% style="color: rgb(0,51,102);" %)__Pour personnaliser un de ces services :__
173
174 1. Copier la classe en la renommant
175 1. Implémenter la ou les méthodes
176 11. Vous êtes libre de créer des repositories ou d'utiliser l'entityManager directement
177 1. (((
178 Dé-commenter les 2 annotations :1. (((
179 @Service → Pour que Spring implémente le Service au démarrage
180 )))
181 1. (((
182 et @Override~*~* → Pour que l'implémentation surcharge le service par défaut
183 )))
184 )))
185 1. Au démarrage de l'application
186 11. Une ligne "//Overriding XXX for YYY implementation//" doit apparaître dans les logs
187 \\
188
189 {{code language="java" theme="Eclipse" title="Exemple" linenumbers="true" collapse="true"}}
190 /**
191 * Override default ApogeeUserService implementation.
192 * >> README
193 * Décommenter l'annotation @Service pour que le service soit instancié et l'annotation @OverrideApogeeUserService pour que l'implémentation soit utilisée.
194 *
195 * @author Matthieu Manginot
196 */
197 @NoArgsConstructor
198 @Slf4j
199 @Service
200 @OverrideApogeeUserService
201 public class ApogeeUserServicePERSO implements IApogeeUserService {
202
203 @PersistenceContext(unitName = "apogeeEntityManagerFactory")
204 private EntityManager entityManagerApogee;
205
206 @PostConstruct
207 public void init() {
208 log.info("Overriding {} for IApogeeUserService implementation", getClass().getCanonicalName());
209 }
210
211 /**
212 * @see fr.univlorraine.hypercerts.apogee.services.IApogeeUserService#getEmail(java.lang.String)
213 */
214 @Override
215 public String getEmail(final String uidLdap) {
216 /* Implémentation personnalisée de getEmail. entityManagerApogee.createNativeQuery... */
217 return "mail@univ.fr";
218 }
219 }
220 {{/code}}
221
222 === Paramétrage de Digiposte ===
223
224 //Documentation à venir. Toutes les fonctionnalités ne sont pas encore implémentées.//
225
226 //Il convient donc de laisser la property app.isUsingDigiposteDelivery à false.//
227
228 === Maven / Exécution de l'applicatoin ===
229
230 * Sous un IDE, exemple Eclipse//, avec fichier de config à la racine contenant les sources// :
231 ** (% style="color: rgb(0,0,0);" %)Clic droit sur "Application.java > Run As > Java Application"
232 * Lancer l'application (hors d'un IDE),// avec fichier de config à la racine contenant les sources// :
233
234 {{code language="bash" theme="Eclipse"}}
235 mvn spring-boot:run
236 {{/code}}
237
238 * Lancer les tests :
239
240 {{code language="bash" theme="Eclipse"}}
241 mvn verify
242 {{/code}}
243
244 * Créer le package pour production :
245
246 {{code language="bash" theme="Eclipse"}}
247 mvn clean package -Pproduction
248 {{/code}}
249
250 * Sous un serveur, comme Tomcat, le fichier de config peut être déposé à la racine du tomcat avec précision de son emplacement via les options JAVA, exemple :
251
252 {{code language="bash" theme="Eclipse"}}
253 export JAVA_OPTS="$JAVA_OPTS -Dspring.config.location=$HOMEDIR/application.yaml"
254 {{/code}}
255
256 === Administration ===
257
258 Les super admins ont accès à des vues supplémentaires. Des onglets pour ces dernières apparaissent dans le panneau de gauche.
259
260 [[image:attach:image2020-7-23_12-41-56.png||align="center" height="400"]]
261
262 === Gestion ===
263
264 \\
265
266 |=(((
267 Vue
268 )))|=(((
269 Utilisation
270 )))
271 |(((
272 (% class="content-wrapper" %)
273 (((
274 [[image:attach:image2020-7-23_12-51-28.png||height="400"]]
275 )))
276 )))|(((
277 Cette vue permet de lancer les tâches qui s’exécutent automatiquement de façon manuelle.
278
279 Trigger CRON jobs permet de lancer toutes les tâches de dématérialisation jusqu'à ce qu'elles aboutissent toutes.
280
281 On peut aussi utiliser des boutons pour lancer plus finement des tâches.
282
283 À noter que si l'application n'est pas configurée pour utiliser Digiposte, les boutons sous Digiposte n'auront pas d'effet.
284 )))
285
286 === Loggers ===
287
288 \\
289
290 |=(((
291 Vue
292 )))|=(((
293 Utilisation
294 )))
295 |(((
296 (% class="content-wrapper" %)
297 (((
298 [[image:attach:image2020-7-23_15-56-58.png||height="250"]]
299 )))
300 )))|(((
301 Cette vue permet de modifier à chaud sans re-démarrage le niveau de logs de tout les loggers de l'application.
302
303 Utile pour afficher les requêtes SQL (filtre: sql) ou des logs plus précis en fonction des classes/packages.
304 )))