activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Hadrian Zbarcea (JIRA)" <>
Subject [jira] [Updated] (AMQ-4746) Applet ClassLoader Problems
Date Wed, 02 Apr 2014 23:58:14 GMT


Hadrian Zbarcea updated AMQ-4746:

    Fix Version/s: 5.9.1

> Applet ClassLoader Problems
> ---------------------------
>                 Key: AMQ-4746
>                 URL:
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: JMS client
>    Affects Versions: 5.7.0, 5.8.0
>         Environment: Windows 7, Java 1.7 or 1.6, Applet
>            Reporter: Calvin Moody
>            Assignee: Claus Ibsen
>            Priority: Minor
>              Labels: ClassLoader
>             Fix For: 5.9.1, 5.10.0
>   Original Estimate: 24h
>  Remaining Estimate: 24h
> Applets fail to deserailize messages in a timely manner after a network failure triggers
a reconnect using the FailoverTransport
> 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 at link) 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 was sent by Atlassian JIRA

View raw message