Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-7184280

Applets from a local http server don't load with Windows 7 64 bits and JRE 1.7

    Details

    • Subcomponent:
    • CPU:
      x86
    • OS:
      windows_7

      Description

      FULL PRODUCT VERSION :
      All JRE 1.7 (from JRE 1.7.0_01 to JRE 1.7.0_05)

      ADDITIONAL OS VERSION INFORMATION :
      Microsoft Windows [version 6.1.7600]
      Windows 7 64 bits


      EXTRA RELEVANT SYSTEM CONFIGURATION :
      All JRE 1.7 (from JRE 1.7.0_01 to JRE 1.7.0_05)
        Tomcat 6.0.32 (I also tried with Apache and Glassfish)
      Local network


      A DESCRIPTION OF THE PROBLEM :
      In Windows 7 64 bits, with a JRE 1.7, from any browser (Firefox, Internet Explorer 9 at 32 and at 64 bit, Chrome), when we try to run an applet hosted on an http server on a local network,
       the download of jars starts, but never ends. Via the internet it downloads but not via a local network.
      For exemple, we tried the applet at "http://java.com/en/download/testjava.jsp", it works. But when we put this applet (TestVM2-test.jar) on a Tomcat under a local network, the applet doesn't load.

      I spent some time on this issue and found the following :
      The problem is the communication with IPv6 : if we add the parameter "-Djava.net.preferIPv4Stack=true" to the JRE, the applets do load.
      I think that in Windows 7 64 bits :
       - with JRE 1.6, the communication is in IPv4,
       - with JRE 1.7, via the internet, the communication is in IPv4,
       - but with JRE 1.7, in a local network the communication is in IPv6 and there is a problem in the java code of the JRE which makes that in this case the applets don't load.
      I searched in the java code of rt.jar and found the following :
      In the class java.net.PlainSocketImpl, the parameter preferIPv4Stack is read and if it is true, we use a java.net.TwoStacksPlainSocketImpl object,
       but if it is false we use a java.net.DualStackPlainSocketImpl that handles both IPv4 and IPV6 through a single file descriptor.
      May be the problem is here ?

      REGRESSION. Last worked in version 6u31

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Windows 7 64 bits, JRE 1.7.x
      Take any applet (for exemple the applet that is on http://java.com/en/download/testjava.jsp) and put it on a Tomcat or Apache on your machine with an html page to acces it.
      Open IE 9 and acces the html page (exemple http://localhost/TestJava/), your applet won't load.

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      The applet should load and display in IE.
      ACTUAL -
      The applet does not load.

      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      Here is the trace in the java console :

      Plug-in Java 10.4.0.22
      Utilisation de la version JRE 1.7.0_04-b22 Java HotSpot(TM) Client VM
      Répertoire d'origine de l'utilisateur = C:\Users\mounir
      ----------------------------------------------------
      c: effacer la fenêtre de la console
      f: finaliser les objets de la file d'attente de finalisation
      g: nettoyer la mémoire
      h: afficher ce message d'aide
      l: vider la liste des chargeurs de classes
      m: imprimer le relevé d'utilisation de la mémoire
      o: déclencher la journalisation
      q: masquer la console
      r: recharger la configuration des règles
      s: vider les propriétés système et de déploiement
      t: vider la liste des threads
      v: vider la pile des threads
      x: effacer le cache de chargeurs de classes
      0-5: fixer le niveau de trace à <n>
      ----------------------------------------------------
      security: property package.access value sun.,com.sun.xml.internal.ws.,com.sun.xml.internal.bind.,com.sun.imageio.,com.sun.org.apache.xerces.internal.utils.,com.sun.org.apache.xalan.internal.utils.
      security: property package.access new value sun.,com.sun.xml.internal.ws.,com.sun.xml.internal.bind.,com.sun.imageio.,com.sun.org.apache.xerces.internal.utils.,com.sun.org.apache.xalan.internal.utils.,com.sun.javaws
      security: property package.access value sun.,com.sun.xml.internal.ws.,com.sun.xml.internal.bind.,com.sun.imageio.,com.sun.org.apache.xerces.internal.utils.,com.sun.org.apache.xalan.internal.utils.,com.sun.javaws
      security: property package.access new value sun.,com.sun.xml.internal.ws.,com.sun.xml.internal.bind.,com.sun.imageio.,com.sun.org.apache.xerces.internal.utils.,com.sun.org.apache.xalan.internal.utils.,com.sun.javaws,com.sun.deploy
      security: property package.access value sun.,com.sun.xml.internal.ws.,com.sun.xml.internal.bind.,com.sun.imageio.,com.sun.org.apache.xerces.internal.utils.,com.sun.org.apache.xalan.internal.utils.,com.sun.javaws,com.sun.deploy
      security: property package.access new value sun.,com.sun.xml.internal.ws.,com.sun.xml.internal.bind.,com.sun.imageio.,com.sun.org.apache.xerces.internal.utils.,com.sun.org.apache.xalan.internal.utils.,com.sun.javaws,com.sun.deploy,com.sun.jnlp
      security: property package.definition value null
      security: property package.definition new value com.sun.javaws
      security: property package.definition value com.sun.javaws
      security: property package.definition new value com.sun.javaws,com.sun.deploy
      security: property package.definition value com.sun.javaws,com.sun.deploy
      security: property package.definition new value com.sun.javaws,com.sun.deploy,com.sun.jnlp
      security: property package.access value sun.,com.sun.xml.internal.ws.,com.sun.xml.internal.bind.,com.sun.imageio.,com.sun.org.apache.xerces.internal.utils.,com.sun.org.apache.xalan.internal.utils.,com.sun.javaws,com.sun.deploy,com.sun.jnlp
      security: property package.access new value sun.,com.sun.xml.internal.ws.,com.sun.xml.internal.bind.,com.sun.imageio.,com.sun.org.apache.xerces.internal.utils.,com.sun.org.apache.xalan.internal.utils.,com.sun.javaws,com.sun.deploy,com.sun.jnlp,org.mozilla.jss
      security: property package.definition value com.sun.javaws,com.sun.deploy,com.sun.jnlp
      security: property package.definition new value com.sun.javaws,com.sun.deploy,com.sun.jnlp,org.mozilla.jss
      preloader: Construct preloader delegate
      preloader: Setting default preloader and progress monitor for non JNLP applets
      basic: Processus d'écoute de progression ajouté : sun.plugin.util.ProgressMonitorAdapter@1176e5c
      preloader: Installing progress monitor true
      preloader: Using preloader class: null com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter@1a1472d
      preloader: Using default preloader
      preloader: Requested to use preloader class: null
      basic: Plugin2ClassLoader.addURL parent called for http://192.168.0.185/TestJava/applet/TestVM2-test.jar
      preloader: Skipped all (0) download events prior to null
      preloader: GrayBox: parent = sun.plugin2.main.client.PluginEmbeddedFrame[frame0,0,0,500x335,layout=java.awt.BorderLayout,title=,resizable,normal]
      preloader: Delivering: AppletInitEvent[type=CallConstructor]
      preloader: Start progressCheck thread
      network: Entrée de cache introuvable [URL : http://192.168.0.185/TestJava/applet/TestVM2-test.jar, version : null]
      network: Connexion de http://192.168.0.185/TestJava/applet/TestVM2-test.jar avec proxy=DIRECT
      network: Connexion de http://192.168.0.185:80/ avec proxy=DIRECT
      preloader: Stop progressCheck thread

      And after a while :
      java.net.SocketException: Connection reset
      at java.net.SocketInputStream.read(Unknown Source)
      at java.net.SocketInputStream.read(Unknown Source)
      at java.io.BufferedInputStream.fill(Unknown Source)
      at java.io.BufferedInputStream.read1(Unknown Source)
      at java.io.BufferedInputStream.read(Unknown Source)
      at sun.net.www.MeteredStream.read(Unknown Source)
      at java.io.FilterInputStream.read(Unknown Source)
      at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(Unknown Source)
      at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(Unknown Source)
      at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(Unknown Source)
      at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.close(Unknown Source)
      at java.io.BufferedInputStream.close(Unknown Source)
      at sun.plugin.PluginURLJarFileCallBack.downloadJAR(Unknown Source)
      at sun.plugin.PluginURLJarFileCallBack.access$000(Unknown Source)
      at sun.plugin.PluginURLJarFileCallBack$1.run(Unknown Source)
      at java.security.AccessController.doPrivileged(Native Method)
      at sun.plugin.PluginURLJarFileCallBack.retrieve(Unknown Source)
      at sun.net.www.protocol.jar.URLJarFile.retrieve(Unknown Source)
      at sun.net.www.protocol.jar.URLJarFile.getJarFile(Unknown Source)
      at sun.net.www.protocol.jar.JarFileFactory.get(Unknown Source)
      at sun.net.www.protocol.jar.JarURLConnection.connect(Unknown Source)
      at sun.plugin.net.protocol.jar.CachedJarURLConnection.connect(Unknown Source)
      at sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFileInternal(Unknown Source)
      at sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFile(Unknown Source)
      at com.sun.deploy.security.DeployURLClassPath$JarLoader.getJarFile(Unknown Source)
      at com.sun.deploy.security.DeployURLClassPath$JarLoader.access$1000(Unknown Source)
      at com.sun.deploy.security.DeployURLClassPath$JarLoader$1.run(Unknown Source)
      at java.security.AccessController.doPrivileged(Native Method)
      at com.sun.deploy.security.DeployURLClassPath$JarLoader.ensureOpen(Unknown Source)
      at com.sun.deploy.security.DeployURLClassPath$JarLoader.<init>(Unknown Source)
      at com.sun.deploy.security.DeployURLClassPath$3.run(Unknown Source)
      at java.security.AccessController.doPrivileged(Native Method)
      at com.sun.deploy.security.DeployURLClassPath.getLoader(Unknown Source)
      at com.sun.deploy.security.DeployURLClassPath.getLoader(Unknown Source)
      at com.sun.deploy.security.DeployURLClassPath.getResource(Unknown Source)
      at sun.plugin2.applet.Plugin2ClassLoader$2.run(Unknown Source)
      at java.security.AccessController.doPrivileged(Native Method)
      at sun.plugin2.applet.Plugin2ClassLoader.findClassHelper(Unknown Source)
      at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
      at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source)
      at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
      at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
      at java.lang.ClassLoader.loadClass(Unknown Source)
      at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
      at sun.plugin2.applet.Plugin2Manager.initAppletAdapter(Unknown Source)
      at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
      at java.lang.Thread.run(Unknown Source)
      network: Entrée de cache introuvable [URL : http://localhost/TestJava/applet/TestVM2-test.jar, version : null]
      network: Connexion de http://localhost/TestJava/applet/TestVM2-test.jar avec proxy=DIRECT
      network: Connexion de http://localhost:80/ avec proxy=DIRECT

      Then a message box with an exception :
      java.lang.ClassNotFoundException: testJava2_1.TestVMApplet
      at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
      at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source)
      at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
      at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
      at java.lang.ClassLoader.loadClass(Unknown Source)
      at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
      at sun.plugin2.applet.Plugin2Manager.initAppletAdapter(Unknown Source)
      at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
      at java.lang.Thread.run(Unknown Source)

      I made a full thread dump and here is where the applet download blocks :

      "thread applet-testJava2_1/TestVMApplet-1" prio=4 tid=0x06810800 nid=0x19f8 runnable [0x0805d000]
         java.lang.Thread.State: RUNNABLE
      at java.net.SocketInputStream.socketRead0(Native Method)
      at java.net.SocketInputStream.read(Unknown Source)
      at java.net.SocketInputStream.read(Unknown Source)
      at java.io.BufferedInputStream.read1(Unknown Source)
      at java.io.BufferedInputStream.read(Unknown Source)
      - locked <0x29b8dd60> (a java.io.BufferedInputStream)
      at sun.net.www.MeteredStream.read(Unknown Source)
      - locked <0x29b8dd80> (a sun.net.www.http.KeepAliveStream)
      at java.io.FilterInputStream.read(Unknown Source)
      at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(Unknown Source)
      at java.io.BufferedInputStream.read1(Unknown Source)
      at java.io.BufferedInputStream.read(Unknown Source)
      - locked <0x29b8dde0> (a java.io.BufferedInputStream)
      at java.io.FilterInputStream.read(Unknown Source)
      at sun.plugin.PluginURLJarFileCallBack.downloadJAR(Unknown Source)
      at sun.plugin.PluginURLJarFileCallBack.access$000(Unknown Source)
      at sun.plugin.PluginURLJarFileCallBack$1.run(Unknown Source)
      at java.security.AccessController.doPrivileged(Native Method)
      at sun.plugin.PluginURLJarFileCallBack.retrieve(Unknown Source)
      at sun.net.www.protocol.jar.URLJarFile.retrieve(Unknown Source)
      at sun.net.www.protocol.jar.URLJarFile.getJarFile(Unknown Source)
      at sun.net.www.protocol.jar.JarFileFactory.get(Unknown Source)
      at sun.net.www.protocol.jar.JarURLConnection.connect(Unknown Source)
      at sun.plugin.net.protocol.jar.CachedJarURLConnection.connect(Unknown Source)
      at sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFileInternal(Unknown Source)
      - locked <0x29b8df48> (a sun.plugin.net.protocol.jar.CachedJarURLConnection)
      at sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFile(Unknown Source)
      - locked <0x29b8df48> (a sun.plugin.net.protocol.jar.CachedJarURLConnection)
      at com.sun.deploy.security.DeployURLClassPath$JarLoader.getJarFile(Unknown Source)
      at com.sun.deploy.security.DeployURLClassPath$JarLoader.access$1000(Unknown Source)
      at com.sun.deploy.security.DeployURLClassPath$JarLoader$1.run(Unknown Source)
      at java.security.AccessController.doPrivileged(Native Method)
      at com.sun.deploy.security.DeployURLClassPath$JarLoader.ensureOpen(Unknown Source)
      at com.sun.deploy.security.DeployURLClassPath$JarLoader.<init>(Unknown Source)
      at com.sun.deploy.security.DeployURLClassPath$3.run(Unknown Source)
      at java.security.AccessController.doPrivileged(Native Method)
      at com.sun.deploy.security.DeployURLClassPath.getLoader(Unknown Source)
      at com.sun.deploy.security.DeployURLClassPath.getLoader(Unknown Source)
      - locked <0x29a35830> (a com.sun.deploy.security.DeployURLClassPath)
      at com.sun.deploy.security.DeployURLClassPath.getResource(Unknown Source)
      at sun.plugin2.applet.Plugin2ClassLoader$2.run(Unknown Source)
      at java.security.AccessController.doPrivileged(Native Method)
      at sun.plugin2.applet.Plugin2ClassLoader.findClassHelper(Unknown Source)
      at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
      at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source)
      at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
      - locked <0x29a35870> (a sun.plugin2.applet.Applet2ClassLoader)
      at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source)
      at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
      - locked <0x29a35910> (a sun.plugin2.applet.Applet2ClassLoader)
      at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
      - locked <0x29a35910> (a sun.plugin2.applet.Applet2ClassLoader)
      at java.lang.ClassLoader.loadClass(Unknown Source)
      at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
      at sun.plugin2.applet.Plugin2Manager.initAppletAdapter(Unknown Source)
      at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
      at java.lang.Thread.run(Unknown Source)


      REPRODUCIBILITY :
      This bug can be reproduced always.

      CUSTOMER SUBMITTED WORKAROUND :
      If we add the parameter "-Djava.net.preferIPv4Stack=true" to the JRE, the applets do load.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                Unassigned
                Reporter:
                webbuggrp Webbug Group
              • Votes:
                0 Vote for this issue
                Watchers:
                0 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved:
                  Imported:
                  Indexed: