blog.bressure.net

Carnet professionnel d'un informaticien

Application, Gestion de projet

WebDev 16 vs J2EE : connexion aux sources de données par programmation

admin

On a vu précédemment que la gestion des sources de données se devait d’être faite manuellement dans un contexte d’entreprise. En effet l’utilisation de telle ou telle base de donnée doit être configurée dans l’environnement, sur site, et non pas dans l’AGL. Cette article résume la marche à suive pour rendre une application Webdev 16 réellement professionnelle.

En premier lieu, puisque l’AGL ne le propose pas, on créera un mini-socle technique. Ce sera un projet webdev de type « composant ». Il pourra contenir des pages, des bibliothèques de procédures, des classes etc.

Le socle technique devra tout d’abord rechercher le fichier de configuration qui permettra de paramétrer l’application. On créera donc dans le projet socle, une bibliothèque de procédures que l’on nommera Initialisations. Dans cette bibliothèques on créera une procédure que l’on appellera ChercheFichierInit dont le rôle sera de trouver le fichier de configuration afin que le reste de l’initialisation puisse se faire.


PROCEDURE ChercheFichierInit(LOCAL sNomFichierConfig est une chane = "config.ini", LOCAL sNomRepConfig est une chane = "config")

// recherche du fichier de configuration

// recherche dans le rpertoire de config du rpertoire donnes de l’application
gsRepertoireConf = fRepDonnes()
//Info(« Rep de donne », gsRepertoireConf)
gsFichierConf = ComplteRep(ComplteRep(gsRepertoireConf) + sNomRepConfig) + sNomFichierConfig
//Info(« Recherche fichier conf « , gsFichierConf)
SI fFichierExiste(gsFichierConf) = Faux ALORS

// on monte 2 fois car le composant est install dans un sous rpertoire le rpertoire web de l’application utilisatrice
gsRepertoireConf = fRepParent(fRepParent(fRepWeb()))
// Info(« Rep du site », gsRepertoireConf)
// fichier de config spcifique l’environnement (ex: production)
gsFichierConf = ComplteRep(ComplteRep(gsRepertoireConf) + sNomRepConfig) + sNomFichierConfig
// Info(« Recherche fichier conf « , gsFichierConf)
SI fFichierExiste(gsFichierConf) = Faux ALORS
// fichier de config par dfaut (ex: en developpement)
gsFichierConf = ComplteRep(gsRepertoireConf) + sNomFichierConfig
// Info(« Recherche fichier conf « , gsFichierConf)
FIN

FIN

RENVOYER gsFichierConf

Une fois que le fichier de configuration a été déterminé on peut s’occuper de connecter les tables (appelées Fichier dans la terminologie WLangage) de l’analyse à la bonne base de données.


PROCEDURE InitConfigurationBase(sListeFichierAnalyse est une chane)
logInfo("Chargement de la configuration des connexions aux bases de donnes...")
SI fFichierExiste(gsFichierConf) ALORS

logInfo(« Lecture des paramtre d’initialisation de la base de l’application »)
gsUtilisateur_app = INILit(gsCFG_SECTION_BD_APPLI,gsCFG_SECTION_BD_APPLI_KEY_USER, » »,gsFichierConf)
gsMotdepasse_app = INILit(gsCFG_SECTION_BD_APPLI,gsCFG_SECTION_BD_APPLI_KEY_MDP, » »,gsFichierConf)
gsSource_app = INILit(gsCFG_SECTION_BD_APPLI,gsCFG_SECTION_BD_APPLI_KEY_SOURCE, » »,gsFichierConf)
gsServeur_app= INILit(gsCFG_SECTION_BD_APPLI,gsCFG_SECTION_BD_APPLI_KEY_SERVEUR, » »,gsFichierConf)
logInfo(« source serveur :  » + gsServeur_app + CRLF + « source base:  » + gsSource_app + CRLF + « utilisateur:  » + gsUtilisateur_app + CRLF + « mot de passe : ****** »)

// changer les connexions des FICHIER de la base de l’application
// Description de la connexion

gConnexionManuelleAppli..Utilisateur = gsUtilisateur_app
gConnexionManuelleAppli..MotDePasse = gsMotdepasse_app
gConnexionManuelleAppli..Serveur = gsServeur_app
gConnexionManuelleAppli..BaseDeDonnes = gsSource_app
gConnexionManuelleAppli..Provider = hAccsHFClientServeur
gConnexionManuelleAppli..Accs = hOLectureEcriture

gbCOnnexionManuelleAppliOuverte = False
logInfo(« Ouverture de la connexion la base de l’application… »)
SI HOuvreConnexion(gConnexionManuelleAppli) ALORS
logInfo(« OK Connexion ouverte ! « )
gbCOnnexionManuelleAppliOuverte = True

logInfo(« Modification des connexion des tables propres l’application »)
ListeFichierAnalyse = sListeFichierAnalyse
ChangeConnexionApplication(ListeFichierAnalyse)

logInfo(« Fin du traitements des tables applicatives »)
SINON
logFatal(« Erreur lors de l’ouverture de la connexion à la base applicative » + CRLF + HErreurInfo())
Erreur(« Erreur lors de l’ouverture de la connexion à la base applicative »,HErreurInfo())
FIN
SINON
logFatal(« Le fichier de configuration  » + gsFichierConf +  » est introuvable »)
Erreur(« Impossible d’initialiser la configuration de base de donnes, Le fichier de configuration  » + gsFichierConf +  » est introuvable »)
FIN

 

La liste des fichiers de l’analyse de l’application utilisatrice de notre composant ne peut être déterminé par le composant lui-même. En effet la fonction HListeFichier() appelée depuis le composant, retourne les fichiers de l’analyse du composant. C’est donc à l’application d’appeler cette fonction et de passer la liste des fichiers dont il faut changer la connexion. Voici la procédure qui change la connexion:


PROCEDURE PRIVE ChangeConnexionApplication(ListeFichierAnalyse)

POUR TOUT CHAINE fichier_analyse DE ListeFichierAnalyse SEPAREE PAR RC

HChangeConnexion (fichier_analyse,gConnexionManuelleAppli)
SI ErreurDtecte ALORS
Erreur(« Erreur lors de l’attachement de la table :  » + fichier_analyse,HErreurInfo())
SINON
logInfo(fichier_analyse +  » attache  » + gsSource_app +  » sur  » + gsServeur_app)
FIN

FIN

 

Dans le code de l’initialisation serveur du projet de l’application cliente il suffit de mettre ces lignes:


Intialisations.ChercheFichierInit()
Initialisations.InitConfigurationBase(HListeFichier())

NB: Le lecture corrigera de lui même les références à des variables nom déclarées telles que les constantes des clés utilisées dans le fichier d’initialisation.

NB: les fonctions LogInfo(), LogFatal() utilisées dans le code sont des fonctions personnelles afin de palier le manque de niveau de log dans WebDev, et feront éventuellement l’objet d’un billet ultérieur.

Tags:

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Back to top