Я создал Java-апплет, который зависит от некоторых сторонних либерри, а также от DLL, которая вызывается через JNI. Очевидно, что они не будут установлены на клиентских компьютерах. Есть ли все равно, чтобы упаковать эти сторонние либерри и внешние DLL в JAR Applet, чтобы он мог запускаться любым клиентом с базовой установкой Java?Развертывание Java-апплета с зависимостями сторонних разработчиков
ответ
Использование JNI в веб-приложении - рецепт изжоги, особенно в Windows.
- Вы, очевидно, не можете развернуть DLL в своем WAR-файле, и, возможно, потребуется предварительный запуск отдельного установщика развертывателем.
- Вы должны убедиться, что ваш
java.library.path
настроен правильно, что обычно делается с помощью настроек на сервере приложений, а не с помощью чего-либо, развертываемого в WAR-файле. - Способ, которым JNI связывает родной класс с библиотекой, приведет к головным болям загрузчика класса, если вы попытаетесь запустить более одного экземпляра этого веб-приложения. Один из способов обойти это - переместить содержащий JAR-файл в общий загрузчик классов (например, в общую папку Tomcat), но у этого есть свои собственные сложности.
Есть в любом случае, чтобы упаковать этот третьих партии libriaries
В Eclipse, в свойствах проекта Java (правая кнопка мыши), я могу сделать:
Export... => Export as Runnable JAR
Тогда я скажу, чтобы упаковать мои зависимости jar в экспортированный JAR. Экспортированный JAR будет иметь все свои зависимости, упакованные в него.
alt text http://www.ubuntu-pics.de/bild/97131/selection_016_mg6IDm.png
Это не будет обрабатывать собственные библиотеки, необходимые для поддержки родных классов JNI. –
Никогда не говорил так и не стоил головной боли. Я урезал цитату из ОП, чтобы отразить это. – bakkal
Я не эксперт по этой теме, но являются рабочие решения всех этих проблем. Они могут дать вам головную боль, но некоторые вещи могут быть сделаны только такими способами (и я уверен, что ваша проблема с Entrust CSP является одной из них).
Вы можете посмотреть OpenSign от OpenOCES-project. Магия происходит в org.openoces.opensign.client.applet.bootstrap.
Я также считаю, что JNLPAppletLauncher решает ту же проблему, но у меня нет опыта работы с i.
Спасибо, подумал, что это не стоит головной боли. Выключить, чтобы найти другое решение. –