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