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 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]

