JDK-6688675 : IBM applet is very slow on JRE6 due to repeated JAR file downloads w/ no HTTP header 'last-modified'
  • Type: Bug
  • Component: deploy
  • Sub-Component: deployment_toolkit
  • Affected Version: 6
  • Priority: P2
  • Status: Resolved
  • Resolution: Fixed
  • OS: windows_xp
  • CPU: x86
  • Submitted: 2008-04-15
  • Updated: 2010-07-29
  • Resolved: 2009-07-22
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 6 JDK 7
6u13-revFixed 7 b64Fixed
Related Reports
Relates :  
Relates :  
Relates :  
Description
IBM's Tivoli Storage Manager (TSM) client software is very slow due to 
repeated JAR file downloads when the server does not provide HTTP header 
'last-modified'.
With TSM there is a native client and a web client provided. The web 
client is a Java applet, which consists of only one jar file "dsm.jar". 
This applet is having the problem.


1. behavior
-----------
I used TSM web client Version 5, Release 4, Level 1.0.

1.1  JRE 1.4.2 or JRE 1.5.0
---------------------------
Using the TSM web client on JRE 1.4.2_16 or on 1.5.0_15 shows repeated 
downloads of its jar file of "dsm.jar". For only launching the applet, 
16, resp, 17 attempts were counted, resulting in a message about not 
caching the file each time:

network: Connecting http://<tsm-srv>:1581/dsm.jar with proxy=HTTP @ <proxy-server>:8080
network: Connecting http://<tsm-srv>:1581/dsm.jar with cookie "SUN_ID=<wiped>:52987908580279"
basic: Last modified time and/or expiration value is not available.  Jar file will not be cached. 


1.2  JRE 1.6.0
--------------
On JRE 1.6.0 the file "dsm.jar" is reported to be downloaded 18 times:

network: Connecting http://<tsm-srv>:1581/dsm.jar with proxy=HTTP @ <proxy-server>:8080 

with the following message associated:

network: Cache entry not found [url: http://<tsm-srv>:1581/dsm.jar, version: null] 


1.3  Performance
----------------
 It was measured the time from invoking a GUI function until 
 the GUI fully responded by entirely having popped up the 
 appropriate window.

 The cache was switched off by:
 1.5.0:  Java (TM) Control Panel -> General -> Settings 
  -> View Applets -> Options -> uncheck "Enable Caching"

 1.6.0:  Java Control Panel -> General -> Settings
  uncheck "Keep temporary files on my computer" 


 1.5.0_15  / time [sec]        w/o cache   w/ cache
 Launch of applet               10          20
 File->Connection Information    1           2
 Restore button                  4          20
 1.6.0_06  / time [sec]        w/o cache   w/ cache
 Launch of applet               12         146 (= 2:26 min)
 File->Connection Information    2           7
 Restore button                  3         404 (= 6:44 min)

 So, there is factor 7 (146/20) for only launching the applet, 
 and factor 20 (404/20) for popping up a dialogue window for
 one of the applet's basic functions.


1.4  TSM Web Server
-------------------
1.4.1 HTTP/1.0
--------------
 The TSM Web Server appears to be sending HTTP/1.0:

% telnet <tsm-srv> 1581
Trying [wiped]...
Connected to <tsm-srv>.
Escape character is '^]'.
HEAD / HTTP/1.1

HTTP/1.0 501 Not Implemented
Server: TSM_HTTP/0.1
Content-type: text/html
[ ... ] 

1.4.2 no 'last-modified' header
-------------------------------
% wget -S --server-response http://<tsm-srv>:1581/dsm.jar
--15:23:22--  http://<tsm-srv>:1581/dsm.jar
           => `dsm.jar'
Resolving <proxy-server>... [wiped], [wiped]
Connecting to <proxy-server>|[wiped]|:8080... connected.
Proxy request sent, awaiting response...
  HTTP/1.1 200 OK
  Date: Mon, 14 Apr 2008 13:23:22 GMT
  Content-length: 2102631
  Server: TSM_HTTP/0.1
  Via: 1.0 proxy-proxy
  Proxy-agent: Sun-Java-System-Web-Proxy-Server/4.0
  Connection: close
Length: 2,102,631 (2.0M)

100%[======================================================================>] 2,102,631    355.64K/s    ETA 00:00

15:23:29 (323.94 KB/s) - `dsm.jar' saved [2102631/2102631]

%
1.5 dependency on http proxy server
-----------------------------------
It was not clear from the description so far, that the issue is not only
dependent on the JRE but also on the http proxy server.

I used three different http proxy servers and compared these against the
use of no proxy server. 

I measured TSM applet download time in seconds from URL 
http://10.16.50.171:1581/
depending on JRE and depending on http proxy server.
IE 6 mit Classic Plug-in auf JRE 1.4.2_08
-----------------------------------------
 proxy / time [sec]      cache enabled  cache disabled
 no proxy                 34-34          34-34
 uk                       37-38          35-35
 central                  44-61          41-42
 sfbay                    59-59          45-45


IE 6 mit Classic Plug-in auf JRE 1.5.0_17
-----------------------------------------
 proxy / time [sec]      cache enabled  cache disabled
 no proxy                 35-36          33-36
 uk                       39-40          36-37
 central                  55-55          41-43
 sfbay                    60-63          45-46


IE 6 mit Classic Plug-in auf JRE 1.6.0_07
-----------------------------------------
 proxy / time [sec]      cache enabled  cache disabled
 no proxy                 38-40          33-35
 uk                       61-65          36-36
 uk                       61-62          36-36
 central                 186-187         42-42
 sfbay                   214-215         45-45


 We can see the following:
 - The use of a http proxy server has an effect on start-up time regardless 
   if cache was enabled or not.
 - The effect is more visible when cache is enabled compared to cache 
   disabled.
 - The effect of use of a http proxy server is very prominent, when using 
   JRE 1.6 and having cache enabled.

Comments
EVALUATION The fix for this (uncverified) was delivered into JDK7 b64 as part of: 6797688: Umbrella: Merge all JDK 6u4 - 6u12 deployment code into JDK7
22-07-2009

EVALUATION When porting this fix to JDK 7, the fix for 6842992 must be ported due to the original fix of this creates a regression 6842992.
20-05-2009

WORK AROUND - Switch off the Java deployment cache for running this applet. - Don't use JRE 6.
15-04-2008