Sorry, I meant I've upgraded to iPOJO 1.6.4 (not 1.6.0 like I wrote in my previous post),
/Bengt 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? > > 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. Otherwise I get the following exception: > > java.lang.NullPointerException > > 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] >> >> >

