Clement, Now that used your tip (from the FAQ), it works fine with maven-ipojo-plugin version 1.6.0. The real error was of course that I used the wrong version of the manipulator. I dont't know why the latest version from trunk (1.7.0-SNAPSHOT) seemed the hide that error but it's gone now that I use the correct manipulator version.
/Bengt 2010/10/3 Bengt Rodehav <[email protected]> > Thanks Clement - that worked perfectly! > > I don't know how I've missed that FAQ but now I learned something new. > > Yes, I used the latest maven-ipojo-plugin from trunk. > > /Bengt > > > > 2010/10/3 clement escoffier <[email protected]> > > Hi, >> >> 2010/10/3 Bengt Rodehav <[email protected]> >> >> > Clement, >> > >> > I've upgrade to iPOJO 1.6.0 but I still have problems exposing services >> > using the @ServiceController. >> > >> > I get: >> > >> > factory name="connect.skandia.filetransfer" state="invalid" bundle="86" >> > >> > >> implementation-class="se.digia.connect.services.skandia.filetransfer.FileTransferService" >> > missinghandlers >> > list="[org.apache.felix.ipojo.annotations:servicecontroller]" >> > requiredhandlers list="[org.apache.felix.ipojo:requires, >> > org.apache.felix.ipojo:properties, org.apache.felix.ipojo:callback, >> > org.apache.felix.ipojo:provides, >> > org.apache.felix.ipojo.annotations:servicecontroller, >> > org.apache.felix.ipojo:architecture]" >> > >> > in the Webconsole under iPOJO/factories. It seems iPOJO cannot find a >> > handler for >> > >> > org.apache.felix.ipojo.annotations:servicecontroller >> > >> > What bundle am I missing? >> > >> >> No, but you must use the manipulator 1.6.4 as explained in: >> >> http://felix.apache.org/site/ipojo-faq.html#iPOJOFAQ-Usingadifferentversionofthemanipulatorduringthemanipulation >> >> >> > >> > BTW I also move away from using the ipojo url handler (online >> manipulator) >> > and started using the maven-ipojo-plugin instead. It turns out I cannot >> use >> > the latest released version of the plugin (1.6.0) but I have to use >> > 1.7.0-SNAPSHOT. >> >> >> Here is the configuration you should use. >> >> <plugin> >> <groupId>org.apache.felix</groupId> >> <artifactId>maven-ipojo-plugin</artifactId> >> <executions> >> <execution> >> <goals> >> <goal>ipojo-bundle</goal> >> </goals> >> </execution> >> </executions> >> <dependencies> >> <dependency> >> <groupId>org.apache.felix</groupId> >> >> <artifactId>org.apache.felix.ipojo.manipulator</artifactId> >> <version>1.6.4</version> >> </dependency> >> </dependencies> >> </plugin> >> >> >> >> >> > Otherwise I get the following exception: >> > >> > java.lang.NullPointerException >> > >> >> I will look into that. Did you use the latest from trunk ? >> >> Regards, >> >> Clement >> >> >> >> > >> > at >> > > >> > >> org.apache.felix.ipojo.manipulation.annotations.MetadataCollector.visitEnd(MetadataCollector.java:215) >> > >> > at org.objectweb.asm.ClassReader.accept(Unknown Source) >> > >> > at org.objectweb.asm.ClassReader.accept(Unknown Source) >> > >> > at >> > > >> > >> org.apache.felix.ipojo.manipulator.Pojoization.computeAnnotations(Pojoization.java:294) >> > >> > at >> > > >> > >> org.apache.felix.ipojo.manipulator.Pojoization.manipulateComponents(Pojoization.java:484) >> > >> > at >> > > >> > >> org.apache.felix.ipojo.manipulator.Pojoization.manipulateJarFile(Pojoization.java:335) >> > >> > at >> > > >> > >> org.apache.felix.ipojo.manipulator.Pojoization.pojoization(Pojoization.java:194) >> > >> > at >> > > >> > >> org.apache.felix.ipojo.plugin.ManipulatorMojo.execute(ManipulatorMojo.java:199) >> > >> > at >> > > >> > >> org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490) >> > >> > at >> > > >> > >> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694) >> > >> > at >> > > >> > >> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:556) >> > >> > at >> > > >> > >> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:535) >> > >> > at >> > > >> > >> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387) >> > >> > at >> > > >> > >> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:348) >> > >> > at >> > > >> > >> org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180) >> > >> > at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328) >> > >> > at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138) >> > >> > at org.apache.maven.cli.MavenCli.main(MavenCli.java:362) >> > >> > at >> > > >> org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60) >> > >> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >> > >> > at >> > > >> > >> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) >> > >> > at >> > > >> > >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) >> > >> > at java.lang.reflect.Method.invoke(Method.java:597) >> > >> > at >> > > org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315) >> > >> > at org.codehaus.classworlds.Launcher.launch(Launcher.java:255) >> > >> > at >> > > org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430) >> > >> > at org.codehaus.classworlds.Launcher.main(Launcher.java:375) >> > >> > >> > /Bengt >> > >> > >> > /Bengt >> > >> > 2010/10/1 Clement Escoffier <[email protected]> >> > >> > > >> > > On 01.10.2010, at 18:30, Bengt Rodehav wrote: >> > > >> > > > Clement, >> > > > >> > > > Just a clarification: >> > > > >> > > > When you restart your instance, be sure that the filed is really >> > > re-assigned >> > > >> to false. To be sure, make your instance immediate and set the >> field >> > in >> > > the >> > > >> constructor. >> > > > >> > > > >> > > > I suspect you misspelled "filed". I'm not sure what you mean here. >> My >> > > > "mValid" field will be set from a configuration that file install >> picks >> > > up. >> > > > If the configuration value "connect.enabled" is set to true (which >> is >> > the >> > > > normal case) then I want the service to be started. If it is set to >> > > false, >> > > > then I do not want to start nor publish a service yet. >> > > > >> > > > I want to make sure that I never have a mismatch, that is if >> > > > the "connect.enabled" property is false, then the service can never >> be >> > > > started and vice versa. It is important that services that I have >> > > "disabled" >> > > > this way is never started (which has unfortunately happened...). >> > > >> > > I never tested having the @ServiceController on the same field as a >> > > @Property. This may have some side effects, like not-yet injected >> values. >> > > Try to set your component as immediate. This will force the injection. >> In >> > > fact, if the property has the value false, but there is no object >> > created, >> > > the >> > > @ServiceController has no way to know the current value. If the >> instance >> > is >> > > immediate, an object is created and the field is assigned to the >> property >> > > value. >> > > This will allow the service controller to get the value. >> > > >> > > Clement >> > > >> > > > >> > > > /Bengt >> > > > >> > > > >> > > > 2010/10/1 Clement Escoffier <[email protected]> >> > > > >> > > >> >> > > >> On 01.10.2010, at 17:03, Bengt Rodehav wrote: >> > > >> >> > > >>> OK - obviously @ServiceController is what I need... >> > > >> >> > > >> As said by Richard, The @ServiceController impacts the service >> > lifecycle >> > > >> The @Controller impacts the instance lifecycle. The @Controller is >> > > generally >> > > >> used to detect wrong configuration or really bad state where the >> > > instance >> > > >> decide to become invalid. >> > > >> >> > > >> The @ServiceController is not tied to the instance lifecycle, which >> > > means >> > > >> that despite the instance is valid, the service can be unpublished >> > using >> > > the >> > > >> @ServiceController. >> > > >> >> > > >> When you restart your instance, be sure that the filed is really >> > > >> re-assigned to false. To be sure, make your instance immediate and >> set >> > > the >> > > >> field in the constructor. >> > > >> >> > > >> Regards, >> > > >> >> > > >> Clement >> > > >> >> > > >>> >> > > >>> /Bengt >> > > >>> >> > > >>> 2010/10/1 Richard S. Hall <[email protected]> >> > > >>> >> > > >>>> On 10/1/10 10:41, Bengt Rodehav wrote: >> > > >>>> >> > > >>>>> OK - thanks, >> > > >>>>> >> > > >>>>> BTW, what then is @Controller used for? >> > > >>>>> >> > > >>>> >> > > >>>> It is for disabling the component itself and is generally more to >> > > signal >> > > >>>> error conditions from which the component cannot recover, such as >> > > faulty >> > > >> or >> > > >>>> missing configuration. On the other hand, @ServiceController >> allows >> > > you >> > > >> to >> > > >>>> control when your services are provided. >> > > >>>> >> > > >>>> -> richard >> > > >>>> >> > > >>>> >> > > >>>> /Bengt >> > > >>>>> >> > > >>>>> 2010/10/1 Karl Pauls<[email protected]> >> > > >>>>> >> > > >>>>> iirc, you want the @ServiceController and not the @Controller >> and >> > > >>>>>> again iirc, you need to update to ipojo 1.6.x for that one. >> > > >>>>>> >> > > >>>>>> regards, >> > > >>>>>> >> > > >>>>>> Karl >> > > >>>>>> >> > > >>>>>> On Fri, Oct 1, 2010 at 4:06 PM, Bengt Rodehav< >> [email protected]> >> > > >> wrote: >> > > >>>>>> >> > > >>>>>>> I'm using iPOJO 1.4.0. My installed iPOJO related artifacts >> (in >> > > Karaf >> > > >>>>>>> >> > > >>>>>> 1.6.0) >> > > >>>>>> >> > > >>>>>>> are: >> > > >>>>>>> >> > > >>>>>>> org.apache.felix.ipojo-1.4.0.jar >> > > >>>>>>> >> > > >>>>>>> org.apache.felix.ipojo.handler.extender-1.4.0.jar >> > > >>>>>>> >> > > >>>>>>> org.apache.felix.ipojo.online.manipulator-1.4.2.jar >> > > >>>>>>> >> > > >>>>>>> org.apache.felix.ipojo.webconsole-1.4.0.jar >> > > >>>>>>> >> > > >>>>>>> >> > > >>>>>>> I also use >> > > >>>>>>> >> > > >>>>>>> org.apache.felix.fileinstall-3.0.2.jar >> > > >>>>>>> >> > > >>>>>>> >> > > >>>>>>> ... and a whole lot of other bundles. >> > > >>>>>>> >> > > >>>>>>> I publish services using factories. An example of a >> configuration >> > > >> file >> > > >>>>>>> >> > > >>>>>> for >> > > >>>>>> >> > > >>>>>>> my factories is: >> > > >>>>>>> >> > > >>>>>>> connect.enabled=true >> > > >>>>>>> >> > > >>>>>>> connect.name=Sample file transfer from file to file >> > > >>>>>>> >> > > >>>>>>> >> > > >>>>>>> The "connect.enabled" property is bound to the field in my >> > service >> > > >> class >> > > >>>>>>> that is a "controller": >> > > >>>>>>> >> > > >>>>>>> @Controller >> > > >>>>>>> >> > > >>>>>>> @Property(name = "connect.enabled", mandatory = false, value = >> > > >> "true") >> > > >>>>>>> >> > > >>>>>>> private boolean mValid; >> > > >>>>>>> >> > > >>>>>>> >> > > >>>>>>> The intention is that I can then disable my service by setting >> > this >> > > >>>>>>> configuration property to false. However, I've encounted a >> > problem >> > > >>>>>>> >> > > >>>>>> regarding >> > > >>>>>> >> > > >>>>>>> this. While the service is active, I set "connect.enabled" to >> > > false. >> > > >>>>>>> File >> > > >>>>>>> install picks up the changes and the service is de-registered >> - >> > > works >> > > >>>>>>> perfectly. But if I now shutdown Karaf and restart it again, >> the >> > > >> service >> > > >>>>>>> >> > > >>>>>> is >> > > >>>>>> >> > > >>>>>>> started (registered) despite the fact that "connect.disabled" >> is >> > > >> still >> > > >>>>>>> false. Is this a bug in iPOJO or have I misunderstood >> something? >> > > >>>>>>> >> > > >>>>>>> When googling about this problem I noticed that there is also >> an >> > > >>>>>>> >> > > >>>>>> annotation >> > > >>>>>> >> > > >>>>>>> called @ServiceController. What is the difference between >> > > @Controller >> > > >>>>>>> and >> > > >>>>>>> @ServiceController? >> > > >>>>>>> >> > > >>>>>>> I tried to switch to @ServiceController instead but get the >> > > following >> > > >>>>>>> >> > > >>>>>> error: >> > > >>>>>> >> > > >>>>>>> 2010-10-01 15:48:03,341 | ERROR | guration Updater | >> configadmin >> > > >>>>>>> >> > > >>>>>>>> | ? ? | >> > > >>>>>>>> [org.apache.felix.ipojo.Factory, >> > > >>>>>>>> >> > > >>>>>>> org.osgi.service.cm.ManagedServiceFactory, >> > > >>>>>> >> > > >>>>>>> id=174, bundle=84]: Updating configuration property >> > > >>>>>>>> >> > > >>>>>>>> >> > > >> >> > > >> > >> {service.pid=connect.skandia.filetransfer.269d25ad-c4d6-4277-9d78-6d4b15acb795, >> > > >>>>>> >> > > >>>>>>> fromuri=file:data/connect/test/sample/file2file, >> > > >>>>>>>> touris=file:data/connect/test/sample/file2file/test-out, >> > > >>>>>>>> service.factorypid=connect.skandia.filetransfer, >> > > >>>>>>>> >> > > >>>>>>>> >> > > >> >> > > >> > >> felix.fileinstall.filename=connect.skandia.filetransfer-sample-file2file.cfg, >> > > >>>>>> >> > > >>>>>>> connect.enabled=true, instance.name >> > > >>>>>>>> >> > > >>>>>>> >> > =connect.skandia.filetransfer.269d25ad-c4d6-4277-9d78-6d4b15acb795, >> > > >>>>>> >> > > >>>>>>> connect.name=Sample file transfer from file to file} caused a >> > > >> problem: >> > > >>>>>>>> Missing handlers : >> > > >> org.apache.felix.ipojo.annotations:servicecontroller >> > > >>>>>>>> >> > > >>>>>>> org.osgi.service.cm.ConfigurationException: >> > > >>>>>>> >> > > >>>>>> >> > > >>>>>> >> > > >> >> > > >> > >> {service.pid=connect.skandia.filetransfer.269d25ad-c4d6-4277-9d78-6d4b15acb795, >> > > >>>>>> >> > > >>>>>>> fromuri=file:data/connect/test/sample/file2file, >> > > >>>>>>>> touris=file:data/connect/test/sample/file2file/test-out, >> > > >>>>>>>> service.factorypid=connect.skandia.filetransfer, >> > > >>>>>>>> >> > > >>>>>>>> >> > > >> >> > > >> > >> felix.fileinstall.filename=connect.skandia.filetransfer-sample-file2file.cfg, >> > > >>>>>> >> > > >>>>>>> connect.enabled=true, instance.name >> > > >>>>>>>> >> > > >>>>>>> >> > =connect.skandia.filetransfer.269d25ad-c4d6-4277-9d78-6d4b15acb795, >> > > >>>>>> >> > > >>>>>>> connect.name=Sample file transfer from file to file} : >> Missing >> > > >> handlers >> > > >>>>>>>> >> > > >>>>>>> : >> > > >>>>>> >> > > >>>>>>> org.apache.felix.ipojo.annotations:servicecontroller >> > > >>>>>>>> >> > > >>>>>>> at >> > > >>>>>>> >> > > >>>>>> >> > > >>>>>> >> > > >> >> > > >> > >> org.apache.felix.ipojo.IPojoFactory.updated(IPojoFactory.java:609)[38:org.apache.felix.ipojo:1.4.0] >> > > >>>>>> >> > > >>>>>>> at >> > > >>>>>>> >> > > >>>>>> >> > > >>>>>> >> > > >> >> > > >> > >> org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceFactoryUpdate.run(ConfigurationManager.java:1279)[6:org.apache.felix.configadmin:1.2.4] >> > > >>>>>> >> > > >>>>>>> at >> > > >>>>>>> >> > > >>>>>> >> > > >>>>>> >> > > >> >> > > >> > >> org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:88)[6:org.apache.felix.configadmin:1.2.4] >> > > >>>>>> >> > > >>>>>>> >> > > >>>>>>> I'm not sure in which jar the >> > > >>>>>>> " org.apache.felix.ipojo.annotations:servicecontroller" >> resides. >> > I >> > > >> tried >> > > >>>>>>> >> > > >>>>>> to >> > > >>>>>> >> > > >>>>>>> deploy "org.apache.felix.ipojo.handler.whiteboard-1.4.0.jar" >> but >> > it >> > > >>>>>>> >> > > >>>>>> didn't >> > > >>>>>> >> > > >>>>>>> seem to help. >> > > >>>>>>> >> > > >>>>>>> Can anyone help me sort this out? >> > > >>>>>>> >> > > >>>>>>> /Bengt >> > > >>>>>>> >> > > >>>>>>> >> > > >>>>>> >> > > >>>>>> -- >> > > >>>>>> Karl Pauls >> > > >>>>>> [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] >> > > >> > > >> > >> > >

