Je suis confronté à ce problème étrange.FileNotFoundException levée lorsque le fichier existe
Je suis en train de lire un fichier qui se trouve dans une autre machine comme une ressource partagée:
\\remote-machine\dir\MyFileHere.txt
Quand je lance une application autonome (un fichier java 16 lignes) tout est très bien. Mais quand j'essaye de lire le même fichier en utilisant la même classe et la même méthode d'un "moteur" de serveur (c'est un moteur d'application, à peu près comme un Java EE Application Server où vous pouvez exécuter des programmes java) "FileNotFoundException" Est lancé.
Je croyais que je serais une sorte d'autorisations, donc je carte la ressource en tant que lecteur: K: \
Réexécutez mon fichier java, lit, très bien.
Redémarrez mon fichier java dans le "moteur" -> FileNotFoundException.
Lorsque je copie le fichier dans la machine locale (C: \ MyFileHere.txt) aucune exception n'est levée.
Question
Ce qui peut être la cause FileNotFoundExcecption?
J'utilise Java 1.5
Pour autant que je sais le moteur à peu près usages Java transparente.
Quelqu'un at-il fait face à quelque chose de similaire?
Question supplémentaire? Quelle serait une bonne approche pour contourner ce problème? Je commence à penser à une installation de Tomcat servant ces fichiers et à les lire via http, mais je pense que c'est trop, c'est pourquoi le protocole SMB est pour en premier lieu n'est-ce pas? Et probablement je ne serai pas capable d'ouvrir les sockets de toute façon.
Est responsable de la sécurité peut être la cause (je ne l'ai jamais utilisé ça avant, mais je sais qu'il existe)
Wound't un SecurityException être jeté à la place si ce serait le cas?
Merci beaucoup.
EDIT
résolu. Merci Steve W.
Il s'avère que ce moteur est lancé avec "LaunchAnywhere" de ZeroG. Ainsi, un .exe est créé qui à son tour exécutera une JVM avec l'application spécifiée.
Cette application elle-même est Launcher. Quand il démarre le moteur, en quelque sorte (je ne peux pas comprendre pourquoi ou comment) l'utilisateur qui possède le processus JVM est SYSTEM. Comme l'a souligné Steve, cet utilisateur n'a pas d'accès au réseau et ne peut donc pas lire à partir d'une ressource partagée ou d'un lecteur mappé.
La solution de contournement (alors que je signale cela au fabricant) consiste à créer un fichier .cmd pour lancer manuellement le moteur. Comme il serait lancé manuellement, l'utilisateur a accès au réseau.
J'ai utilisé "Process Explorer" de SysInternals pour connaître exactement la ligne de commande utilisée pour exécuter l'application du moteur.
QUOI UN MESS!
Merci à ceux qui ont répondu.
1ère: Cela s'applique. 2ndq: n'est pas. 3ème n'est pas un service, mais en regardant attentivement, le lanceur s'exécute en tant qu'utilisateur local, mais ce lanceur (bien) lance l'application moteur dont l'utilisateur est SYSTEM (donc pas autorisé à utiliser le réseau): -/Dois-je voir comment ce lanceur peut démarrer l'application pas comme système? – OscarRyz
Je regarde le "moteur" a été lancé en utilisant LaunchAnywhere (à partir de zerog) Je ne sais pas comment il démarre la nouvelle machine virtuelle en utilisant le système: -/ – OscarRyz
Cette réponse a donné l'indice pour résoudre le problème. Merci beaucoup. – OscarRyz