Hi,

Please file a ticket so this is improved.
Thanks!


On Tue, Jul 30, 2013 at 6:47 PM, Bryan Varner <[email protected]>wrote:

> So it turns out that the original class loader (The one in use by the
> Enhancer when it's first constructed) has access to both classes (type, and
> org.apache.wicket.proxy.ILaxyInitProxy).
>
> My issue was solved by adding a
> e.setClassLoader(Thread.currentThread().getContextClassLoader()); after
> line 178.
>
> Regards,
> -Bryan Varner
>
> ________________________________________
> From: Bryan Varner [[email protected]]
> Sent: Tuesday, July 30, 2013 12:10 PM
> To: [email protected]
> Subject: CGLib proxy issue with multi-module JEE .ears and @LocalBean (no
> interface view) beans.
>
> Hi all,
>
> I believe I've found the root cause of the issue previously reported issue
> (long ago) which may not have ever turned into a 'bug':
>
>
> http://apache-wicket.1842946.n4.nabble.com/java-lang-NoClassDefFoundError-with-wicket-proxy-ILazyInitProxy-in-Weblogic-9-2-td1921937.html
>
> I too, am experiencing the same issue, on JBoss AS 7.2 (pre wildfly build).
>
> We have an .ear containing an ejb-jar (with @LocalBean annotated
> no-interface ejbs) which we're trying to inject into our Wicket
> application, packaged in a separate .war file in the same .ear.
>
> In the jboss container we have subdeployment isolation turned off.
>
> When stepping through the code with a debugger, I get to the point where
> wicket is trying to create a CGLib proxy class to the non-final EJB class,
> and then things head south.
>
> Here's a quick link to the code in question.
>
> https://fisheye6.atlassian.com/browse/~raw,r=8d774aead8626981c56fa957a0169f115ba9eb36/wicket-git/wicket-ioc/src/main/java/org/apache/wicket/proxy/LazyInitProxyFactory.java
>
> On line 175, the Enhancer is initially created and inherits the thread's
> contextClassLoader, which is the class loader for the .war module of our
> deployment package. This is fine, this classLoader has access to the
> ILazyInitProxy.class, the IWriteReplace.class, and (obviously) Serializable.
> On line 178, when the superclass is set on the Enhancer, the Enhancer's
> classLoader changes to that of type.getClassLoader(). In our case, this the
> module class loader for the type.class -- or, our ejb-jar class loader,
> which does -not- have access to the the wicket .jars containing
> ILazyInitProxy.
>
> When we get to line 190, things fail, with the underlying exception being
> ClassNotFound for ILazyInitProxy
>
> This is kind of a problem. Sure, we could extract local interfaces for our
> EJBs, but it seems like the real problem here is that Wicket doesn't
> realize it may be in a multi-module deployment.
>
> At this point, I'm leaning toward building a custom
> JavaEEComponentInjector which uses a custom AnnotJavaEEInjector, which uses
> a custom JavaEEProxyFieldValueFactory just so that I can redirect the
> invocations of LazyInitProxyFactory.createProxy() to a different method to
> experiment with this without having to rebuild all of wicket.
>
> Thoughts?
>
> Regards,
> -Bryan Varner
>

Reply via email to