Variables statiques et tomcat [JAVA] - Java - Programmation
Marsh Posté le 07-04-2004 à 12:18:24
Est-ce-que tu ne peux pas créer un objet qui accédéra au code de BRITE et dont toutes les méthodes seront synchronisées afin de t'assurer que les variables statiques ne seront pas modifiées par 2 threads différents ?
Marsh Posté le 07-04-2004 à 12:39:41
machinbidule1974 a écrit : Est-ce-que tu ne peux pas créer un objet qui accédéra au code de BRITE et dont toutes les méthodes seront synchronisées afin de t'assurer que les variables statiques ne seront pas modifiées par 2 threads différents ? |
Si je fais ça, les clients seront servis chacun à leur tour l'un après l'autre. Ce n'est pas une mauvaise solution mais est-ce qu'il y aurait un moyen pour qu'on puisse quand même générer deux topologies en même temps ? Sinon les clients risquent d'attendre un paquet de temps (générer une topologie de 100000 noeuds, ça prend un peu de temps quand même).
Le problème est que si deux clients A et B sont présents simultanément, A aura, par exemple, un noeud d'ID 0 mais pas B (qui commencera à 1 ou 2 ou autre chose) ce qui est assez gênant.
Marsh Posté le 07-04-2004 à 12:44:02
essaye de passer par ton propre classloader. Tu fais un nouveau classloader pour chaque utilisateur, et hop.
voir la doc de URLClassLoader
Marsh Posté le 07-04-2004 à 14:12:30
lorill a écrit : essaye de passer par ton propre classloader. Tu fais un nouveau classloader pour chaque utilisateur, et hop. |
Ok merci, je vais regarder cela d'un peu plus près.
Marsh Posté le 07-04-2004 à 14:42:32
lorill a écrit : essaye de passer par ton propre classloader. Tu fais un nouveau classloader pour chaque utilisateur, et hop. |
les variables statics sont liées au classloader.
moi je ferais plutot un classloader par thread ... enfin ca dépend du type de traffic de ton site ...
Marsh Posté le 07-04-2004 à 16:54:20
Bon, j'ai essayé URLClassLoader et ça fais bien ce que je veux.
Voilà ce que j'ai :
Code :
|
Avec ça la sortie du programme est :
|
J'ai juste encore une question : est-ce qu'il y a moyen de caster l'objet retourné par cons.newInstance(null) en un objet Node. En faisant une recherche dans les archives, j'ai vu une réponse de Benou qui semblait affirmer que ce n'était pas possible mais je voudrais être sûr d'avoir bien compris.
Merci encore à vous en tout cas.
Marsh Posté le 07-04-2004 à 16:57:13
C'est possible mais si tu mets en dur "(Node) tonObjet", ca va utiliser le classloader system pour caster. Hors l'instance tonObject a été créé à partir d'une class d'un autre class loader => tu vas te manger un classcastexception car, ca a beau être les mêmes classes, elles ne sont pas assignable car elles n'ont pas été chargées par le même classloader ...
Marsh Posté le 07-04-2004 à 17:06:39
benou a écrit : C'est possible mais si tu mets en dur "(Node) tonObjet", ca va utiliser le classloader system pour caster. Hors l'instance tonObject a été créé à partir d'une class d'un autre class loader => tu vas te manger un classcastexception car, ca a beau être les mêmes classes, elles ne sont pas assignable car elles n'ont pas été chargées par le même classloader ... |
Ouais... donc en gros pour appeler des méthodes sur "tonObjet", je suis obligé de passer par le package java.lang.reflect...
Marsh Posté le 07-04-2004 à 17:09:11
Sigmund a écrit : |
nan pas forcément : tu peux dédier le travaille à une classe que tu chargeras via ton classloader et qui elle fera le boulot : si elle est gérée par ton classloader elle peux faire les appels direct à ton produit. Par contre, il faudra que les interco entre cette classe et le reste de l'appli (servlet, etc ...) soient faits de façon dynamique.
Marsh Posté le 07-04-2004 à 17:15:34
benou a écrit : |
Ok, j'ai tout compris (comme quoi tout arrive hein ). Merci beaucoup .
Marsh Posté le 07-04-2004 à 17:26:37
Reply
Marsh Posté le 07-04-2004 à 10:38:05
Salut à tous,
J'ai un gros problème dans le programme que je suis chargé de développer : un générateur de topologies et de trafic MPLS. Le but du projet est qu'on puisse se connecter à un serveur tomcat et demander la génération de topologies avec du trafic dessus, le tout en précisant certains paramètres.
Pour générer les topologies, je réutilise un programme existant nommé BRITE. En effet, vu la quantité de recherche que cela demande, il m'était impossible, en une année, de développer un programme qui lui est comparable. Le seul hic, c'est que ce programme n'est pas réellement prévu pour le genre d'utilisation que l'on souhaite en faire. Par exemple, il utilise des variables statiques pour assigner des identifiants uniques aux noeuds et aux liens de la topologie.
Vous voyez arriver le problème d'ici : si deux personnes demandent une génération en même temps, les identifiants de noeuds et de liens ne seront pas consécutifs...
Alors, voici la question : est-ce qu'il y aurait moyen de résoudre ce problème sans modifier le code de BRITE ? En obligeant tomcat à charger plusieurs fois la classe ou quelque chose dans ce genre ? Si je demande cela, ce n'est pas tellement parce que je suis fainéant mais c'est surtout parce que plus je le modifie, plus il sera difficile de changer de version de BRITE.
Merci d'avance (pour avoir lu jusque ici déjà et pour vos réponses).