Vous êtes sur la page 1sur 29

INTEGRATION DE PL/JAVA A POSTGRES

TABLE DE MATIERE
I- SPECIFICATION DE LA MACHINE UTILISEE ........................................................................ 2
II- INSTALLATION DE POSTGRESQL 13 SUR FEDORA 34 ......................................................... 2
1- Installation de Postgres ................................................................................................... 2
2-Activation de postgres .......................................................................................................... 3
3- L’utilisateur postgres ........................................................................................................ 4
4- Permettre les accès distants à Postgres .................................................................. 5
5- Sécurisation de Postgres ................................................................................................... 5
6- Création d’utilisateur ........................................................................................................ 6
III- INSTALLATION DE PGADMIN 4 SUR FEDORA 34 .................................................................. 7
1- Installation de pgadmin4 ............................................................................................... 7
2- Configuration de pgadmin4 ................................................................................................. 7
3- Le firewall ................................................................................................................................ 8
4- Accéder à l’interface web de pgadmin4 ....................................................................... 8
IV- INSTALLATION DE PL/JAVA SUR FEDORA 34 ........................................................................ 9
1- Apache Maven.......................................................................................................................... 9
V- CONNEXION A DISTANCE SUR LE SERVEUR………………………………………………24

VI- LES TRIGGERS……………………..…………………………………………………...………27

1
INTEGRATION DE PL/JAVA A POSTGRES

I- SPECIFICATION DE LA MACHINE UTILISEE

Les spécifications de la machine sur laquelle nous avons configures le serveur


dispose des caractéristiques suivant :

Model du matériel : HP HP ProBook 640 G2

Mémoire : 7.5 GiB

Processeur : Intel® Core™ i5-6300U CPU @ 2.40GHz × 4

Graphics : Mesa Intel® HD Graphics 520 (SKL GT2)

Capcité du disque dur : 500 GO

Nom du SE : Fedora 34 (Workstation Edition)

Type d’OS : 64 Bits

Version de Gnome : 40.1.0

Système de fenêtrage : Wayland

Caractéristiques de la machine utilisée

II- INSTALLATION DE POSTGRESQL 13 SUR FEDORA 34

1- Installation de Postgres

Pour installer le serveur de base de données postgreSql sur une Fedora


34, il faut utiliser les commandes suivantes:

$ sudo dnf module reset postgresql

$ sudo dnf module enable postgresql:13

2
INTEGRATION DE PL/JAVA A POSTGRES

$ sudo dnf install postgresql-server postgresql

Une fois postgres installer, vous pouvez vérifier sa version avec la commande
suivante :

$ psql –V

Fig1 : Vérification de la version de postgres

2-Activation de postgres

Pour utiliser PostgreSQL, il faut avant tout faire une initialisation


de la base de données, pour cela tapez cette commande :

$ sudo postgresql-setup --initdb --


unit postgresql

Si tous se passe bien sans erreur, vous pouvez démarrer le service postgres
avec la commande suivante :

$ systemctl start postgresql.service

Et ensuite vérifier son statut

$ systemctl status postgresql.service

3
INTEGRATION DE PL/JAVA A POSTGRES

Fig2 : Status du serveur de base de données postgres

3- L’utilisateur postgres

Dès le départ, PostgreSQL crée un utilisateur nommé postgres. Cet


