Bonjour,

(Pour une appli de monitoring de bases de données)

J'ai une classe answer.java, dont voici, en partie, le code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 
public class answer 
{
    protected String db_name;
    protected Date time;
    public List ma_liste;
    public Calendar cal;
 
    public static Hashtable status = new Hashtable();
 
    public String getStatus(String db_name)
    {
        return (String) status.get(db_name);
    }
 
    public List getStatusAll()
    {
        status.values();
        Set set= status.keySet(); 
        Iterator iter = set.iterator();
        ma_liste = new ArrayList();
 
        int i=1; 
        while (iter.hasNext())
        {  
            ma_liste.add(status.get(iter.next()));
            System.out.println (" "+i+") "+status.get(iter.next())) ; 
            i++; 
        }  
        Collections.sort(ma_liste);
        return ma_liste;
    }
 
    public String setStatus(String key, String val)
    {
        return (String)status.put(key,key+": "+val);
    }
}
Je me sert de cet objet pour stocker des statuts de bases de données ("up" ou "down" selon qu'elle fonctionne encore ou qu'elle est morte).

Dans cette appli, il est possible de charger des threads qui vont envoyer des requêtes sur des bases de données. Juste pour voir si ces requêtes renvoient bien ce qu'elles doivent renvoyer et donc que la DB est en bonne santé.

Ainsi on peut créer un thread qui va questionner une DB en particulier, ou tout une chier de thread (1 pour chacune de mes DB (500)).

Créer c'est bien, mais consulter le status d'une DB, c'est mieux. Donc pour ça je me sers de answer.java

Je stock dans mon objet answer le status de ces DB.

Je me sert de deux commandes (ligne de commande donc...) pour cela:
-status db_name
où je remplace db_name par le nom de la db dont je veux obtenir le statut.

-status
qui est censé me renvoyer le status de tout ce qui se trouve dans mon objet answer. Seulement là ça coince... il semblerait que ce que je fais n'est pas bon, ou que la logique fonctionne pas.

Voici comment j'ajoute des status à mon objet:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
while (rs.next()) 
		{
		    	isUp=rs.getString(1);   // -->isUp devrait contenir soit "bonjour" soit "BONJOUR"
                        if(isUp.compareToIgnoreCase("bonjour")==0)
                        {
                            System.out.println(db_ok);
                            ans.setStatus(db_name,db_ok);
                            time=new Date();
                            sortie.println(time);                                  
                            ans.setTime(time);
                            isUp=db_ok;
                        }
                        else
                        {
                            System.out.println(db_nok);
                            sortie.println(db_nok);
                            ans.setStatus(db_name,db_nok);
                            isUp=db_nok;
                        }
                }
Ce code est dans un thread qui tourne en boucle pour chaque base de données.
"sortie" est un flux de sortie vers l'application cliente.

ans.setStatus: j'envoie avec db_name le nom de la db et avec db_nok ou db_ok une string représentant le status. J'espère donc ainsi envoyer clé+valeur vers mon objet.


J'aimerais donc savoir si ce que je fais dans getStatusAll() peut se faire, et en option, si la logique est bonne.

Quand je veux consulter cet objet, côté serveur, je fais:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
my_list = ans.getStatusAll();
sortie.println(my_list);
Avec my_list étant un objet List;

Côté client, pour la consultation toujours de ce qui est renvoyé avec getStatusAll():
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
do 
{
     reponseDuServeur = entreeDepuisServeur.readLine();
     System.out.println(reponseDuServeur);
}
while(reponseDuServeur.isEmpty()==false);
Avec reponseDuServeur et entreeDepuisServeur qui sont des flux...

J'espère que je vous donne assez d'éléments pour m'aider. (si pas je devrais vous envoyer les quelques milliers de ligne de mon programme et ça je peux que vous vous en passerez volontier )

D'avance merci.