Java Web Start и папки

В настоящее время у нас есть приложение Java, которое можно развернуть на клиентах или запустить как ярлык с сервера. Мы периодически получали исключения ClassNotFound при запуске JAR с сервера, что выглядит так, как будто Windows разрывает сетевое соединение с загруженной только частью классов из JAR (пользователь открывает другой экран, тогда проблема очевидна).

В настоящее время я рассматриваю технологию Web Start, позволяющую нам запускать один ярлык.

Однако у приложения есть несколько папок, которые должны находиться в той же папке, в которой запущен JAR (для конфигурации, журналов и т. д.). Эти папки потребуют полного доступа для всех пользователей, чтобы они могли записывать файлы журналов. В иерархии папок конфигурации есть множество файлов конфигурации.

Приложению также требуется доступ к пользовательским настройкам среды (например, к папке пользователя). Также требуются определенные параметры командной строки (в том числе, какую папку использовать для настройки, расположение файла журнала, использование памяти Java и т. д.).

Изменить

Приложение также содержит ссылку на 2 подписанных JAR-файла. Эти:

  • jh.jar
  • mail.jar

Похоже, что они подписаны SUN Microsystems. jh используется для интеграции справки в наше приложение, в то время как почта используется для интеграции с электронной почтой.

Сейчас я загрузил последние версии этих файлов с java2s.com, у которых нет подписанных эквивалентов.

завершить редактирование

Приложение разработано в Netbeans, которое компилирует один JAR-файл и копирует зависимые JAR-файлы в папку dist/lib. Я включил функцию Web Start в Netbeans для приложения, и оно генерирует файл JNLP.

Принимая все во внимание, является ли Web Start подходящим способом для такого приложения? Можно ли включить папки в развертывание Web Start? Я не смог найти ничего для этого в структуре XML для файла JNLP.

Ваше здоровье,

Андез


person Andez    schedule 24.03.2011    source источник
comment
Папки, к которым требуется доступ, на сервере (откуда загружается приложение) или на клиенте (где пользователь запускает приложение)   -  person objects    schedule 24.03.2011
comment
Привет @objects. Извините за задержку. Был хорошо занят в течение последних нескольких месяцев. Журналы находятся на сервере в одном месте. Все пользователи будут входить в эту папку. Наше приложение использует java.util.logging.Logger для ведения журнала.   -  person Andez    schedule 04.05.2011
comment
это может быть проблемой, так как приложение jws работает на клиенте, а не на сервере   -  person objects    schedule 04.05.2011


Ответы (3)


Да, вы можете использовать для этого WebStart.

Разрешение: если вам нужно разрешение на доступ к файловой системе, вы должны подписать свои jar-файлы и поставить all-permissions в файле jnlp.

Аргументы. Аргументы можно указать с помощью элементов arguments в application_desc.

Папки: я не думаю, что вы можете включать папки в приложение WebStart, но вы можете поместить файлы конфигурации в банку и прочитать их оттуда или извлечь их при запуске.

КлассNotFoundError:

Мы периодически получали исключения ClassNotFound при запуске JAR с сервера, что выглядит так, как будто Windows разрывает сетевое соединение с загруженной только частью классов из JAR.

Звучит неправдоподобно для меня. по умолчанию все jar-файлы будут загружены до запуска приложения. Если вы установите для «загрузки» значение «ленивый», банка будет загружена при первой необходимости, но я предполагаю, что тогда она будет загружена полностью.

person Tim Büthe    schedule 24.03.2011
comment
@ Тим Бюте - я продвинулся дальше, чем раньше, Тим, спасибо. Я позволяю Netbeans компилировать приложение. Я добавил параметры командной строки в проект, и netbeans создает JNLP с их включением. Однако, когда я пытаюсь загрузить, выполняя файл JNLP, теперь я получаю другую ошибку, жалующуюся на один из упомянутых файлов JAR - rfax.jar, который находится на java4less.com. com.sun.deploy.net.JARSigningException: не удалось проверить вход в ресурс: файл:/MyApp/dist/lib/rfax.jar Похоже, что rfax.jar имеет ключи NB-JWS-DSA и NB-JWS.SF как и остальные JAR-файлы. - person Andez; 24.03.2011
comment
Теперь я удалил файл rFax.jar из ссылок на мои проекты, поскольку он, похоже, не используется. Я теперь не получаю никаких ошибок при загрузке, однако ничего не происходит - не отображается пользовательский интерфейс. Так что еще немного прогресса. - person Andez; 24.03.2011
comment
Вы должны активировать консоль, чтобы увидеть, возникают ли исключения. Это можно сделать в панели управления Java. - person Tim Büthe; 24.03.2011
comment
Привет Тим. Я сделал это сейчас спасибо. Я решил поместить в приложение новый класс и основной метод, который отображает окно сообщения без запуска обычного пути выполнения приложения. Это показывает мое окно сообщения. - person Andez; 25.03.2011
comment
Теперь я начал копировать статические переменные одну за другой в свой новый класс. Один из них: public static String APP_DATA = System.getenv(APPDATA) + /OurCompanyName; Когда я копирую это в свой новый класс, выдается java.security.AccessControlException: доступ запрещен. Когда я вставляю ‹security›‹all-permissions/›‹/security›, чтобы попытаться решить эту проблему, я получаю исключение com.sun.deploy.net.JARSigningException: найдена неподписанная запись в ресурсе: ‹JAR NAME›. - person Andez; 25.03.2011
comment
После взлома всех моих JAR-файлов, на которые я ссылаюсь, и определения того, какие из них были подписаны, я загрузил неподписанные файлы с java2s.com. Мое приложение теперь работает с веб-запуска до точки его выполнения в моем основном методе - результат !!! - person Andez; 25.03.2011
comment
@Andez Поздравляю с успехом! Не забудьте отметить наиболее подходящий ответ как «правильный». - person Andrew Thompson; 25.03.2011
comment
Наконец-то все заработало до определенной степени. Придется много переписывать способ, которым приложение инициализирует и сохраняет настройки своей папки для ведения журналов/значков/и т. д. Теперь приложение запускается, ведет журнал и показывает изображения, настроенные в другом месте в xml :-) - person Andez; 04.05.2011

Вы можете предоставить ресурсы только для чтения для Java WebStart. Вернуть журнал сложнее. Я бы предложил изучить решение для централизованного ведения журнала, используя один из стандартных приложений в используемой вами структуре журнала.

person Thorbjørn Ravn Andersen    schedule 24.03.2011
comment
мы используем стандартный класс java java.util.logging.Logger для ведения журнала. - person Andez; 04.05.2011

Для приложения Java Web Start всегда рекомендуется не создавать файлы или папки в пути к классу. Рекомендовать домашний каталог пользователя для хранения ваших настроек или файлов базы данных.

person Sunil Manheri    schedule 21.09.2011