Question

Je suis confronté à cet étrange problème.

J'essaie de lire un fichier situé sur une autre machine en tant que ressource partagée:

\\remote-machine\dir\MyFileHere.txt

Lorsque je lance une application autonome (un fichier java de 16 lignes), tout va bien. Mais lorsque je tente de lire le même fichier en utilisant la même classe et la même méthode à partir d'un serveur & "; Moteur &"; (C’est un moteur d’application, un peu comme un serveur d’applications Java EE sur lequel vous pouvez exécuter des programmes java), la & "FileNotFoundException &"; est jeté.

Je pensais que je serais une sorte de permission, alors je mappe la ressource en tant que lecteur: K: \

Re-lancez mon fichier java, lit, très bien.

Ré-exécutez mon fichier java dans le " moteur & "; - > FileNotFoundException.

Lorsque je copie le fichier sur la machine locale (C: \ MyFileHere.txt), aucune exception n'est levée.

Question

Quelle peut être la cause de cette FileNotFoundExcecption?

J'utilise Java 1.5

Pour autant que je sache, le moteur utilise java de manière transparente.

Quelqu'un a-t-il affronté quelque chose de similaire?

Question supplémentaire? Quelle serait une bonne approche pour contourner ce problème? Je commence à penser à une installation tomcat servant ces fichiers et à les lire via http, mais je pense que c'est trop, c'est pourquoi le protocole SMB est pour la première place, n'est-ce pas? Et je ne pourrai probablement pas ouvrir les sockets de toute façon.

Le responsable de la sécurité peut-il en être la cause (je ne l’avais jamais utilisé auparavant, mais je sais qu’il existe)

Une exception SecurityException ne serait-elle pas levée si tel était le cas?

Merci beaucoup.

MODIFIER

Résolu. Merci Steve W.

Il s’avère que ce moteur est lancé avec " LaunchAnywhere " de ZeroG. Ainsi, un fichier .exe est créé qui exécutera à son tour une machine virtuelle Java avec l’application spécifiée.

Cette application elle-même s'appelle Launcher. Lorsque le moteur démarre, d’une manière ou d’une autre (je ne peux pas comprendre pourquoi ni comment), l’utilisateur propriétaire du processus JVM est SYSTEM. AS Steve a fait remarquer que cet utilisateur ne dispose pas d'un accès réseau et ne peut donc pas lire à partir d'une ressource partagée ou d'un lecteur mappé.

La solution de contournement (pendant que je le signale 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 &"; à partir de SysInternals pour connaître exactement la ligne de commande utilisée pour exécuter l’application du moteur.

QUEL MESS!

Merci à ceux qui ont posté des réponses.

Était-ce utile?

La solution

La ressource partagée est-elle protégée par un nom d'utilisateur et un mot de passe? Et si oui, votre moteur d'application est-il exécuté en tant que cet utilisateur? Si votre moteur d'application est exécuté en tant que service Windows, le service Windows ne peut pas être exécuté en tant que & "Compte système local &". Ce compte ne peut pas accéder au réseau. Vous devez configurer votre service pour qu'il s'exécute en tant qu'utilisateur disposant des droits d'accès au lecteur partagé.

Autres conseils

Vérifiez que le fichier est VRAIMENT appelé " MyFileHere.txt " et pas " MyFileHere.txt.txt " Si vous cachez l’extension du fichier, c’est une erreur facile à rater

Avez-vous vérifié les journaux des événements sur le serveur pour voir s’ils sont rejetés? il se peut que le programme s'exécute sous un compte d'utilisateur différent de celui que vous pensez.

Je ne connais pas bien Java, mais je sais que certains programmes que j'ai écrits autorisent Network Service à accéder aux ressources.

En fait, je vois que vous avez maintenant coché une réponse comme étant la bonne. oh et c'était la même chose que ma réponse :) Cool!

J'ai eu un problème similaire une fois. Je pense que cela a à voir avec la façon dont java résout les URI des fichiers distants. Essayez ce qui suit et voyez si cela fonctionne:

Fichier: ////remote-machine/dir/MyFileHere.txt

J'ai utilisé l'exemple suivant pour vérifier l'existence d'un fichier dans des dossiers partagés de ma boîte et j'ai travaillé:

public static void main(String[] args) throws URISyntaxException{
    URI uri = new URI(args[0]); //args[0] = File:////remote-machine/dir/MyFileHere.txt
    File f = new File(uri);
    System.out.print(String.format("File %1$s Exists? %2$s", args[0],f.exists()));
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top