On 11/4/10 12:06, Richard S. Hall wrote:
On 11/4/10 11:58, Richard S. Hall wrote:
On 11/4/10 11:45, Richard S. Hall wrote:
On 11/4/10 11:21, Thiébault Benoît wrote:
Thanks Richard !
Can I say I love you?

(blush) Thank you. ;-)

"org.osgi.framework.bootdelegation=*" did the work and my VTK bundle works perfectly now.
Just to understand what I just did, what is this variable doing?

Bundle class loaders only make java.* packages from the boot class path available to bundles by default. The normal Java class loader makes everything available by default. Setting this property to * makes a bundle class loader behave like a normal Java class loader (which isn't very modular).

Regarding the processor, I indeed have a Core2Duo proc, which is 64bits. The VTK version I compiled is 64bits as well.

Using boot delegation is generally bad practice. If you can help me get a version of this bundle that works on my machine, then I can try to see if I can get this to work properly without boot delegation.

Strange thing, though, my processor is a Intel Core 2 Duo too, it says, so I'm not sure why it doesn't work.

Ok, I got it to work by starting Java like this:

    java -d64 -jar bin/felix.jar


It looks like the bundle is being asked for apple.awt.ComponentModel, so it is sufficient to do:

    org.osgi.framework.bootdelegation=apple.*

Which is better than boot delegating everything. However, I will try to look into it a little further to see if I can get it to work without boot delegation at all.

Technically, I think Felix is doing all it can do here, but I'll need to think about it some more. Basically, it is the vtkPanel.RenderCreate() native method that causes the apple.awt.ComponentModel class load. The framework detects that this class is loaded by your bundle, so it enforces strict visibility.

-> richard


-> richard




-> richard
Kind regards, and again thank you very much

Benoît

Le 4 nov. 2010 à 16:06, Richard S. Hall a écrit :

On 11/4/10 10:43, Thiébault Benoît wrote:
Thank you Richard,

I added "processor=x86_64" and it "worked". I now have the same error message than with Equinox :-)

When I add like you "processor=x86", it crashes, but my error message is not as explicit as yours:

org.osgi.framework.BundleException: Unresolved constraint in bundle test-osgi-vtk [5]: No matching native libraries found.
It appears that you have a different processor than me, which is why x86 doesn't work for you.

I have two questions regarding this "processor" issue:
- Could it be possible in future versions of felix to have a more detailed error message for this issue?
It is difficult to get a detailed error message, because the selecting of matching libraries happens earlier than the resolve, so by then we don't know why they didn't match.

- Is it a bug or a feature? I mean, what does the OSGi standard say about the "processor": is it mandatory (in this case, Felix is right to crash) or optional (and its a felix bug)?
It didn't crash, it just didn't resolve the bundle.

I'm not sure about whether requiring processor is correct or not, so I will look into it, but it would definitely be a best practice.

Now, regarding my VTK-specific error, does anyone have any clue what OSGi does that makes the pure Java application work and not the OSGi bundle? I have looked for an answer to this problem for days and can't find what causes it (and how to solve it)
Any hint is thus very welcome :-)
Hard to say. For the fun of it, try editing conf/config.properties to include:

    org.osgi.framework.bootdelegation=*

And see if that has any impact.

->  richard

Kind regards,

Benoît

Le 4 nov. 2010 à 15:26, Richard S. Hall a écrit :

It appears that Felix treats processor as a required attribute on the native library, so you have to specify "processor=FOO" on the end of your Bundle-NativeLibrary header. I added "processor=x86" and got it to resolve on my Mac, but ended up getting errors when I started it:

Caused by: java.lang.UnsatisfiedLinkError: /Users/rickhall/Projects/felix-trunk/main/felix-cache/bundle5/version1.1/bundle.jar-lib/0/vtk/osx64b/libvtkproj4.jnilib: no suitable image found. Did find: /Users/rickhall/Projects/felix-trunk/main/felix-cache/bundle5/version1.1/bundle.jar-lib/0/vtk/osx64b/libvtkproj4.jnilib: mach-o, but wrong architecture

Not sure if processor should be required, but it seems like a good idea.

->   richard


On 11/4/10 10:00, Thiébault Benoît wrote:
Hi everyone,

I am currently working on creating an OSGi bundle embedding VTK, the Visualization ToolKit (http://www.vtk.org), written in C++, on Mac OS X.

I have written an article about my adventures and the related issues I have encountered so far: http://dev.artenum.com/blog/ben/posts/osgi_vtk_and_macosx

The short story is that by default, the compilation configuration of VTK does not create and link properly the dynamic libraries on Mac OS X. I thus had to modify 3 things:
    • change the .dylib extensions to .jnilib
• prepend the @loader_path prefix to the library transitive dependencies • remove the version numbers from the library file names and dependencies.

This way, I managed to execute the bundle without an UnsatisfiedLinkError with Equinox. I however have a new problem, that seems much more complex to me.

When the bundle starts, it creates a "vtkPanel", which extends the AWT Canvas. The rendering on the panel is then performed by a native method call that crashes.

WARNING in native
  method: JNI call made with exception pending
    at vtk.vtkPanel.RenderCreate(Native Method)
    at vtk.vtkPanel.Render(vtkPanel.java:166)
    - locked<1060ffa88>    (a vtk.vtkPanel)
    at vtk.vtkPanel.paint(vtkPanel.java:189)
    at sun.awt.RepaintArea.paintComponent(RepaintArea.java:276)
    at sun.awt.RepaintArea.paint(RepaintArea.java:241)
at apple.awt.ComponentModel.handleEvent(ComponentModel.java:263)
    at java.awt.Component.dispatchEventImpl(Component.java:4790)
    at java.awt.Component.dispatchEvent(Component.java:4544)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:635)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
FATAL ERROR in
native
  method: Bad global or local ref passed to JNI
    at vtk.vtkPanel.RenderCreate(Native Method)
    at vtk.vtkPanel.Render(vtkPanel.java:166)
    - locked<1060ffa88>    (a vtk.vtkPanel)
    at vtk.vtkPanel.paint(vtkPanel.java:189)
    at sun.awt.RepaintArea.paintComponent(RepaintArea.java:276)
    at sun.awt.RepaintArea.paint(RepaintArea.java:241)
at apple.awt.ComponentModel.handleEvent(ComponentModel.java:263)
    at java.awt.Component.dispatchEventImpl(Component.java:4790)
    at java.awt.Component.dispatchEvent(Component.java:4544)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:635)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Invalid memory access of location 0x0 rip=0x1010af1f4
./ben.sh: line 11: 23453 Abort trap java -Xcheck:jni -jar org.eclipse.osgi_3.6.0.v20100517.jar -console
This native method crashes when calling the jawt.h method GetDrawingSurfaceInfo(ds), and I have no idea where it may come from.

The pure Java (no OSGi) application works fine, so I thought it could be Equinox-related. This is why I tried to load the same bundle in Felix.
But here I have a new error message:

org.osgi.framework.BundleException: Unresolved constraint in bundle test-osgi-vtk [5]: No matching native libraries found.
... and nothing more (even with log level at 4).
How can I know what does not work?
What did I do that is Equinox-compatible and Felix-incompatible? I don't recall using specific Manifest entries...

Project source code can be downloaded here: http://dev.artenum.com/blog/ben/download/test-osgi-vtk_zip?action=download&nodecorator

Kind regards,

Benoît
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to