You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "Igor Vaynberg (JIRA)" <ji...@apache.org> on 2008/06/03 19:20:45 UTC

[jira] Resolved: (WICKET-1681) MarkupResourceStream unexpectedly loads markup class

     [ https://issues.apache.org/jira/browse/WICKET-1681?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Igor Vaynberg resolved WICKET-1681.
-----------------------------------

    Resolution: Won't Fix
      Assignee: Igor Vaynberg

we prefer not to hold on to the actual Class instance anywhere in the code. The reason for this is that it causes web application reloading issues with classloaders since there is a hard reference to Class.

what we do all over our internal code is to either keep a WeakReference<Class> or just the class name

we do understand that class resolution can be a problem in environments like OSGi, and for that we have a special class resolver facility. we try not to resolve the class by simply doing Class.forName(name), instead if you take a look at markupresourcestream.getMarkupClass() you will see that it delegates class loading to Classes.resolveClass() which in turn delegates it to IClassResolver implmenetation installed in application settings.

the default implementation of IClassResolver uses thread's context class loader to load the class, which obviously will not work in OSGi. so, what this means for you is that you will most likely have to implement and install your own IClassResolver that can load classes using OSGi's class loader.

if there are any further questions, or if for some reason this is not going to work for you please open a discussion on the mailing list.

> MarkupResourceStream unexpectedly loads markup class
> ----------------------------------------------------
>
>                 Key: WICKET-1681
>                 URL: https://issues.apache.org/jira/browse/WICKET-1681
>             Project: Wicket
>          Issue Type: Bug
>    Affects Versions: 1.3.3
>         Environment: OSGi / Eclipse 3.3.0 / Java 1.6.0
>            Reporter: Nick Giles
>            Assignee: Igor Vaynberg
>
> The getMarkupClass method in MarkupResourceStream tries to load the markup class from its name. In some classloading environments, notably OSGi in our case, the base class may not be accessible, only the relevant interfaces or superclass. This was actually discovered because InheritedMarkupMarkupLoader was throwing a null pointer from the checkForMarkupInheritance method when looking for the base markup, so tracing the issue wasn't straightforward either.
> Since the actual Class object is passed in to the constructor of the stream, a reference to that could be stored, and then classloading could be avoided

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