My HelloWorld example now works with iPOJO. Thanks Clément! Le 16 oct. 2010 à 15:12, Clement Escoffier a écrit :
> Hi, > > On 16.10.2010, at 14:47, Thiébault Benoît wrote: > >> Thank you Clément for the quick fix. >> >> On what repository can I find iPOJO 1.7-SNAPSHOT? >> >> Currently, Maven can't find one of the required artifacts > > I just deployed it on apache.snapshots: > https://repository.apache.org/content/repositories/snapshots/org/apache/felix/org.apache.felix.ipojo.manipulator/1.7.0-SNAPSHOT/ > > Regards, > > Clement > >> >> Kind regards, >> >> Benoît >> >> ---------- >> 1) org.apache.felix:org.apache.felix.ipojo.manipulator:jar:1.7.0-SNAPSHOT >> >> Try downloading the file manually from the project website. >> >> >> Le 15 oct. 2010 à 20:15, Clement Escoffier a écrit : >> >>> Hi, >>> >>> So first it was an iPOJO issue >>> (https://issues.apache.org/jira/browse/FELIX-2664). I've fixed it in the >>> trunk. To check, compile the manipulator form the iPOJO trunk and >>> configure the maven-ipojo-plugin with: >>> <plugin> >>> <groupId>org.apache.felix</groupId> >>> <artifactId>maven-ipojo-plugin</artifactId> >>> <executions> >>> <execution> >>> <goals> >>> <goal>ipojo-bundle</goal> >>> </goals> >>> </execution> >>> </executions> >>> <dependencies> >>> <dependency> >>> >>> <artifactId>org.apache.felix.ipojo.manipulator</artifactId> >>> <groupId>org.apache.felix</groupId> >>> <version>1.7.0-SNAPSHOT</version> >>> </dependency> >>> </dependencies> >>> </plugin> >>> >>> Regards, >>> >>> Clement >>> >>> On 12.10.2010, at 19:48, Clement Escoffier wrote: >>> >>>> Hi, >>>> >>>> Could you send me your code or (better) a simplified version. We have code >>>> using JNI and iPOJO but it's not integrated in the test suite (shame on >>>> me...). >>>> It probably comes from an issue during the manipulation of the native >>>> methods. >>>> >>>> Regards, >>>> >>>> Clement >>>> >>>> On 12.10.2010, at 14:51, Thiébault Benoît wrote: >>>> >>>>> 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] >>>>> >>>> >>> >> >> >> --------------------------------------------------------------------- >> 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]

