Issue Details (XML | Word | Printable)

Key: SFOS-1098
Type: Bug Bug
Status: Resolved Resolved
Resolution: Fixed
Priority: Major Major
Assignee: Steve Loughran
Reporter: Steve Loughran
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
SmartFrog

Add better classload failure details in SFClassLoader.forName()

Created: 04/Feb/09 03:32 PM (GMT)   Updated: 09/Feb/09 03:27 PM (GMT)
Component/s: .sfCore
Affects Version/s: 3.17.010
Fix Version/s: 3.17.010

Time Tracking:
Original Estimate: 30 minutes
Original Estimate - 30 minutes
Remaining Estimate: 30 minutes
Remaining Estimate - 30 minutes
Time Spent: Not Specified
Remaining Estimate - 30 minutes

Issue Links:
Depends
 

Compatibility: backwards compatible


 Description  « Hide
To help track down load failures, we should stop hiding ClassNotFoundExceptions in SFClassLoader.forName()

 All   Comments   Work Log   Change History      Sort Order: Ascending order - Click to sort in descending order
Steve Loughran added a comment - 04/Feb/09 03:34 PM (GMT)
First pass tried to initCause() the exception,

} catch (ClassNotFoundException e) {
throw (ClassNotFoundException) new ClassNotFoundException("forName: Cannot find " + className).initCause(e);
} catch (NoClassDefFoundError err) {
throw (ClassNotFoundException) new ClassNotFoundException("forName: Error while loading "
                    + className + ": " + err).initCause(err);
}


but look at the trace: CNFE doesn't let you initialise its cause.



 Caused by: java.lang.IllegalStateException: Can't overwrite cause
   [deploy] at java.lang.Throwable.initCause(Throwable.java:320)
   [deploy] at org.smartfrog.sfcore.security.SFClassLoader.forName(SFClassLoader.java:573)
   [deploy] at org.smartfrog.sfcore.prim.PrimDeployerImpl.getPrimClass(PrimDeployerImpl.java:177)
   [deploy] at org.smartfrog.sfcore.prim.PrimDeployerImpl.deploy(PrimDeployerImpl.java:92)
   [deploy] at org.smartfrog.sfcore.processcompound.PrimHostDeployerImpl.deploy(PrimHostDeployerImpl.java:138)
   [deploy] at org.smartfrog.sfcore.prim.PrimDeployerImpl.deploy(PrimDeployerImpl.java:246)
   [deploy] at org.smartfrog.sfcore.deployer.SFDeployer.deploy(SFDeployer.java:94)
   [deploy] at org.smartfrog.sfcore.compound.CompoundImpl.sfDeployComponentDescription(CompoundImpl.java:159)
   [deploy] at org.smartfrog.sfcore.compound.CompoundImpl.sfDeployWithChildren(CompoundImpl.java:565)
   [deploy] at org.smartfrog.sfcore.compound.CompoundImpl.sfDeployWith(CompoundImpl.java:548)
   [deploy] at org.smartfrog.sfcore.prim.PrimDeployerImpl.deploy(PrimDeployerImpl.java:108)
   [deploy] at org.smartfrog.sfcore.processcompound.PrimHostDeployerImpl.deploy(PrimHostDeployerImpl.java:138)
   [deploy] at org.smartfrog.sfcore.prim.PrimDeployerImpl.deploy(PrimDeployerImpl.java:246)
   [deploy] at org.smartfrog.sfcore.deployer.SFDeployer.deploy(SFDeployer.java:94)
   [deploy] at org.smartfrog.sfcore.compound.CompoundImpl.sfDeployComponentDescription(CompoundImpl.java:159)
   [deploy] at org.smartfrog.sfcore.processcompound.ProcessCompoundImpl.sfDeployComponentDescription(ProcessCompoundImpl.java:243)
   [deploy] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   [deploy] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
   [deploy] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   [deploy] at java.lang.reflect.Method.invoke(Method.java:597)
   [deploy] at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
   [deploy] at sun.rmi.transport.Transport$1.run(Transport.java:159)
   [deploy] at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
   [deploy] at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
   [deploy] at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
   [deploy] at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
   [deploy] at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
   [deploy] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
   [deploy] at java.lang.Thread.run(Thread.java:619)