utilisateur est le super-utilisateur (l'équivalent de root sur votre système)
du serveur de base de données. Par mesure de sécurité, il est impératif
d'affecter un mot de passe sécurisé à cet utilisateur, pour cela, taper la
commande suivante pour vous connecter en tant qu’utilisateur postgres.

$ sudo -u postgres psql

Fig3 : Interface de connexion de postgres dans le terminal

Vous êtes désormais connectés entant qu’utilisateur postgres

NB : Le # indique que vous utilisez un super-utilisateur du serveur de base


de donnée PostgreSQL.

Il est temps d’attribuer un nouveau mot de passe au super-utilisateur du


serveur de base de données Postgres, pour cela taper la commande suivante.

4
INTEGRATION DE PL/JAVA A POSTGRES

# ALTER USER postgres WITH PASSWORD '<mot_de_passe>';

Fig4 : Attribution du mot de passe au super-utilisateur

4- Permettre les accès distants à Postgres

Pour permettre les connections à distantes à votre SGBD, il est


nécessaire de taper les commandes suivantes :

$ sudo firewall-cmd --add-service=postgresql --


permanent

$ sudo firewall-cmd --reload

Ensuite éditer le fichier /var/lib/pgsql/data/postgresql.conf, localiser


l’entrer listen_adresses et modifier cette ligne comme suite :

listen_addresses = '*'

5- Sécurisation de Postgres

Il est crucial d’avoir une sécurité sur une base de données lorsqu’on est en
réseau. En effet, il est tout à fait possible de chiffrer les mots de passes
des utilisateurs du serveur de base de données.

Pour cela, il faut éditer le fichier /var/lib/pgsql/data/pg_hba.conf en tant


qu'utilisateur root et modifier le fichier en remplaçant ident par md5 afin
d'obtenir les lignes suivantes :

5
INTEGRATION DE PL/JAVA A POSTGRES

Fig5 : cryptage du mot de passe d’utilisateur

Pour que les modifications prennent effet il faut redémarrer le serveur :

$ systemctl restart postgresql.service

6- Création d’utilisateur

Il est recommandé de ne pas utiliser le super utilisateur postgres pour


lire et écrire dans vos bases de données. Pour cela, il est intéressant de
créer un utilisateur dédié :

# su – postgres
$ psql
# CREATE USER John
# ALTER ROLE John WITH CREATEDB
# ALTER USER John WITH ECRYPTED PASSWORD 'mot_de_passe'

6
INTEGRATION DE PL/JAVA A POSTGRES

Alors, nous venons de créer un nouvel utilisateur John dans notre SGBD
postgres, nous lui avons donné le droit de créer des bases de données et

enfin nous lui avons attribué un mot de passe sécurisé.

Fig6 : Création de l’utilisateur John dans notre base de données

III- INSTALLATION DE PGADMIN 4 SUR FEDORA 34

Pour pouvoir faciliter l’accès à notre SGBD PostgreSQL, nous allons


installer pgadmin4 qui est un client web devant permettre des connexion
distantes à notre SGBD. Pour pouvoir l’installer, nous allons utiliser YUM
et installer la version de pgadmin4 disponible pour Centos.

1- Installation de pgadmin4

$ sudo yum -y install


https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-
redhat-repo-latest.noarch.rpm
$ sudo yum -y update
$ sudo yum -y install pgadmin4

2- Configuration de pgadmin4

Le package pgadmin4 est livré avec un script de configuration permettant


de configurer le service Web pgAdmin (qui créera un compte utilisateur utilisé
pour s'authentifier dans l'interface Web), configurer les politiques SELinux
et le serveur Web Apache pour déployer le service Web pgAdmin.
Utiliser la commande suivante pour lancer ce script :

7
INTEGRATION DE PL/JAVA A POSTGRES

$ sudo /usr/pgadmin4/bin/setup-web.sh

Fig7 : Interface de configuration du paquet pgadmin4(console)

3- Le firewall

Il faut ouvrir les ports 80 et 443 dans le firewall pour permettre les accès
à pgadmin4 depuis des machines externes. Utiliser les commandes suivantes:

# firewall-cmd --permanent --zone public --add-port


80/tcp
# firewall-cmd --permanent --zone public --add-port
443/tcp
# firewall-cmd --permanent --add-service=http
# firewall-cmd --reload

4- Accéder à l’interface web de pgadmin4

Pour accéder à l’interface web de pgadmin4, vous pouvez utiliser l’une des
méthodes suivantes :

http://IP_SERVEUR/pgadmin4
OU

8
INTEGRATION DE PL/JAVA A POSTGRES

http://localhost/pgadmin4

Fig8 : interface web de pgadmin4

IV- INSTALLATION DE PL/JAVA SUR FEDORA 34

1- Apache Maven

a- Installer Apache maven

Avant de procéder à l’installation d’Apache Maven, il faut d’abord s’assurer


d’avoir le jdk installer et non seulement la JRE. Une fois que vous avec le
jdk installer, vous pouvez installer Maven. Pour le cas d’espèce, nous avons
java-1.8 installer

$ cd /opt
$ sudo wget https://www-
us.apache.org/dist/maven/maven-
3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
$ sudo tar xzf apache-maven-3.6.3-bin.tar.gz
$ sudo ln -s apache-maven-3.6.3 maven

9
INTEGRATION DE PL/JAVA A POSTGRES

b- Mettre en place les variables d’environnement

Comme nous avons téléchargé les fichiers précompilés d’Apache Maven sur notre
poste, il faut définir les variables d’environnement en créant un nouveau
fichier /etc/profile.d/maven.sh et ajouter le contenu suivant :
export M2_HOME=/opt/maven
export PATH=${M2_HOME}/bin:${PATH}

fig9 :interface de mise en des variables d’environnement

Chargez maintenant les variables d'environnement dans le Shell actuel à l'aide de la commande
suivante.
$ source /etc/profile.d/maven.sh

c- Vérifier la version de Maven


Apache Maven a été configuré avec succès sur notre système. Utilisons la commande suivante
pour vérifier la version de Maven installée sur votre système.
$ mvn -version

Fig10 :version de maven installé

Enfin, supprimons le fichier d'archive téléchargé du système pour libérer de l'espace disque.
$ sudo rm -f apache-maven-3.6.3-bin.tar.gz

10
INTEGRATION DE PL/JAVA A POSTGRES

2- PL/JAVA
Une fois que maven installer, nous pouvons l’utiliser pour pouvoir installer
PL/Java. Pour cela, récupérons le code de la dernière version avec la commande
suivante:

$ git clone https://github.com/tada/pljava.git

Pour pouvoir lancer un mvn build sur le projet, il faut d’abord vérifier que
la machine dispose des dépendances suivantes : g++, javac, pg_config

Dans notre cas, nous allons installer pg_config grâce à commande suivante :

$ sudo dnf install libpq5-devel libpq-devel --skip-


broken

L’option –skip-broken est utilisé parce qu’il y a plusieurs candidat pour


l’installation de ces dépendances et cet option permet de sauter ceux qui
sont défectueuses.

Après avoir installé pg_config, on peut lancer la compilation de notre projet.


Entrons dans le dossier du projet pljava et lançons la commande $ mvn clean
install

11
INTEGRATION DE PL/JAVA A POSTGRES

Fig11 : compilation de notre projet

Au cours de cette première phase, nous rencontrons l’erreur suivant :

Fig12 : Erreur rencontré lors de la compilation

Pour le corriger, nous changeons de version de java comme nous avons deux
versions de java installée sur notre poste : Le java-1.8 et le java 11. La
commande suivante nous permet de changer de version de java et de passer à
la version 11.

12
INTEGRATION DE PL/JAVA A POSTGRES

$ sudo alternatives --config java

Fig13 : Liste des versions de java installées

Après être passé à java-11, nous relançons la commande $mvn clean install et
rencontrons l’erreur suivante :

Fig14 : Erreur rencontré après recompilation

Cette erreur est liée aux fichiers d’entête de postgres qui ne sont pas
fournis dans une version de production. Pour résoudre le problème, nous devons
installer les dépendances de développement de postgres contenant ces entêtes.
Pour cela, tapons la commande suivante sur notre Fedora 34

13
INTEGRATION DE PL/JAVA A POSTGRES

$ sudo dnf install postgresql-server-devel postgresql-


devel --skip-broken

Fig15 : Installation des dépendances de développement de postgres

Relançons ensuite la commande $ mvn clean install et tout ce passe bien


cette fois ci.

Fig16 : Compilation avec succès du programme

Comme tout s’est bien passé, cela ne veut pas dire que PL/Java est maintenant
installé dans postgresql, ce n’est pas le travail de maven. Il permet juste

14
INTEGRATION DE PL/JAVA A POSTGRES

de construire des artefacts dans la machine locale qui seront utilisé par
d’autres projets. Maintenant, il faut installer PL/Java en tant que langage
dans Postgres

3- Installer PL/JAVA dans Postgres

Attention : Il est important de noter qu’il faut configurer le fichier


postgresql.conf, sinon on aura les erreurs suivantes :

Fig17 : Erreur d’installation de PL/JAVA

Pour installer PL/Java dans postgres, il faut suivre la procédure suivante :

Etape 1 : Editez le fichier postgresql.conf situé sous le répertoire data de


votre installation avec la commande $ sudo nano
/var/lib/pgsql/data/postgresql.conf et ajoutez (ou modifiez) les paramètres
suivants :

pljava.classpath = 'path_to_pljava.jar'

pljava.libjvm_location = 'path_to_libjvm.so'

Dans notre cas, nous avons ajouté les entrées suivantes :

pljava.classpath = '/home/tderick/LABO/pljava/pljava-
packaging/target/pljava-pg13.jar'

pljava.libjvm_location = '/usr/lib/jvm/java-11-openjdk-11.0.11.0.9-
2.fc34.x86_64/lib/server/libjvm.so'

15
INTEGRATION DE PL/JAVA A POSTGRES

Etape2 : Redémarrer le serveur de base de données avec la commande suivante :

$ systemctl restart postgresql

Etape3 : Nous allons utiliser la commande CREATE EXTENSION pour installer


PL/Java. Pour installer l'extension PL/Java, connectons-nous à notre SGBD
postgreSQL et tapons la commande suivante :

CREATE EXTENSION pljava;

Etape 4 : Pour confirmer que PL/Java est installé, appelez la commande


suivante :

SELECT * FROM pg_language WHERE lanname LIKE 'java%';

L’image suivante récapitulé la procédure :

Fig18 : Résultat de vérification de l’installation de PL/JAVA

4. Installer le jar dans postgres sql

Un des problèmes que l'on rencontre lorsqu'on veut loader le .jar dans
postgres est que l’on obtienne une Erreur de type I/O Exception indiquant
que l'on ne peut pas lire ouvrir le fichier indique. Ce problème survient
sur des distribution Linux qui utilisent SELinux (Security-Enhanced Linux:
Module de sécurité Linux permettant de définir une politique de contrôle
d'accès obligatoire aux éléments d'un système ). En effet, le postmaster

16
INTEGRATION DE PL/JAVA A POSTGRES

lancer par le daemon postgres qui est charge qui est d'exécuter des processus
sur la machine est restreint par les politiques e-security de SELinux et donc
il n'est pas autorisé à utiliser certains ports. Pour donc passer ce problème
et ne pas entrer en profondeur de SELinux, nous allons tout simplement
désactiver ce dernier. Dans le cas où
l’on n’a pas encore configuré le SELINUX, on aura l’erreur suivante :

Fig19 : Erreur rencontrée lorsque le SELINUX n’est pas configurée

Tout d’abord, l’on doit se connecter à la base de données dans laquelle l’on
veut charger la librairie.

Pour installer notre librairie (en fichier jar), il est nécessaire de suivre
scrupuleusement les différentes étapes suivantes :

Etape1 : Inclure la librairie dans Postgres en utilisant la commande

Select
sqlj.install_jar(‘file :/chemin_vers_la_bibliotheque‘,
‘nom_du_lien_symbolique ‘,true) ;

Celle-ci permet de spécifier dans file le chemin vers la librairie que l’on
souhaite inclure puis le nom symbolique qui nous servira de créer le schéma
qui référencie la librairie dans Postgres et de créer le classPath associe à
notre librairie dans Postgres.

17
INTEGRATION DE PL/JAVA A POSTGRES

Une fois que l’on a ajouté la librairie à l’aide de la commande


précédente, l’on peut avoir la liste de ses fonctions tapant la commande \df

Fig20 : Liste des fonctions présentent dans la librairie

Etape2 : Définir le classpath qui permettra l’exécution des différentes


fonctions qui sont dans notre librairie.
La commande a exécuter est la suivante :

Select
sqlj.set_classpath(‘public’,’nom_du_lien_symbolique’) ;

Etape3 : Création (dans postgres) des différentes fonctions correspondantes


aux fonctions contenues dans la librairie. La
commande est :

CREATE OR REPLACE FUNCTION


nom_fonction(liste_des_types_de_parametres) RETURNS
retour_de_la_fonction AS
‘prototype_absolu_de_la_function’ LANGUAGE java ;

Fig21 : création d’une fonction dans postgres

5.Execution des fonctions ajoutées dans Postgres

Pour exécuter une fonction rajoutée a notre base de données Postgres, il faut
exécuter la commande suivante :

18
INTEGRATION DE PL/JAVA A POSTGRES

SELECT * FROM appel_de_la_fonction ;

6.Exemple d’exécution des fonctions


 a.1 création et exécution de la fonction sum dans Postgres sur un client
ssh connecte à un serveur distant

Fig22 : création et exécution de la fonction su m dans Postgres sur un client ssh connecte
à un serveur distant

 a.2 a.1 exécution de la fonction sum dans Postgres sur un client pgadmin4
connecte à un serveur distant

19
INTEGRATION DE PL/JAVA A POSTGRES

 b.1 Création et exécution de la fonction fact dans un client ssh connecte


à un serveur distant

20
INTEGRATION DE PL/JAVA A POSTGRES

Fig23 : Création et exécution de la fonction fact dans un client ssh connecte à un serveur
distant

b.2 Exécution de la fonction fact dans pdadmin4

21
INTEGRATION DE PL/JAVA A POSTGRES

22
INTEGRATION DE PL/JAVA A POSTGRES

23
INTEGRATION DE PL/JAVA A POSTGRES

V- CONNEXION A DISTANCE SUR LE SERVEUR


1.Connexion avec pgadmin4

Tout d’abord, l’on doit ajouter des utilisateurs pgadmin4 sur le serveur

Fig24 : Ajout des utilisateurs sur le serveur via pgadmin4

Après avoir ajouté des utilisateurs pgadmin, l’on doit se connecter des
comptes postgres a une base de données précise.

24
INTEGRATION DE PL/JAVA A POSTGRES

25
INTEGRATION DE PL/JAVA A POSTGRES

Fig25 : Connexion a une base de donnée Postgres en utilisant le client pgadmin4

2.Connexion au serveur(linux) via un client ssh( Windows)

26
INTEGRATION DE PL/JAVA A POSTGRES

Fig26 : Interface de connexion au serveur linux via ssh.

VI- LES TRIGGERS

Le mécanisme de triggers (que l’on peut traduire par ‘’déclencheur’’ ou


‘’reflexe’’) implanté dans de nombreux SGBD n’est pas évoqué dans la nomme
SQL2 mais constitue un des points de discussions des points de la norme SQL3.
Un trigger est une procédure qui est déclenché par des évènements de mise à
jour spécifiées par l’utilisateur et ne s’exécute que quand une condition
est satisfaite.
On peut considérer les triggers comme une extension du système de
contrainte proposé par la clause CHECK : à la différence de cette dernier,
l’évènement déclencheur est explicitement indiquer et l’action n’est pas
27
INTEGRATION DE PL/JAVA A POSTGRES

limitée à la simple alternative acceptation/rejet. Les possibilités offertes


sont très intéressantes citons :
1. La possibilité d’éviter les risques d’incohérence due à la présence
de la redondance.
2. L’enregistrement automatique de certain évènement (Auditing).
3. La spécification de contrainte liée à l’évolution des données
(exemple : Le prix d’une séance ne peut qu’augmenter)
4. Toute règle complexe liée à l’environnement d’exécution (restriction
sur les horaire, les utilisateurs, etc.)

CONCLUSION

Après ce qui en résulte, nous sommes allés jusqu’à l’exécution des fonctions
java dans postgres. Les problèmes majeurs que nous savons rencontrés sont
tout d’abord ceux des compatibilités du jdk et Maven pour builder le projet
PL/JAVA. Ensuite nous avons eu un problème majeur au niveau chargement du
jar dan Postgres du a la politique de sécurité =SELINUX implémentée sur notre
machine de test (le serveur : Fedora 34). Après avoir résolu tous ces
problèmes, nous avons réussi a exécuter des fonctions basiques.

28
INTEGRATION DE PL/JAVA A POSTGRES

29

Vous aimerez peut-être aussi