activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Calvin Moody (JIRA)" <>
Subject [jira] [Created] (AMQ-4746) Applet ClassLoader Problems
Date Fri, 27 Sep 2013 17:23:02 GMT
Calvin Moody created AMQ-4746:

             Summary: Applet ClassLoader Problems
                 Key: AMQ-4746
             Project: ActiveMQ
          Issue Type: Bug
          Components: JMS client
    Affects Versions: 5.7.0
         Environment: Windows 7, Java 1.7 or 1.6, Applet
            Reporter: Calvin Moody

In the  load() method makes a call to Class.forName().

For the primitive types (int, boolean, etc.) this would result in a call similar to:
    Class.forName("int", false, loader); //Where loader is the Applet2ClassLoader

Since Applet2ClassLoader is a URLClassLoader and "int.class" is not in the jar cache it pulled
down from the server at the start of application, it is going to try and go to the server
to resolve this class.
In the event of a network failure, this will result in the ClassLoader having to wait for
the socket timeout. (see stacktrace in previous post) Once this socket timeout occurs, the
load() method then attempts to lookup the class in the primitive HashMap that is statically
initialized. This returns the class for the int and the deserialization continues on.

At first it seemed like the messages were failing to be received but it turned out they were
just taking a very long time to be deserialized. This problem can be avoided by changing the
order in which ClassLoadingAwareObjectInputStream tries to resolve the class. 

Here is the change I made to the load() method:

This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see:

View raw message