Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > jws, jar-исполняемый и jar-ресурс


Автор: Metal_Heart 4.10.2007, 11:00
Здравствуйте, многоуважаемые!
У меня есть такая задачка:
 есть zip-архив (переименованный в hex.jar) в котором хранится набор hex-файлов;
 сделал исполняемый Downloader.jar-файлик, суть которого - достать из hex.jar требуемый файл и загрузить его в контроллер.

 Этот комплект требуется установить нескольким пользователям с возможностью автоматического обновления, именно поэтому я решил воспользоваться технологией "Jаvа Wеb Start"

 Всё благополучно было отлажено локально, подписанные JAR-файлы с JNLP-файлом выложены на сервер

Код

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http://myserver/" href="Downloader.jnlp">
  <information>
    <title>Downloader</title>
    <vendor>Metal_Heart</vendor>
    <homepage href="index.html" />
    <description>Downloader</description>
    <offline-allowed/>
  </information>
<security>
<all-permissions/>

</security>
 <resources>
    <j2se version="6+" />
    <jar href="hex.jar"/>
    <jar href="Downloader.jar" main="true"/>
 </resources>
  <application-desc main-class="main" />
</jnlp>


вот здесь и появились проблемы, что Downloader.jar перестал видеть hex.jar
Покопавшись, я обнаружил, что при скачивании с сервера в кэш клиента у jar-файлов изменяется название, т.е. получается что-то вроде:
ffb5f29-69950ff3 - это и есть hex.jar
ffb5f29-7152e56e - это и есть Downloader.jar
ffb5f29-7152e56e.idx - это вероятно, какой-то вспомогательный файлик

Вопрос, что делать и как быть?
Мне видятся следующие пути выхода:
- упаковать всё в один jar-файл (не желательно, так как противоречит идеологии: пирожки - отдельно, котят - отдельно);
- пройтись по кэшу пользователя на наличие в кэш-файле какого-нибудь известного файла, например, манифеста;
- что-то ещё...

Отказываться от JWS - не приемлимо!


Автор: fixxer 4.10.2007, 11:12
А у Вас в hex.jar захардкожен?

Автор: Metal_Heart 4.10.2007, 11:38
Цитата(fixxer @  4.10.2007,  11:12 Найти цитируемый пост)
А у Вас в hex.jar захардкожен? 

чаво?  smile 

У Нас smile hex.jar имеет следующую структуру:
Код

- каталогAAA
-- aa1.hex
-- aa2.hex
- каталогBBB
-- bb1.hex
-- bb2.hex

... и т.д.



Автор: fixxer 4.10.2007, 11:46
Нет, я имею ввиду есть ли у Вас в каком-либо классе Downloader.jar явные сслыки на hex.jar, или только в манифесте?

Короче, покажите кусок кода, где Вы с hex.jar работаете.

Автор: Metal_Heart 4.10.2007, 11:56
ок, есть только одна ссылка:
Код

ZipFile file = new ZipFile("hex.jar");

Автор: fixxer 4.10.2007, 12:08
Ну вот в этом и дело. А зачем работать с jar'ом как с ZipFile, если можно его просто в classpath положить и просто ссылаться на файлики как на ресурсы? (getResource(...)) ?

Автор: Metal_Heart 4.10.2007, 12:37
fixxer, слушай, а я даже и не подумал о такой возможности, надо попробовать...

Автор: Metal_Heart 4.10.2007, 13:21
Вижу некоторую трудность при таком подходе:
Цитата(fixxer @  4.10.2007,  12:08 Найти цитируемый пост)
А зачем работать с jar'ом как с ZipFile, если можно его просто в classpath положить и просто ссылаться на файлики как на ресурсы? (getResource(...)) ? 

мне известен только формат содержимого архива, т.е. вчера было:
Код

- каталогAAA
-- aa1.hex

а сегодня может быть такой:
Код

- каталогBBB
-- bb1.hex
-- bb2.hex
-- bb3.hex


Другими словами: "что же находится в архиве" - мне не известно.
Перед вызовом getResourceAsStream(...) мне бы получить содержимое этого архива.
Это можно сделать, добавив в архив при его создании, например, текстовый файл с описанием содержимого.

Есть ли ещё варианты/предложения?

Автор: AlexeyVorotnikov 4.10.2007, 15:30
Можно попробовать положить hex.jar внутрь Downloader.jar. Тогда его можно будет достать через getResourceAsStream(...).

Автор: Metal_Heart 4.10.2007, 16:29
Цитата(Metal_Heart @  4.10.2007,  11:00 Найти цитируемый пост)
- упаковать всё в один jar-файл (не желательно, так как противоречит идеологии: пирожки - отдельно, котят - отдельно);


Автор: jaspeen 4.10.2007, 21:13
А какой вообще смысл таскать этот hex.jar с помощью JWS?
Почему бы то же самое этим Downloader'ром не подгрузить самому например через ftp, http или исчо как...
И вообще даже не архив грузить а сами файлики.

Автор: Metal_Heart 5.10.2007, 11:30
jaspeen, а зачем изобретать велосипед, когда технология АВТОМАТИЧЕСКОГО обновления уже написана и отлажена самой Sun Microsistems?
Сечёшь?

В общем, других предложений не поступило, остановился на таком варианте:
Цитата(Metal_Heart @  4.10.2007,  13:21 Найти цитируемый пост)
Другими словами: "что же находится в архиве" - мне не известно.
Перед вызовом getResourceAsStream(...) мне бы получить содержимое этого архива.
Это можно сделать, добавив в архив при его создании, например, текстовый файл с описанием содержимого.


Спасибо за внимание!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)