Applet Java Web Implementar con Third Party Dependencias
-
02-10-2019 - |
Pregunta
He hecho un applet de Java que depende de algunos libriaries de terceros, así como un archivo DLL que se llama a través de JNI. Estos serán, obviamente, no pueden instalar en equipos clientes. ¿Hay alguna forma de empaquetar estos libriaries de terceros y archivos DLL externa dentro de mi JAR del applet para que pueda ser ejecutado por cualquier cliente con una base de instalación de Java?
Solución
El uso de JNI dentro de una aplicación web es una receta para la acidez estomacal, especialmente en Windows.
- Usted, evidentemente, no puede implementar la DLL dentro de su archivo WAR y probablemente requerirá un instalador independiente llevará a cabo por el programa de implementación de antemano.
- Usted tendrá que asegurarse de que su
java.library.path
está configurado correctamente, que normalmente se realiza por la configuración en el servidor de aplicaciones en lugar de algo de despliegue en el archivo WAR. - La forma en que JNI une la clase nativa con la biblioteca va a causar dolores de cabeza cargador de clases si se intenta ejecutar más de una instancia de esa aplicación web. Una forma de evitar esto es para mover el archivo JAR que contiene en un cargador de clase compartida (como carpeta común de Tomcat), pero que tiene sus propias complicaciones.
Otros consejos
¿Hay alguna forma de empaquetar estos tercera libriaries partido
En Eclipse, bajo las propiedades del proyecto de Java (clic derecho), lo puede hacer a:
Export... => Export as Runnable JAR
A continuación, le digo que empacar mis dependencias jar en dicho JAR exportado. El JAR exportado tendrá todas sus dependencias embalados en él.
alt text http://www.ubuntu-pics.de/bild /97131/selection_016_mg6IDm.png
No soy experto en el tema, pero hay son soluciones a todos estos problemas de trabajo. Puede ser que le dará un dolor de cabeza, pero algunas cosas sólo pueden hacerse de esta manera (y estoy bastante seguro de que su problema con el Entrust CSP es uno de esos).
Se puede echar un vistazo a OpenSign de la OpenOCES-proyecto . La magia sucede en org.openoces.opensign.client.applet.bootstrap.
también creo que JNLPAppletLauncher resuelve el mismo problema, pero no tengo ninguna experiencia con i.