Bonjour,
Voici le contexte :
J'ai une application JAVA distribuée. Tous les noeuds font tourner le meme code, mais avec des propriétés différentes lues dans des fichiers de config et/ou dans l'environnement.
Ce n'est pas moi qui ai développé le programme malheureusement mais j'en ai toutes les sources.
Ce programme utilise de manière intensive des objets "globaux" (soit par le biais de singletons, soit via l'utilisation directe de variables/méthodes statiques).
J'ai un deuxième programme (là encore que je n'ai pas réalisé moi-meme), qui est un simulateur pour lequel je dois créer l'interface vers la première application.
Ce simulateur doit lancer un certain nombre de noeuds et réaliser des mesures. Chacun des noeuds est lancé dans un thread différent et est supposé faire tourner l'application principale.
Mon problème est que chacun de ces noeuds doit etre totalement isolé des autres : ils ne doivent surtout pas partager les memes instances et ainsi avoir des propriétés statiques différentes pour chaque noeud (mais toujours globales pour tous les threads et objets d'un meme noeud).
Le code étant le meme, je ne peux pas simplement faire :
car sinon chaque noeud partagerait les memes instances...
Code JAVA : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public void run() { MonApplication.main(args); }
Après maintes recherches, j'en suis arrivé à la conclusion que ma seule option serait d'utiliser différents ClassLoader mais j'avoue que je vois mal comment m'en servir...
Est-ce que la méthode "Thread#setContextClassLoader()" est ce qu'il me faut et si oui quel ClassLoader dois-je lui passer. Me garantit-elle également que tout le code de mon application tournant sur ce noeud va utiliser ce ClassLoader, meme pour les threads fils ?
Cordialement,
Jordan
Partager