I tried.
Still got the same error.

Ben

Le 12 oct. 2010 à 14:44, Derek Baum a écrit :

> Try putting System.loadLibrary() in a static block, rather than in the
> start() method.
> 
> public class HelloWorld {
>   static {
>     System.loadLibrary("HelloWorld");
>  }
> ...
> }
> 
> Derek
> 
> 
> 2010/10/12 Thiébault Benoît <[email protected]>
> 
>> This is definitely an iPOJO problem: I just used an OSGi BundleActivator
>> and it works...
>> 
>> Ben
>> 
>> Le 12 oct. 2010 à 12:30, Derek Baum a écrit :
>> 
>>> I doubt this problem is related to iPOJO, but it may be worth factoring
>> this
>>> out of the equation by testing with a BundleActivator instead of iPOJO.
>> It
>>> may still fail, but you may get a more meaningful exception.
>>> 
>>> I created a Mac native bundle about 6 months ago, and was caught out by
>> the
>>> .jnilib extension, which was required on OSX 10.6.3.
>>> 
>>> Derek
>>> 
>>> 
>>> 2010/10/12 Thiébault Benoît <[email protected]>
>>> 
>>>> Hi Derek,
>>>> 
>>>> I tried to run it under Linux (changing the Bundle-NativeCode
>> accordingly)
>>>> and got the same result.
>>>> 
>>>> The jnilib extension was mandatory in MacOSX early days, it is now
>> supposed
>>>> to supports both (
>>>> 
>> http://markmail.org/message/cksb24oiwjszohvl#query:jnilib%20dylib+page:1+mid:nvmhqaimybukzg4l+state:results
>>>> ).
>>>> 
>>>> Anyway, if the problem was here, it would crash when using "java
>>>> -Djava.library.path=./lib org.test.jni.HelloWorld" as well, which is not
>> the
>>>> case.
>>>> 
>>>> Regarding the OS name, I tried to use MacOSX instead of "Mac OS X" and
>>>> still got the same error. On old equinox versions (prior 3.3 I think),
>> the
>>>> MacOSX alias was not recognized, this is why I chose to be conservative
>> at
>>>> first and used "Mac OS X" instead, which was supported.
>>>> 
>>>> Kind regards,
>>>> 
>>>> Ben
>>>> 
>>>> Le 12 oct. 2010 à 11:57, Derek Baum a écrit :
>>>> 
>>>>> System.loadLibrary() on OSX expects the shared library to have a
>> .jnilib
>>>>> extension.
>>>>> 
>>>>> So try renaming libHelloWorld.dylib to libHelloWorld.jnilib and adjust
>>>> the
>>>>> Bundle-NativeCode header accordingly. I actually use osname=MacOSX, but
>>>> "Mac
>>>>> OS X" may work too.
>>>>> 
>>>>> regards,
>>>>> 
>>>>> Derek
>>>>> 
>>>>> 2010/10/12 Thiébault Benoît <[email protected]>
>>>>> 
>>>>>> Hi everyone,
>>>>>> 
>>>>>> I'm trying a very simple JNI example with iPOJO and OSGi.
>>>>>> Basically, I implemented the HelloWorld example provided by SUN (
>>>>>> http://java.sun.com/docs/books/jni/html/start.html) and packaged it
>> as
>>>> an
>>>>>> iPOJO bundle. The HelloWorld.java file looks like this:
>>>>>> 
>>>>>>> package org.test.jni;
>>>>>>> 
>>>>>>> public class HelloWorld {
>>>>>>>  public native void nativePrint();
>>>>>>> 
>>>>>>>  public static void main(String[] args) {
>>>>>>>    (new HelloWorld()).start();
>>>>>>>  }
>>>>>>> 
>>>>>>>  public void start() {
>>>>>>>    System.loadLibrary("HelloWorld");
>>>>>>> 
>>>>>>>    nativePrint();
>>>>>>>  }
>>>>>>> 
>>>>>>>  public void stop() {
>>>>>>>    System.out.println("Goodbye");
>>>>>>>  }
>>>>>>> }
>>>>>> 
>>>>>> 
>>>>>> While the HelloWorld.c is:
>>>>>> 
>>>>>>> #include <jni.h>
>>>>>>> #include <stdio.h>
>>>>>>> #include "org_test_jni_HelloWorld.h"
>>>>>>> 
>>>>>>> JNIEXPORT void JNICALL
>>>>>>> Java_org_test_jni_HelloWorld_nativePrint(JNIEnv *env, jobject obj)
>>>>>>> {
>>>>>>>   printf("Hello World!\n");
>>>>>>>   return;
>>>>>>> }
>>>>>> 
>>>>>> 
>>>>>> The BND configuration is:
>>>>>> 
>>>>>>> <plugin>
>>>>>>>    <groupId>org.apache.felix</groupId>
>>>>>>>    <artifactId>maven-bundle-plugin</artifactId>
>>>>>>>    <version>1.4.3</version>
>>>>>>>    <extensions>true</extensions>
>>>>>>>    <configuration>
>>>>>>>            <instructions>
>>>>>>> 
>>>>>> <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
>>>>>>>                    <Private-Package>org.test.jni</Private-Package>
>>>>>>>                    <Import-Package></Import-Package>
>>>>>>>                    <Export-Package></Export-Package>
>>>>>>>                    <Include-Resource>
>>>>>>>                            {maven-resources},
>>>>>>>                            lib=src/main/c/lib
>>>>>>>                   </Include-Resource>
>>>>>>>                    <Bundle-NativeCode>
>>>>>>>                            lib/libHelloWorld.dylib;
>>>>>>>                            osname="Mac OS X"
>>>>>>>                      </Bundle-NativeCode>
>>>>>>>            </instructions>
>>>>>>>    </configuration>
>>>>>>> </plugin>
>>>>>> 
>>>>>> 
>>>>>> and the iPOJO metadata.xml:
>>>>>>> <ipojo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>>>>>>>    xsi:schemaLocation="org.apache.felix.ipojo
>>>>>> http://felix.apache.org/ipojo/schemas/CURRENT/core.xsd";
>>>>>>>    xmlns="org.apache.felix.ipojo">
>>>>>>>    <component classname="org.test.jni.HelloWorld">
>>>>>>>            <callback transition="validate" method="start"/>
>>>>>>>      <callback transition="invalidate" method="stop"/>
>>>>>>>    </component>
>>>>>>>    <instance component="org.test.jni.HelloWorld" />
>>>>>>> </ipojo>
>>>>>> 
>>>>>> 
>>>>>> When I run this sample application via command line, it works:
>>>>>>> java -Djava.library.path=./lib org.test.jni.HelloWorld
>>>>>>> Hello World!
>>>>>> 
>>>>>> But when I load it in OSGi (equinox), I have the following error:
>>>>>>> [ERROR] org.test.jni.HelloWorld : Code attribute in native or
>> abstract
>>>>>> methods in class file org/test/jni/HelloWorld
>>>>>>> java.lang.ClassFormatError: Code attribute in native or abstract
>>>> methods
>>>>>> in class file org/test/jni/HelloWorld
>>>>>>>    at java.lang.ClassLoader.defineClass1(Native Method)
>>>>>>>    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
>>>>>>>    at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
>>>>>>>    at
>>>>>> 
>>>> 
>> org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188)
>>>>>>>    at
>>>>>> 
>>>> 
>> org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:580)
>>>>>>>    at
>>>>>> 
>>>> 
>> org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:550)
>>>>>>>    at
>>>>>> 
>>>> 
>> org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:481)
>>>>>>>    at
>>>>>> 
>>>> 
>> org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader(ClasspathManager.java:469)
>>>>>>>    at
>>>>>> 
>>>> 
>> org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:449)
>>>>>>>    at
>>>>>> 
>>>> 
>> org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
>>>>>>>    at
>>>>>> 
>>>> 
>> org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:393)
>>>>>>>    at
>>>>>> 
>>>> 
>> org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:469)
>>>>>>>    at
>>>>>> 
>>>> 
>> org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422)
>>>>>>>    at
>>>>>> 
>>>> 
>> org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)
>>>>>>>    at
>>>>>> 
>>>> 
>> org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
>>>>>>>    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
>>>>>>>    at
>>>>>> 
>>>> 
>> org.eclipse.osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:338)
>>>>>>>    at
>>>>>> 
>>>> 
>> org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:232)
>>>>>>>    at
>>>>>> 
>>>> 
>> org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass(AbstractBundle.java:1197)
>>>>>>>    at
>>>>>> 
>>>> 
>> org.apache.felix.ipojo.ComponentFactory.loadClass(ComponentFactory.java:220)
>>>>>>>    at
>>>>>> org.apache.felix.ipojo.InstanceManager.load(InstanceManager.java:542)
>>>>>>>    at
>>>>>> 
>>>> 
>> org.apache.felix.ipojo.InstanceManager.createObject(InstanceManager.java:574)
>>>>>>>    at
>>>>>> 
>>>> 
>> org.apache.felix.ipojo.InstanceManager.getPojoObject(InstanceManager.java:777)
>>>>>>>    at
>>>>>> 
>>>> 
>> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.__stateChanged(LifecycleCallbackHandler.java:156)
>>>>>>>    at
>>>>>> 
>>>> 
>> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.stateChanged(LifecycleCallbackHandler.java)
>>>>>>>    at
>>>>>> 
>>>> 
>> org.apache.felix.ipojo.InstanceManager.setState(InstanceManager.java:441)
>>>>>>>    at
>>>>>> org.apache.felix.ipojo.InstanceManager.start(InstanceManager.java:322)
>>>>>>>    at
>>>>>> 
>>>> 
>> org.apache.felix.ipojo.ComponentFactory.createInstance(ComponentFactory.java:155)
>>>>>>>    at
>>>>>> 
>>>> 
>> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:301)
>>>>>>>    at
>>>>>> 
>>>> 
>> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:238)
>>>>>>>    at
>>>>>> 
>>>> 
>> org.apache.felix.ipojo.InstanceCreator$ManagedInstance.create(InstanceCreator.java:343)
>>>>>>>    at
>>>>>> 
>>>> 
>> org.apache.felix.ipojo.InstanceCreator.addInstance(InstanceCreator.java:89)
>>>>>>>    at org.apache.felix.ipojo.Extender.parse(Extender.java:269)
>>>>>>>    at
>>>>>> org.apache.felix.ipojo.Extender.startManagementFor(Extender.java:208)
>>>>>>>    at org.apache.felix.ipojo.Extender.access$600(Extender.java:52)
>>>>>>>    at
>>>>>> org.apache.felix.ipojo.Extender$CreatorThread.run(Extender.java:682)
>>>>>>>    at java.lang.Thread.run(Thread.java:637)
>>>>>>> [ERROR] org.test.jni.HelloWorld : Code attribute in native or
>> abstract
>>>>>> methods in class file org/test/jni/HelloWorld
>>>>>>> [ERROR] iPOJO Instance Creator : A matching factory was found for
>>>>>> {component=org.test.jni.HelloWorld, instance.name
>>>> =org.test.jni.HelloWorld-0},
>>>>>> but the instantiation failed : The configuration is not correct for
>> the
>>>> type
>>>>>> org.test.jni.HelloWorld : Code attribute in native or abstract methods
>>>> in
>>>>>> class file org/test/jni/HelloWorld
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> What did go wrong?
>>>>>> 
>>>>>> Kind regards,
>>>>>> Ben
>>>>>> ---------------------------------------------------------------------
>>>>>> 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