Class VerifThread

java.lang.Object
  |
  +--java.lang.Thread
        |
        +--VerifThread
All Implemented Interfaces:
java.lang.Runnable

public class VerifThread
extends java.lang.Thread

Cette classe génère un processus qui pour toutes les entrées de la tables Page (c'est à dire toutes les pages déjà parcourues) vérifie que la page existe encore. Dans le cas contraire cette page est supprimée de la base de données.

Rem: La suppression d'une page entraine également la suppression de tous les liens qu'elle contenait et des mots qui désignaient ceux-ci s'ils sont devenus inutils.

Rem: Les processus engendrés par cette classe sont appelés dans le reste de cette documentation 'processus de vérification'.

See Also:
"Pour plus d'information sur le déroulement d'une suppression de page, voir la fonction supp_page(INTEGER) dans bd/crawler.sql."

Field Summary
protected  Pgsql bd
          Objet permettant de communiquer avec la base de données du crawler.
protected  int BOUCLE_MAX
          Nombre maximum de tentatives de répétitions de requêtes avant ne soit considérée comme échouée.
protected  boolean first_currval
          Drapeau indiquant si une requête SELECT currval('page_id_page_seq') a déjà été envoyée.
protected  int id_max
          Le plus grand identificateur de page utilisé dans la base de données.
protected  int id_page
          Identificateur de la page à vérifier et éventuellement à supprimer.
protected  boolean is_new_page
          Champ permettant de savoir si une nouvelle page à été insérée dans la base de données par un processus de navigation.
protected  java.io.PrintStream outLog
          Flux d'entrée sur le fichier de journalisation.
protected  boolean to_finish
          Drapeau signalant que le processus doit s'arrêter.
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Constructor Summary
VerifThread(java.lang.String nom, java.io.PrintStream outLog)
          Construit un nouvel objet VerifThread.
 
Method Summary
protected  boolean existId(int id)
          Vérifie que l'identificateur de page passé en argument existe bien dans la base de données du crawler, c'est à dire qu'il correspond à une page existante.
 void finish()
          Permet un arrêt propre du processus.
protected  int maxId()
          Recherche le plus grand identificateur de page utilisé dans la base de données.
protected  void newMaxId()
          Recherche le nouvel identificateur maximum d'une page dans la base de données.
 void newPage()
          Avertit le processus de vérification qu'une nouvelle page a été insérée dans la base de données en positionnant le drapeau is_new_page à true.
protected  int nextId()
          Retourne le plus petit identificateur de page valide dans la base de données du crawler.
 void run()
          Méthode déterminant le fonctionnement du processus.
protected  int suppPage(java.lang.String sPage)
          Supprime une page n'existant plus sur le net de la base de données du crawler.
protected  void suppPictFile(java.lang.String fichier)
          Supprime un fichier image du système.
protected  int verifPage()
          Vérifie que la page correspondant à l'identificateur courant (id_page) existe encore sur le net et la supprime de la base de données si ce n'est plus le cas.
 
Methods inherited from class java.lang.Thread
activeCount, checkAccess, countStackFrames, currentThread, destroy, dumpStack, enumerate, getContextClassLoader, getName, getPriority, getThreadGroup, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setName, setPriority, sleep, sleep, start, stop, stop, suspend, toString, yield
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

BOUCLE_MAX

protected final int BOUCLE_MAX
Nombre maximum de tentatives de répétitions de requêtes avant ne soit considérée comme échouée. En effet, il est possible pour divers raisons qu'une requête échoue alors qu'elle devrait réussir.

See Also:
Constant Field Values

to_finish

protected boolean to_finish
Drapeau signalant que le processus doit s'arrêter.


outLog

protected java.io.PrintStream outLog
Flux d'entrée sur le fichier de journalisation. Ce flux est partagé avec les processus de navigation (NavThread)

See Also:
NavThread

id_page

protected int id_page
Identificateur de la page à vérifier et éventuellement à supprimer.


id_max

protected int id_max
Le plus grand identificateur de page utilisé dans la base de données.


is_new_page

protected boolean is_new_page
Champ permettant de savoir si une nouvelle page à été insérée dans la base de données par un processus de navigation.


first_currval

protected boolean first_currval
Drapeau indiquant si une requête SELECT currval('page_id_page_seq') a déjà été envoyée. En effet, tant que cela n'a pas été fait on ne peut pas faire de requête SELECT nextval('page_id_page_seq')


bd

protected Pgsql bd
Objet permettant de communiquer avec la base de données du crawler.

Constructor Detail

VerifThread

public VerifThread(java.lang.String nom,
                   java.io.PrintStream outLog)
Construit un nouvel objet VerifThread.

Parameters:
nom - le nom du processus
outLog - le flux permettant d'écrire dans le fichier de journalisation
See Also:
outLog
Method Detail

finish

public void finish()
Permet un arrêt propre du processus.

L'arrêt n'est pas immédiat, il s'agit plutôt d'une demande d'arrêt permettant au processus de terminer ce qu'il est en train de faire et l'empéchant d'enchainer sur une nouvelle tâche. Il existe cependant un cas ou l'arrêt est quasiment immédiat: celui où le processus est bloqué en attente qu'au moins une page soit insérée dans la base de données. Le processus est alors sorti de sont attente et est terminé.


newPage

public void newPage()
Avertit le processus de vérification qu'une nouvelle page a été insérée dans la base de données en positionnant le drapeau is_new_page à true.

Cette fonction n'est utilisée que par les processus de navigation (NavThread) car ce sont les seuls à pouvoir insérer quoi que ce soit dans la base de données.

See Also:
is_new_page

maxId

protected int maxId()
             throws java.sql.SQLException
Recherche le plus grand identificateur de page utilisé dans la base de données.

Returns:
Le plus grand identificateur de page utilisé dans la base de données.
Throws:
java.sql.SQLException - En cas d'erreur engendrant l'interruption du processus

newMaxId

protected void newMaxId()
                 throws java.sql.SQLException
Recherche le nouvel identificateur maximum d'une page dans la base de données.

Cette méthode permet de mettre à jour le champ id_max.

Throws:
java.sql.SQLException - En cas d'erreur de communication avec la base de données
See Also:
id_max

existId

protected boolean existId(int id)
                   throws java.sql.SQLException
Vérifie que l'identificateur de page passé en argument existe bien dans la base de données du crawler, c'est à dire qu'il correspond à une page existante.

Parameters:
id - l'identificateur de page dont on veut vérifier l'existance.
Returns:
  • true si l'identificateur existe.
  • false dans le cas contraire.
Throws:
java.sql.SQLException - En cas d'erreur de communication avec la base de données

nextId

protected int nextId()
Retourne le plus petit identificateur de page valide dans la base de données du crawler.

Returns:
  • le plus petit identificateur de page valide en cas de succès.
  • -1 en cas d'échec
  • -2 si le processus a été réveillé (pour terminer l'application) alors qu'il attendait qu'au moins une page soit insérée dans la base de données.

suppPage

protected int suppPage(java.lang.String sPage)
                throws java.sql.SQLException
Supprime une page n'existant plus sur le net de la base de données du crawler.

La page supprimée est la page correspondant à l'identificateur de page courant stocké dans le champ id_page. Cette méthode se déroule en deux temps:

Parameters:
sPage - l'url de la page à supprimer (utilisé uniquement pour le fichier de journalisation).
Returns:
La valeur retournée par la fonction supp_page de la base de données.
Throws:
java.sql.SQLException - En cas de problème de communication avec la base de données.
See Also:
"Pour en savoir plus sur la suppression d'une page, voir la fonction supp_page dans le fichier crawler.sql.", suppPictFile(String)

suppPictFile

protected void suppPictFile(java.lang.String fichier)
Supprime un fichier image du système.

Deux raisons peuvent amener à supprimer un fichier image:

Remarque: les fichiers images se trouvent tous dans le répertoire ../data/.

Parameters:
fichier - Le nom du fichier contenant une image.

verifPage

protected int verifPage()
                 throws java.sql.SQLException
Vérifie que la page correspondant à l'identificateur courant (id_page) existe encore sur le net et la supprime de la base de données si ce n'est plus le cas.

Returns:
La valeur retournée par la fonction supp_page de la base de données.
Throws:
java.sql.SQLException - En cas de problème de communication avec la base de données.
See Also:
suppPage(java.lang.String), "Pour en savoir plus sur la suppression d'une page, voir la fonction supp_page dans le fichier crawler.sql."

run

public void run()
Méthode déterminant le fonctionnement du processus.

La majorité des champs de l'objet sont initialisés dans le constructeur, cependant certains le sont dans cette méthode:

La tâche de ce processus se décompose en trois étapes:

Specified by:
run in interface java.lang.Runnable
Overrides:
run in class java.lang.Thread