This is actually how the code used to read a while back. I don't remember why 
it was changed to use the context class loader. I don't see a problem in 
reverting it.
G

On May 15, 2011, at 10:48 AM, Andrei Pozolotin wrote:

> FYI: 
> 
> this example:
> http://pivot.apache.org/tutorials/list-buttons.html
> 
> is misleading in osgi environment, due to use of TCCL
> 
>        // Get the image URL for the selected item
>                     ClassLoader classLoader = 
> Thread.currentThread().getContextClassLoader();
>                     URL imageURL = 
> classLoader.getResource("org/apache/pivot/tutorials/" + selectedItem);
>  
> assuming your resources are in plugin bundle (and not pivot host bundle)
> it should be instead
> 
>                     ClassLoader classLoader = getClass().getClassLoader();
> 
> -------- Original Message  --------
> Subject: pivot  + osgi : class loading?
> From: Andrei Pozolotin <[email protected]>
> To: [email protected]
> Date: Fri 13 May 2011 10:35:37 PM CDT
>> Greg, hello;
>> 
>>  
>> 1) I am hitting in the following issue while trying to run pivot in osgi 
>> environment:
>> 
>> this example
>>       http://pivot.apache.org/tutorials/labels-and-image-views.html
>> 
>> <Window title="Labels" maximized="true"
>>     xmlns:bxml="http://pivot.apache.org/bxml";
>>     xmlns="org.apache.pivot.wtk">
>>     <BoxPane styles="{padding:4, verticalAlignment:'center'}">
>>         <ImageView image="/clock.png"/>
>>         <Label text="What time is it?"/>
>>     </BoxPane>
>> </Window>
>> 
>> 
>> 2) in terms of ImageView properties, it is getting translated by 
>> BXMLSerializer into a call setImage(String imageName) , 
>> which fails to locate resource:
>> 
>> ImageView ::
>>     /**
>>      * Sets the image view's image by {@linkplain 
>> ClassLoader#getResource(String)
>>      * resource name}.
>>      *
>>      * @param imageName
>>      * The resource name of the image to set.
>>      *
>>      * @see #setImage(URL)
>>      */
>>     public final void setImage(String imageName) {
>>         if (imageName == null) {
>>             throw new IllegalArgumentException("imageName is null.");
>>         }
>> 
>>         ClassLoader classLoader = 
>> Thread.currentThread().getContextClassLoader();
>>         setImage(classLoader.getResource(imageName.substring(1)));
>>     }
>> 
>> 2) note that in my case the pivot package classes and  [AWT-EventQueue-0] 
>> event queues are instantiated in osgi host class loader
>>       
>> http://felix.apache.org/site/apache-felix-framework-launching-and-embedding.html
>> but the actual call to setImage(String imageName) is executed in osgi plugin 
>> class loader;
>> 
>> just to give you an example, when this snipped gets executed inside osgi 
>> plugin bundle:
>> 
>>                         // class loader used by pivot
>>                         ClassLoader loader = 
>> Thread.currentThread().getContextClassLoader();
>>                         URL urlPivot = loader.getResource("");
>>                         log.info("urlPivot : {} ", urlPivot);
>> 
>>                         // class loader used by plugin bundle
>>                         URL urlOSGI = getClass().getResource("");
>>                         log.info("urlOSGI  : {}", urlOSGI);
>> 
>> it produces this log:
>> 
>> 22:08:46.876 [AWT-EventQueue-0] INFO  com.carrotgarden.core.LoginComponent - 
>> urlPivot : 
>> file:/home/user1/Workspaces/github/carrot-tester/carrot-test-osgi-ws/carrot-test-osgi-pivot-host/target/test-classes/
>>  
>> 
>> 22:08:46.876 [AWT-EventQueue-0] INFO  com.carrotgarden.core.LoginComponent - 
>> urlOSGI  : bundle://7.0:1/com/carrotgarden/core/
>> 
>> as you can see,
>>       urlPivot : 
>> file:/home/user1/Workspaces/github/carrot-tester/carrot-test-osgi-ws/carrot-test-osgi-pivot-host/target/test-classes/
>>  
>> resolves back to osgi host class loader which is not visible by the the 
>> client plugin
>> 
>> and
>>      urlOSGI  : bundle://7.0:1/com/carrotgarden/core/
>> resolves inside calling osgi bundle name space as expected;
>> 
>> 
>> 3) am I missing something obvious? 
>> why do you use current class loading approach in pivot? 
>> are you open to change this?
>> what would your recommend instead?
>> 
>> 
>> Thank you, 
>> 
>> Andrei.
>> 
> 

Reply via email to