Class not found with cglib loaded in a parent (non-webapp) classloader. 
(CglibProxiedPropertyChangeObserverImpl)
----------------------------------------------------------------------------------------------------------------

                 Key: TAPESTRY-1301
                 URL: https://issues.apache.org/jira/browse/TAPESTRY-1301
             Project: Tapestry
          Issue Type: Bug
          Components: Framework
    Affects Versions: 4.1.2
         Environment: Tomcat 5.5.20
            Reporter: Marcus Schulte


We need CGLIB to reside in Tomcat's common/lib Classloader due to 
Hibernate-Issues.
In this case, there is a ClassNotFoundException from 
CglibProxiedPropertyChangeObserverImpl.observePropertyChanges().

This is, because net.sf.cglib.proxy.Enhancer's static create-method falls back 
on the classloader, in which it is loaded. The correct behaviour, imo, would be 
to make the enhancer use the thread-context-classloader. 

Proposed patch (tested, works well):
In o.a.t.record.CglibPropertyChangeInterceptor change the lines (90ff):
_________________
Object ret = Enhancer.create(property.getClass(), interfaces, 
                    new ObservableMethodFilter(), 
                    new Callback[] { new LazyProxyDelegate(property), new 
CglibPropertyChangeInterceptor(component, property, propertyName)});
_______________            

into:
______________________
            Enhancer e = new Enhancer();
            e.setClassLoader( Thread.currentThread().getContextClassLoader() );
            e.setSuperclass(property.getClass());
            e.setInterfaces(interfaces);
            e.setCallbackFilter(new ObservableMethodFilter());
            e.setCallbacks(new Callback[] { new LazyProxyDelegate(property), 
                        new CglibPropertyChangeInterceptor(component, property, 
propertyName)});
            Object ret = e.create();
________________________

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to