Я столкнулся с этой странной проблемой.
Я пытаюсь прочитать файл, который находится на другом компьютере, как общий ресурс:
\\remote-machine\dir\MyFileHere.txt
Когда я запускаю отдельное приложение (16-строчный java-файл), все в порядке. Но когда я пытаюсь прочитать тот же файл с использованием того же класса и того же метода из серверного «движка» (это механизм приложения, очень похожий на сервер приложений Java EE, где вы можете запускать java-программы), «FileNotFoundException» бросается.
Я думал, что будут какие-то разрешения, поэтому я сопоставляю ресурс как диск: K:\
Перезапустите мой java-файл, читает, хорошо.
Перезапустите мой java-файл внутри «движка» -> FileNotFoundException.
Когда я копирую файл на локальный компьютер ( C:\MyFileHere.txt ), никаких исключений не возникает.
Вопрос
Что может быть причиной этого FileNotFoundException?
Я использую Java 1.5
Насколько я знаю, движок в значительной степени прозрачно использует java.
Кто-нибудь сталкивался с чем-то подобным?
Дополнительный вопрос? Что было бы хорошим подходом для обхода этого? Я начинаю думать об установке Tomcat, обслуживающей эти файлы и читающей их через http, но я думаю, что это слишком, поэтому протокол SMB стоит на первом месте, не так ли? И, вероятно, я все равно не смогу открывать сокеты.
Может ли быть причиной диспетчер безопасности (я никогда не использовал его раньше, но я знаю, что он существует)
Разве вместо этого не будет выброшено исключение SecurityException, если это будет так?
Большое спасибо.
ИЗМЕНИТЬ
Решено. Спасибо, Стив В.
Оказывается, этот движок запускается с помощью «LaunchAnywhere» от ZeroG. Итак, создается .exe, который, в свою очередь, запускает JVM с указанным приложением.
Это приложение само по себе является Launcher. Когда он запускает двигатель, каким-то образом (я не могу понять, почему и как) пользователь, которому принадлежит процесс JVM, является SYSTEM. КАК указал Стив, у этого пользователя нет доступа к СЕТИ, и поэтому он не может читать из общего ресурса или подключенного диска.
Обходной путь (пока я сообщаю об этом производителю) заключается в создании файла .cmd для запуска движка вручную. Поскольку он будет запускаться вручную, пользователь имеет доступ к сети.
Я использовал «Проводник процессов» от SysInternals, чтобы точно знать командную строку, используемую для запуска приложения движка.
КАКАЯ МАССА!
Спасибо тем, кто разместил ответы.