Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2741 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [JAVA] Variables statiques et tomcat

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JAVA] Variables statiques et tomcat

n°694456
Sigmund
Posté le 07-04-2004 à 10:38:05  profilanswer
 

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à :D et pour vos réponses).

mood
Publicité
Posté le 07-04-2004 à 10:38:05  profilanswer
 

n°694561
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 07-04-2004 à 12:18:24  profilanswer
 

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 ?

n°694570
Sigmund
Posté le 07-04-2004 à 12:39:41  profilanswer
 

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.

n°694571
lorill
Posté le 07-04-2004 à 12:44:02  profilanswer
 

essaye de passer par ton propre classloader. Tu fais un nouveau classloader pour chaque utilisateur, et hop.
 
voir la doc de URLClassLoader

n°694635
Sigmund
Posté le 07-04-2004 à 14:12:30  profilanswer
 

lorill a écrit :

essaye de passer par ton propre classloader. Tu fais un nouveau classloader pour chaque utilisateur, et hop.
 
voir la doc de URLClassLoader


Ok merci, je vais regarder cela d'un peu plus près.

n°694656
benou
Posté le 07-04-2004 à 14:42:32  profilanswer
 

lorill a écrit :

essaye de passer par ton propre classloader. Tu fais un nouveau classloader pour chaque utilisateur, et hop.


[:benou_jap]
 
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 ...


---------------
ma vie, mon oeuvre - HomePlayer
n°694830
Sigmund
Posté le 07-04-2004 à 16:54:20  profilanswer
 

Bon, j'ai essayé URLClassLoader et ça fais bien ce que je veux.  
 
Voilà ce que j'ai :

Code :
  1. import java.net.URLClassLoader;
  2. import java.net.URL;
  3. import java.lang.reflect.*;
  4. public class Main {
  5.     public static void main(String [] args) throws Exception {
  6. URL url = new URL("file://"
  7.     +System.getProperty("user.dir" )
  8.     +"/" );
  9. URL[] urls = {url};
  10. URLClassLoader classLoader = new URLClassLoader(urls, null);
  11. Class nodeClass = classLoader.loadClass("be.ac.ulg.montefiore.run.topgen.Brite.Graph.Node" );
  12. Constructor cons = nodeClass.getConstructors()[0];
  13. Object node = cons.newInstance(null);
  14. Method method = nodeClass.getMethod("getID", null);
  15. System.out.println(method.invoke(node, null));
  16. node = cons.newInstance(null);
  17. System.out.println(method.invoke(node, null));
  18. classLoader = new URLClassLoader(urls, null);
  19. nodeClass = classLoader.loadClass("be.ac.ulg.montefiore.run.topgen.Brite.Graph.Node" );
  20. cons = nodeClass.getConstructors()[0];
  21. node = cons.newInstance(null);
  22. method = nodeClass.getMethod("getID", null);
  23. System.out.println(method.invoke(node, null));
  24. node = cons.newInstance(null);
  25. System.out.println(method.invoke(node, null));
  26.     }
  27. }


 
Avec ça la sortie du programme est :


0
1
0
1


 
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.

n°694833
benou
Posté le 07-04-2004 à 16:57:13  profilanswer
 

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 ...


---------------
ma vie, mon oeuvre - HomePlayer
n°694848
Sigmund
Posté le 07-04-2004 à 17:06:39  profilanswer
 

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...

n°694853
benou
Posté le 07-04-2004 à 17:09:11  profilanswer
 

Sigmund a écrit :


Ouais... donc en gros pour appeler des méthodes sur "tonObjet", je suis obligé de passer par le package java.lang.reflect...


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.


---------------
ma vie, mon oeuvre - HomePlayer
mood
Publicité
Posté le 07-04-2004 à 17:09:11  profilanswer
 

n°694871
Sigmund
Posté le 07-04-2004 à 17:15:34  profilanswer
 

benou 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.


 
Ok, j'ai tout compris (comme quoi tout arrive hein :D ). Merci beaucoup :jap: .

n°694879
benou
Posté le 07-04-2004 à 17:26:37  profilanswer
 

you're welcome :jap:


---------------
ma vie, mon oeuvre - HomePlayer

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [JAVA] Variables statiques et tomcat

 

Sujets relatifs
Installer java 1.4 sous windows[Java] Créer un editeur de texte gérant la coloration syntaxique
Formation Lycos et JavaVoir les pools de Tomcat ?
[PHP] Liste des variables globales.[JAVA] setEnable(false) sur un Panel --> fonctionne pas
Tomcat et les contextes[javax][sql]Connection java/sSql Server
Lib d'encodage MP3 en Java ?[Java] ProgressBar qui progresse pas
Plus de sujets relatifs à : [JAVA] Variables statiques et tomcat


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR