[ 
https://issues.apache.org/jira/browse/PIVOT-687?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12972883#action_12972883
 ] 

Sandro Martini commented on PIVOT-687:
--------------------------------------

In an multi-layered application, a good thing would be to have a way for a 
caller to pass its (or maybe even a custom) Classloader instance to 
BXMLSerializer, so anytime a dynamic load of a class is needed, when that 
classloader is not null BXMLSerializer can use it instead of the default one 
(good for all standard cases).

Examples of Classloaders (for callers, to pass):
// ClassLoader classLoader = ClassLoader.getSystemClassLoader();  // clSystem
// ClassLoader classLoader = this.getClass().getClassLoader();  // clCurrent
// ClassLoader classLoader = Thread.currentThread().getContextClassLoader();  
// clContext
Currently BXMLSerializer by default uses this:
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();

Note that probably this is a good feature even in other places inside Pivot, 
whenever a dynamic load of a class has to be done, but this could be a later 
evolution (if needed here).
For example, I had a dedicated class for this, with the following methods 
(extract):
public DynamicLoader(String className, String variantName, int namingStrategy, 
boolean exceptionOnNull)
that was much more complex than needed here because I had to handle different 
naming strategies for class names. 
In my custom bean factory OptionalVariantBeanFactory i was loading classes 
using using DynamicLoader, and before loading the requested class I tried to 
load the optional variant version (specific for the given customer code) and if 
not found try to load the default class.
Probably all this is too business-specific for inclusion in Pivot, but a 
simplified version of DynamicLoader could be useful (maybe in the future).

        protected transient boolean     initClassToLoad = true;
        protected transient ClassLoader classloader     = null;

public void useClassloaderEnhanced(boolean initClass, ClassLoader cl)
this was using to enable the "enhanced" classloading, so later (inside the real 
load method) I could use
                        if (classloader != null)
                                clazz = Class.forName(fullClassName, 
initClassToLoad, classloader);
                        else
                                clazz = Class.forName(fullClassName);

just as a sample ...


> BXMLSerializer, would like to be able to specify a classloader for loading 
> custom components
> --------------------------------------------------------------------------------------------
>
>                 Key: PIVOT-687
>                 URL: https://issues.apache.org/jira/browse/PIVOT-687
>             Project: Pivot
>          Issue Type: Improvement
>          Components: core-beans
>    Affects Versions: 2.0
>         Environment: all
>            Reporter: GBivins
>             Fix For: 2.0.1
>
>
> I'm running into issues trying to load my pivot window into a swing 
> application. Some background,
> since pivot 2.0 can load components into a swing application, I've been 
> trying to integrate pivot into a netbeans platform application.
> Only been at it a couple of hours but I'm stuck on an class loader issue. 
> Basically, because I have pivot wrapped in separate module it's classloader
> can't references classes in any modules that depend on it. See here:
> http://bits.netbeans.org/dev/javadoc/org-openide-modules/org/openide/modules/doc-files/classpath.html#loader-hier
> I looked briefly in the docs but I'm not sure if I missed a readObject() 
> signature that will allow me to pass in the classloader to use when 
> de-serializing.

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

Reply via email to