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