2010-04-22 31 views
8

Tengo un problema con un applet de Java que he implementado que se niega a ser almacenado en caché en el caché "adherente" del jvm (o en el navegador). Por algún motivo, cada vez que un usuario carga la página en la que se encuentra este applet, el jvm vuelve a descargar el archivo jar del servidor, lo que provoca un gran retraso.Java Applet no en caché

La página web que contiene el applet se está accediendo a través de Internet, por lo que de acuerdo a Sun's Java applet documentation estoy usando una etiqueta de <applet> en lugar de una etiqueta o <object><embed>.

Cualquier ayuda de depuración o identificación del problema sería muy apreciada.

A continuación se muestra la etiqueta applet completa que estoy usando:

<applet alt="Scanning Applet failed to load" archive="scanning.jar" 
     code="scanning.scanlet.class" codebase="/java/" codetype="application/java" 
     height="30" mayscript="True" name="scanlet" width="200"> 
    <param name="domain" value="192.168.12.23" /> 
    <param name="publishName" value="scan_attachment" /> 
    <param name="publishURL" value="http://192.168.12.23/draft/update/52" /> 
    <param name="curURL" value="http://192.168.12.23/draft/edit/52" /> 

Your browser is unable to process the Java &lt;APPLET&gt; tag needed to display this applet 
<br /> 
One solution would be to download a better web browser like 
<a href="http://www.mozilla.com/firefox">Mozilla's Firefox</a> 

</applet> 
+0

He habilitado el registro y el seguimiento a través del Panel de control de Java-> Avanzado-> Depuración y recibo muchas iteraciones del siguiente mensaje: red: No se encontró la entrada del caché [url: http : //192.168.12.23/java/scanning.jar, version: 1.0] –

+0

Pregunta general de StackOverflow: ¿no hay forma de formatear los "Comentarios" tan bien como la pregunta inicial? –

Respuesta

1

Este artículo oficial describe cómo puede cambiar la etiqueta APPLET para aumentar el almacenamiento en caché:

http://java.sun.com/products/plugin/1.3/docs/appletcaching.html

+0

Jon, gracias por la respuesta rápida, lamentablemente he estado arriba y abajo de ese documento oficial. De acuerdo con esto, dado que solo estaba usando el atributo de archivo, debería haber estado obteniendo algún tipo de almacenamiento en caché de segundo plano incluso sin los nuevos atributos cache_ *, ¿no? –

+0

En cualquier caso, después de agregar los atributos cache_ * a mi etiqueta de applet de la siguiente manera, el applet sigue negándose a ser almacenado en caché por el jvm: ... mismos params, etc.

+0

Bueno, este "caché de nivel de navegador de reserva" todavía lo realiza la JVM y generalmente es el problema. – ArtemGr

2

Personalmente resolvió el problemas de almacenamiento en caché utilizando los parámetros cache_archive y cache_version docummented en http://java.sun.com/javase/6/docs/technotes/guides/plugin/developer_guide/applet_caching.html

Mi ca che_version se basa en la fecha de modificación del archivo real, p.

val archive = libs.map("/" + _.getPath).mkString (", ") 
val version = libs.map(_.getUpdated/1000/20 - 59281420).mkString (", ") 

y trabajar con MSIE parece como:

if (msie) { 
    cms write <OBJECT 
    classid="clsid:CAFEEFAC-0016-0000-0000-ABCDEFFEDCBA" 
    codebase="http://java.sun.com/update/1.6.0/jinstall-6-windows-i586.cab" 
    width="100%" height="100%"> 
    ... 
    <PARAM name="cache_archive" value={archive}/> 
    <PARAM name="cache_version" value={version}/> 
    </OBJECT> 
} else { 
    cms write <applet ... 
    cache_archive={archive} cache_version={version}></applet> 
} 
+0

ArtemGr, thx para la respuesta detallada. Todos nuestros usuarios acceden al sitio a través de Firefox, por lo que no pueden usar . He intentado cambiar mi etiqueta de applet para incluir los atributos cache_ * (_archive, _option, & _version), pero el applet aún se vuelve a descargar cada vez que vuelvo a la página en cuestión. Aquí está mi etiqueta Applet modificada: < applet cache_archive = "scanning.jar" cache_option = "Plugin" cache_version = "1.0" code = "scanning.scanlet.class" codebase = "/ java /" codetype = "application/java" height = "30" mayscript = "Verdadero "name =" scanlet "Width =" 200" > ... mismos parametros, etc .. –

+0

lo hace sólo ocurre a usted o qué sucede a todos (algunos de) los usuarios de la página web? Si el primero, ¿podría ser que el complemento de Java en su computadora no pueda almacenar en caché el archivo por alguna razón? En Windows, el complemento de Java tiene una opción para almacenar en caché el caché del navegador, en cuyo caso pueden aplicarse las limitaciones de caché del navegador (puede ver lo que se almacena en caché a través del panel de control, por cierto); en UNIX ~/.java/deployment/folder se usa para el almacenamiento en caché, ~/.java/debe poder escribirse, etc. – ArtemGr

+0

Le sucede a todos los que usan el sitio: [. En las máquinas con Windows, he buscado a través del Panel de control de Java y solo las configuraciones de "caché" que puedo encontrar están en Archivos de Internet temporales-> Configuración. Esos ajustes todos parecían buenos sin embargo. También busqué en Archivos de Internet temporales-> Ver para verificar que el archivo .jar en cuestión no está presente en la memoria caché: [ –

4

que tenía el mismo problema y encontré un truco que necesita ser aplicado lado del servidor. Parece que los jar no se almacenan en caché si su tipo de mime es incorrecto. Verifique la respuesta de su servidor utilizando el tipo de aplicación/java-archive mime.

Otro problema que encontré está relacionado con un contenedor específico. Mi parámetro de archivo enumeraba muchos archivos jar, pero solo unos pocos se almacenaban en caché. Encontré que todas las jarras hasta una específica en caché, todas las jarras restantes no estaban en la memoria caché en absoluto. Mientras cargaba el applet, presioné "5" en su consola java y encontré este mensaje justo después del último archivo caché: caché: falta la entrada firmada del contenedor. Todavía no sé cuál es el problema con este archivo, pero moví ese contenedor al final de la lista de parámetros de archivo. Esto "solucionó" el problema.

1

Para mí tuve que quitar los archivos JAR de la variable de fichero y sólo tiene en el parámetro cache_archive, y especificar las versiones de esa manera no se llevan a cuestas al servidor para su última fecha de modificación

fijo en firefox para mí

Cuestiones relacionadas