another problem: can not figure out why even with all workarounds
mentioned before
BXMLSerializer still fails to init javascript engine while in osgi
plugin context:
after this "###" breakpoint:
BXMLSerializer::
private void processEndElement() throws SerializationException {
// Create an invocation handler for this
listener
### ScriptEngine scriptEngine =
scriptEngineManager.getEngineByName(language);
AttributeInvocationHandler handler =
new
AttributeInvocationHandler(scriptEngine, attribute.name,
(String)attribute.value);
ScriptEngine scriptEngine == null
-------- 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.
>