Bonjour,
Introduction au problème:
Une application de monitoring d'instances de DB. Il est possible de checker un certains nombres d'informations concernant la santé d'une instance. Si elle à un soucis, si oui, lequel, si elle va bien, etc... Application client serveur qui utilise les thread. Un thread consulte les entrées dans une table, ces entrées sont des noms d'instance. Et pour chaque instance trouvée dans la table, le thread initial crée un thread enfant et attache ce thread enfant à l'instance afin qu'il la monitore. Seulement côté client, on peut rentrer à peu près n'importe quel nom d'instance en ligne de commande, et évidemment si on entre n'importe quoi, le serveur reçoit un nom d'instance qu'il ne monitore pas, est donc incapable de renvoyer les informations voulues, et ... plante.
Pour règler ce problème, dés que je démarre le serveur, j'aimerais qu'une liste des instances monitorées soit remplie. Afin que lorsque du côté client on entrera n'importe quoi, il suffira de tester si ce qu'on à entré se trouve dans la liste (une instance portant ce nom est donc bien monitorée pour le moment) et donc on pourra entrée dans le suite du code (les traitements).
Pour ce je compte ajouter les instances dans une Arraylist.
Voici comment je m'y prend pour ajouter des Strings dans cette ArrayList:
J'ai un objet/class "answer", dans laquelle je définis une Arraylist, et une méthode pour y ajouter un élément (String)
Dans une autre classe, je crée un objet Answer que je nomme "ans", et y ajoute une String:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public ArrayList instances = new ArrayList(); . . . public void setInstances(String instance) { instances.add(instance); }
[ODE]
ans.setInstances(db_name);
[CODE]
Dans une autre class, je consulte la taille de mon Arraylist:
instances est mon arraylist...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 System.out.println("instances size: "+ans.instances.size());
Et là la taille est égale à 0. Elle devrait être égale à 14.
Pistes de réflexion: J'utilise des threads pour ajouter mes strings à mon arraylist. Mais normalement il n'y a pas d'accès concurrents à l'arraylist. Puis même si, au moins le premier éléments, la première string serait ajoutée, ou la dernière, j'aurais une taille de 1. Mais là, 0 :-(
Vous voyez pourquoi ?
Bonus:
Je compte bien parcourir mon arraylist de cette manière (pour checker si l'instance de laquelle on veut obtenir une quelconque info se trouve bien monitorée pour le moment):
(dans mon objet Answer)
Ensuite côté client on envoie n'importe quoi mais côté serveur ce qui est réceptionné (un nom d'instance) est testé, si getInstance(db_name) renvoie true, bha alors l'instance est monitorée et l'application serveur peut entamer la collecte d'informations:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public boolean getInstance(String db_name) { boolean test = false; if(instances.contains(db_name)) { test = true; } return test; }
Command2 contient le nom de l'instance...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 if(ans.getInstance(command2)==true) { flag3=true; }
Puis si flag3==true on entame la collecte donc.
Conceptuellement je m'y prend bien ?
Où se situe mon problème d'après vous ?
Partager