org.jboss.system
Class JBossRMIClassLoader

java.lang.Object
  extended by java.rmi.server.RMIClassLoaderSpi
      extended by org.jboss.system.JBossRMIClassLoader

public class JBossRMIClassLoader
extends RMIClassLoaderSpi

An implementation of RMIClassLoaderSpi to workaround the proxy ClassCastException problem in 1.4

THIS IS A HACK!

Sun's implementation uses the caller classloader when unmarshalling proxies. This is effectively jboss.jar since that is where JRMPInvokerProxy lives. On a redeploy the new interfaces are ignored because a proxy is already cached against the classloader.

Another redeployment problem is that the getClassAnnotation(String) will end up using the old deployment class loader and this can result in NPEs do the class loader being destroyed. This class ignores Sun's guess at a suitable classloader and uses the thread context classloader instead.

It has to exist in the system classloader so I have included it in "system" for inclusion in run.jar

Version:
$Revision: 85942 $
Author:
Adrian Brock, Scott.Stark@jboss.org

Constructor Summary
JBossRMIClassLoader()
          Required constructor
 
Method Summary
 String getClassAnnotation(Class<?> cl)
           
 ClassLoader getClassLoader(String codebase)
           
 Class<?> loadClass(String codebase, String name, ClassLoader ignored)
           
 Class<?> loadProxyClass(String codebase, String[] interfaces, ClassLoader ignored)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

JBossRMIClassLoader

public JBossRMIClassLoader()
Required constructor

Method Detail

loadProxyClass

public Class<?> loadProxyClass(String codebase,
                               String[] interfaces,
                               ClassLoader ignored)
                        throws MalformedURLException,
                               ClassNotFoundException
Specified by:
loadProxyClass in class RMIClassLoaderSpi
Throws:
MalformedURLException
ClassNotFoundException

loadClass

public Class<?> loadClass(String codebase,
                          String name,
                          ClassLoader ignored)
                   throws MalformedURLException,
                          ClassNotFoundException
Specified by:
loadClass in class RMIClassLoaderSpi
Throws:
MalformedURLException
ClassNotFoundException

getClassLoader

public ClassLoader getClassLoader(String codebase)
                           throws MalformedURLException
Specified by:
getClassLoader in class RMIClassLoaderSpi
Throws:
MalformedURLException

getClassAnnotation

public String getClassAnnotation(Class<?> cl)
Specified by:
getClassAnnotation in class RMIClassLoaderSpi


Copyright © 2009 JBoss, a division of Red Hat, Inc.. All Rights Reserved.