activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Timothy Bish <tabish...@gmail.com>
Subject Re: Applet Class Loader Problems
Date Mon, 30 Sep 2013 14:34:20 GMT
On 09/26/2013 10:16 AM, moodycl wrote:
> I think I have found the problem. In ClassLoadingAwareObjectInputStream.java
> 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:
>
> Please let me know how I can o about getting this incorporated into the
> ActiveMQ trunk. Thanks.
>
> private Class<?> load(String className, ClassLoader... cl) throws
> ClassNotFoundException {
>      //Check to see if this is a primitive first
>      final Class<?> clazz = (Class<?>) primClasses.get(className);
>      if (clazz != null) {
>          return clazz; //return the primitive class found in the map
>      } else {
>          for (ClassLoader loader : cl) {
>              try {
>                  return Class.forName(className, false, loader); //for
> applets this may be a URLClassLoader
>              } catch (Exception ex) {
>                  // ignore
>              }
>          }
>          //if we still haven't found the class, use the fallback
>          return Class.forName(className, false, FALLBACK_CLASS_LOADER);
>      }
> }
>
>
>
>
> --
> View this message in context: http://activemq.2283324.n4.nabble.com/Applet-Class-Loader-Problems-tp4671835p4671856.html
> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>
To get fixes into the broker you need to create a new Jira issue 
documenting the bug you think you've found and then attach a patch with 
a fix along with a unit test to demonstrate the issue and show that it 
is now fixed.  Once done someone from the team can review and apply the 
patch once its been verified.

-- 
Tim Bish
Sr Software Engineer | RedHat Inc.
tim.bish@redhat.com | www.fusesource.com | www.redhat.com
skype: tabish121 | twitter: @tabish121
blog: http://timbish.blogspot.com/


Mime
View raw message