The simplest explanation for the behavior change is that no-service components are immediate (there’s no service to request to trigger creation of the component) whereas components exposing a service are delayed unless you explicitly specify immediate. You could have put your system into a state where no one has actually requested the WebServiceAvailable service, so none of the network of components gets activated, and as soon as something gets the service, everything will start up. If you specify immediate=true and you get the old behavior, this is what happened :-). Then you can decide how lazily you want all these services to be instantiated.
I bet that if you removed the karaf scr command and rebuilt (or left out the bundle its in if that wouldn’t kill the console) you’d see the felix scr gogo command…. I thought I remember JB saying recently that karaf supported both karaf and gogo commands, so maybe the karaf one is hiding the same-named felix one. Felix scr logs way more info than you get in the info command, but it’s harder to interpret. You need to make sure the log service is recording debug level, and you need to set the felix scr configuration property ds.loglevel=debug If you are configuring ds using config admin, put this in the configuration. Otherwise you can set it as a framework property (not sure how to do this in karaf, but I imagine it’s possible). hope this helps david jencks > On Dec 8, 2015, at 5:26 PM, Benson Margulies <[email protected]> wrote: > > The component state is '2' (ENABLED). > > I can now describe what brings on this mess. Here's a diff. In a > different bundle, in a different component, I change it from services > = {} to service = { some interface }. > > Thereafter, a whole slew of bundles get into this stuck state. In > particular, a bundle that is absolutely not depending on the one I > change. > > I don't think that plain gogo commands can be run in Karaf, but I > could be misinformed. > > David, short of doing the work of porting the modern SCR display code > from Felix into Karaf, any ideas about what to look at? > > Does SCR log anything I could enable to get a clue? > > diff --git > a/worker/service/src/main/java/com/basistech/ws/worker/service/WorkerService.java > b/worker/service/src/main/java/com/basistech/ws/worker/service/WorkerService.java > index 572bcc6..9f7f22f 100644 > --- > a/worker/service/src/main/java/com/basistech/ws/worker/service/WorkerService.java > +++ > b/worker/service/src/main/java/com/basistech/ws/worker/service/WorkerService.java > @@ -15,6 +15,7 @@ > package com.basistech.ws.worker.service; > > import com.basistech.rosette.RosetteRuntimeException; > +import com.basistech.ws.common.WebServiceAvailable; > import com.basistech.ws.common.json.JsonUtils; > import com.basistech.ws.common.ticket.Ticket; > import com.basistech.ws.worker.api.WorkerInterface; > @@ -51,9 +52,11 @@ import java.util.concurrent.atomic.AtomicLong; > * This registers itself upon activation as a CXF JAX-RS Service. > */ > @Component(configurationPid = "com.basistech.ws.worker", > - /* No services; we're here to register with CXF. */ > - service = {}) > -public class WorkerService { > + // this service simply allows tests to wait for this thing to > be started. > + service = { WebServiceAvailable.class }, > + property = { "service=worker" } > +) > +public class WorkerService implements WebServiceAvailable { > private static final Logger LOG = > LoggerFactory.getLogger(WorkerService.class); > private static final String APPLICATION_X_JACKSON_SMILE = > "application/x-jackson-smile"; > private static final MediaType APPLICATION_X_JACKSON_SMILE_TYPE > > > On Tue, Dec 8, 2015 at 8:09 PM, David Jencks <[email protected]> wrote: >> The gogo scr command is packaged in felix ds itself. If karaf supports gogo >> commands you ought to be able to see it. >> >> Most of those states haven’t existed in years. Are you trying to use the >> backwards compatibility bundle to avoid updating your command to show the >> new spec-defined state info from the DTOs? The model the backwards >> compatibility bundle relies on is really bogus. >> >> david jencks >> >> On Dec 8, 2015, at 4:38 PM, Benson Margulies <[email protected]> wrote: >> >> Dependencies are too big. I will debug the command and tell you what I see >> when I get back home >> >> On Dec 8, 2015 7:29 PM, "Jean-Baptiste Onofré" <[email protected]> wrote: >>> >>> I mean share your code or bundle jar in order for me to try to reproduce >>> and check the actual component state ;) >>> >>> Regards >>> JB >>> >>> On 12/09/2015 01:27 AM, Benson Margulies wrote: >>>> >>>> What do you mean by 'send the bundles'? >>>> >>>> On Dec 8, 2015 7:18 PM, "Jean-Baptiste Onofré" <[email protected] >>>> <mailto:[email protected]>> wrote: >>>> >>>> Just checked, the two states that the command doesn't deal is the >>>> deprecated state: STATE_ENABLED, and STATE_DESTROYED >>>> >>>> Maybe the component are in this state. >>>> >>>> @Benson: can you send the bundles to test if the component is not in >>>> the "deprecated" state ? >>>> >>>> Thanks, >>>> Regards >>>> JB >>>> >>>> On 12/09/2015 01:14 AM, Jean-Baptiste Onofré wrote: >>>> >>>> The ScrDetails command basically does: >>>> >>>> - component.getState() >>>> - then a switch on the int to display human readable string. >>>> >>>> switch (componentState) { >>>> case Component.STATE_ACTIVE: >>>> retVal = "ACTIVE"; >>>> break; >>>> case Component.STATE_ACTIVATING: >>>> retVal = "ACTIVATING"; >>>> break; >>>> case Component.STATE_DEACTIVATING: >>>> retVal = "DEACTIVATING"; >>>> break; >>>> case Component.STATE_DISABLED: >>>> retVal = "DISABLED"; >>>> break; >>>> case Component.STATE_DISABLING: >>>> retVal = "DISABLING"; >>>> break; >>>> case Component.STATE_DISPOSED: >>>> retVal = "DISPOSED"; >>>> break; >>>> case Component.STATE_DISPOSING: >>>> retVal = "DISPOSING"; >>>> break; >>>> case Component.STATE_ENABLING: >>>> retVal = "ENABLING"; >>>> break; >>>> case Component.STATE_FACTORY: >>>> retVal = "FACTORY"; >>>> break; >>>> case Component.STATE_REGISTERED: >>>> retVal = "REGISTERED"; >>>> break; >>>> case Component.STATE_UNSATISFIED: >>>> retVal = "UNSATISFIED"; >>>> break; >>>> >>>> So, it would mean that the component is not in the previous state >>>> (another one maybe missing in the switch). >>>> >>>> Regards >>>> JB >>>> >>>> >>>> On 12/09/2015 01:03 AM, David Jencks wrote: >>>> >>>> I have no idea what this command you are using is, can you >>>> show the >>>> output from the gogo scr:info command for this component? >>>> >>>> thanks >>>> david jencks >>>> >>>> On Dec 8, 2015, at 3:51 PM, Benson Margulies >>>> <[email protected] <mailto:[email protected]>> >>>> wrote: >>>> >>>> I have one particular bundle that gets into this stuck >>>> state since I >>>> made some changes that should be completely unrelated to >>>> it. I badly >>>> want to explain why it's stuck. I am reduced to a sort >>>> of 'bisect' >>>> procedure of carefully remaking the changes to see if I >>>> can isolate >>>> the problem, since the scr:details command does not >>>> explain why it's >>>> left 'null'. >>>> >>>> >>>> On Tue, Dec 8, 2015 at 6:48 PM, Jean-Baptiste Onofré >>>> <[email protected] <mailto:[email protected]>> wrote: >>>> >>>> Karaf 4.0.2 already uses SCR 2.0.2. >>>> >>>> Does it always occur or just on some bundles ? >>>> >>>> Regards >>>> JB >>>> >>>> >>>> On 12/09/2015 12:44 AM, Benson Margulies wrote: >>>> >>>> >>>> Karaf 4.0.2 ... It's scr 2.0.2, but I guess the >>>> command is not so hot. >>>> >>>> eature:info scr >>>> Feature scr 4.0.2 >>>> Description: >>>> Declarative Service support >>>> Feature has no configuration >>>> Feature has no configuration files >>>> Feature has no dependencies. >>>> Feature contains followed bundles: >>>> >>>> >>>> mvn:org.apache.felix/org.apache.felix.metatype/1.1.2 start-level=30 >>>> >>>> mvn:org.apache.felix/org.apache.felix.scr/2.0.2 >>>> start-level=30 >>>> >>>> >>>> mvn:org.apache.felix/org.apache.felix.scr.compat/1.0.2 >>>> start-level=30 >>>> Feature contains followed conditionals: >>>> Conditional(management) has no configuration >>>> Conditional(management) has no configuration >>>> files >>>> Conditional(management) has no dependencies. >>>> Conditional(management) contains followed >>>> bundles: >>>> >>>> >>>> mvn:org.apache.karaf.scr/org.apache.karaf.scr.management/4.0.2 >>>> start-level=30 >>>> Conditional(webconsole) has no configuration >>>> Conditional(webconsole) has no configuration >>>> files >>>> Conditional(webconsole) has no dependencies. >>>> Conditional(webconsole) contains followed >>>> bundles: >>>> >>>> >>>> mvn:org.apache.felix/org.apache.felix.webconsole.plugins.ds/2.0.2 >>>> start-level=30 >>>> Conditional(shell) has no configuration >>>> Conditional(shell) has no configuration files >>>> Conditional(shell) has no dependencies. >>>> Conditional(shell) contains followed bundles: >>>> >>>> >>>> mvn:org.apache.karaf.scr/org.apache.karaf.scr.command/4.0.2 >>>> start-level=30 >>>> >>>> >>>> On Tue, Dec 8, 2015 at 6:11 PM, David Jencks >>>> <[email protected] >>>> <mailto:[email protected]>> >>>> wrote: >>>> >>>> >>>> This looks like a back level scr? maybe >>>> 1.8.x? The info from those >>>> makes it really hard to tell what’s going >>>> on. Is it >>>> configuration required >>>> and no configuration? >>>> >>>> david jencks >>>> >>>> >>>> On Dec 8, 2015, at 2:39 PM, Benson >>>> Margulies <[email protected] >>>> <mailto:[email protected]>> >>>> wrote: >>>> >>>> Here's a bundle. The bundle is active, >>>> its references are satisfied, >>>> but its state is null. What's it stuck >>>> on? >>>> >>>> >>>> 36 | Active | 80 | >>>> 0.7.105.v20151208100035 | >>>> rosapi-worker-bus >>>> >>>> karaf@root>scr:details >>>> >>>> com.basistech.ws.worker.bus.impl.BusService >>>> Component Details >>>> Name : >>>> >>>> com.basistech.ws.worker.bus.impl.BusService >>>> State : null >>>> References >>>> Reference : Bus >>>> State : satisfied >>>> Multiple : single >>>> Optional : mandatory >>>> Policy : static >>>> Service Reference : No Services >>>> bound >>>> Reference : ConfigAdmin >>>> State : satisfied >>>> Multiple : single >>>> Optional : mandatory >>>> Policy : static >>>> Service Reference : No Services >>>> bound >>>> karaf@root> >>>> >>>> >>>> >>>> >>>> -- >>>> Jean-Baptiste Onofré >>>> [email protected] <mailto:[email protected]> >>>> http://blog.nanthrax.net >>>> Talend - http://www.talend.com >>>> >>>> >>>> >>>> >>>> -- >>>> Jean-Baptiste Onofré >>>> [email protected] <mailto:[email protected]> >>>> http://blog.nanthrax.net >>>> Talend - http://www.talend.com >>>> >>> >>> -- >>> Jean-Baptiste Onofré >>> [email protected] >>> http://blog.nanthrax.net >>> Talend - http://www.talend.com >> >>
