Bonjour,
J'ai une question.
J'ai créé un lanceur de programme java en web service.
Un peu d'explication sur les acteurs :
Depuis un navigateur web je dois pouvoir au travers d'une requête http envoyer une commande contenant :
- les liens des classpath pour charger dynamiquement les jars dans le "URLClassLoader",
- ainsi que le Classname (sans doute la method statique "main"),
- un working directory (il est là mon problème)
- éventuellement des arguments
Un service web sur le serveur distant doit pouvoir :
- recevoir la requête
- charger les jars
- trouver le Classname à lancer
- se positionner dans une arborescence de fichier
- faire son traitement
- renvoyer un résultat (Objet, XML, etc... c'est pas important)
Un serveur de fichier
- Ou se trouve tous les Jars à charger selon les besoins (mes programmes).
Un exemple de requête :
http://monserveur:8080/C/dossier/sou...er?cl=jars.txt
si je décompose la requête
- Mon serveur ou se trouve le service web : "monserveur "
- Le Working Directory : C:/dossier/sousdossier
- Mon programme : listerFichier
- Le query vers mes programmes tierces (dans jars.txt se trouve tous les liens vers les programmes)
Résultat attendu :
fichier1.txt
fichier2.txt
...
Ou j'en suis,
Tout fonctionne sauf l'histoire du working directory
Aujourd'hui quand je lance ma requête il liste les fichiers se trouvant à la racine de mon lancer de jar (j'utilise dans le programme la commande Paths.get(".").toAbsolutePath())
J'ai tenté de modifier en utilisant System.setProperty("user.dir", Paths.get("C:/dossier/sousdossier").toAbsolutePath().toString()); à plusieurs endroits dans le lanceur de jar, dans le programme lui même.
mais ça ne fonctionne pas il reste désespérément dans le dossier ou a été lancé le lanceur
Auriez vous une piste ou peut être que ce n'est tout simplement pas possible pour changer dynamiquement ce working directory à chaque requête ?
J'ai simplifié au maximum les exemples en vrai j'ai une centaine de programme que je dois pouvoir lancer, je ne peux pas trop me permettre de modifier les 100 programmes, d'ou l'idée d'utiliser la réflexion.
edit : j'ai oublié de précisé que je ne peux utiliser que des liens relatif c'est pour ça que j'ai besoin d'un working directory.
Je suis ouvert à d'autres idées, comme me passer complètement de la réflexion et utiliser Processbuilder, mais j'aime assez l'idée de pouvoir retourner un objet et non un Stream.
Merci par avance.
ps : j'espère être dans la bonne section![]()
Partager