Well, OSGi has a tendency to punish short cuts. In the long run this is very valuable, I’ve seen too many software disasters to sleep well at night. However, for a developer behind his screen and a looming deadline the long term goals are unfortunately not so urgent :-(
Kind regards, Peter Kriens > On 12 Jul 2018, at 13:38, David Leangen via osgi-dev <osgi-dev@mail.osgi.org> > wrote: > > > As always, thank you VERY much to all of you for your great suggestions. I > will look into this from tomorrow. I didn’t know the concept of “bouncing”. > That is interesting. Now that I am aware, I will give more thought to it. > > One thing I have seen stated before on this list is that OSGi is indeed > complex, but it is not accidental complexity. It is simply making complexity > explicit, and providing the tools to work with complexity. I completely agree > with this statement. > > I am still learning all the time, and am always amazed that there is still so > much deeper to go. Thanks for helping me along this journey. > > > Cheers, > =David > > > >> On Jul 12, 2018, at 17:42, Fauth Dirk (AA-AS/EIS2-EU) via osgi-dev >> <osgi-dev@mail.osgi.org <mailto:osgi-dev@mail.osgi.org>> wrote: >> >> If it is a bouncing problem, than you could also try to configure the >> behavior using the property >> >> ds.delayed.keepInstances=true >> >> From the Apache Felix documentation: >> >> Whether or not to keep instances of delayed components once they are not >> referred to any more. The Declarative Services specifications suggests that >> instances of delayed components are disposed off if there is not used any >> longer. Setting this flag causes the components to not be disposed off and >> thus prevent them from being constantly recreated if often used. Examples of >> such components may be EventHandler services. The default is to dispose off >> unused components. See FELIX-3039 >> <https://issues.apache.org/jira/browse/FELIX-3039> for details. >> >> http://felix.apache.org/documentation/subprojects/apache-felix-service-component-runtime.html >> >> <http://felix.apache.org/documentation/subprojects/apache-felix-service-component-runtime.html> >> >> Equinox DS had this set by default, while the default in Felix SCR is false. >> With the usage of Felix SCR in Eclipse we needed to explicitly set this >> parameter to true so the previous behavior persists. >> >> Mit freundlichen Grüßen / Best regards >> >> Dirk Fauth >> >> Automotive Service Solutions, ESI application (AA-AS/EIS2-EU) >> Robert Bosch GmbH | Postfach 11 29 | 73201 Plochingen | GERMANY | >> www.bosch.com <http://www.bosch.com/> >> Tel. +49 7153 666-1155 | dirk.fa...@de.bosch.com >> <mailto:dirk.fa...@de.bosch.com> >> >> Sitz: Stuttgart, Registergericht: Amtsgericht Stuttgart, HRB 14000; >> Aufsichtsratsvorsitzender: Franz Fehrenbach; Geschäftsführung: Dr. Volkmar >> Denner, >> Prof. Dr. Stefan Asenkerschbaumer, Dr. Michael Bolle, Dr. Rolf Bulander, Dr. >> Stefan Hartung, Dr. Markus Heyn, >> Dr. Dirk Hoheisel, Christoph Kübel, Uwe Raschke, Peter Tyroller >> >> >> Von: osgi-dev-boun...@mail.osgi.org <mailto:osgi-dev-boun...@mail.osgi.org> >> [mailto:osgi-dev-boun...@mail.osgi.org >> <mailto:osgi-dev-boun...@mail.osgi.org>] Im Auftrag von Tim Ward via osgi-dev >> Gesendet: Donnerstag, 12. Juli 2018 10:22 >> An: Peter Kriens <peter.kri...@aqute.biz <mailto:peter.kri...@aqute.biz>>; >> OSGi Developer Mail List <osgi-dev@mail.osgi.org >> <mailto:osgi-dev@mail.osgi.org>> >> Betreff: Re: [osgi-dev] Double config >> >> Hi David, >> >> >> This is a gift! :-) It means your code is not handling the dynamics >> correctly and now you know it! >> >> I’m not sure that there’s quite enough evidence to come to this conclusion. >> It could simply be that everything is working fine with a static policy, and >> working the way that DS is supposed to. In general a DS component being >> bounced like this is nothing to worry about, it’s just a change rippling >> through the system, and it’s typically resolved in very short order. If you >> do want to reason about why, however, then there are several places to look. >> >> For some reason, the Component gets activated, deactivated, then activated >> again, which is not desirable. >> ... >> 1. How can I figure out why this is happening. I have tried many approaches, >> but can’t seem to get a clue as to why this is happening. Since it generally >> doesn’t seem to happen for other configured components, I am assuming that >> it is not a Configurator problem. >> >> From the rest of your email it is clear that the configured component >> provides a service. This will make it lazy by default. You have also stated >> that you’re using has a required configuration policy. Therefore it will >> only be activated when: >> >> There is a configuration present >> All of the mandatory services are satisfied >> Someone is actually using the service >> >> The component will then be deactivated when any of these things are >> no-longer true, and so this means that your component may be being bounced >> for several reasons, only one of which is to do with configuration. >> >> While it seems unlikely to me, you seem to be fairly convinced that the >> configuration is at fault so lets start there. >> >> Does the generated XML file in your bundle actually say that the >> configuration is required. This is the configuration used by DS (not the >> annotations) at runtime. It’s unlikely that this has gone wrong, but it’s an >> easy check >> Do you have more than one way of putting configuration into the runtime? If >> you are also using File Install, or some other configuration management >> agent, then it’s entirely possible that you’re seeing a configuration update >> occurring. >> Do you have multiple configuration bundles which both contain a >> configuration for this component? The configurator will process these one at >> a time, and it will result in configuration bouncing >> Is it possible that something is forcing a re-resolve of your configuration >> bundle or the configurator? This could easily trigger the configurations to >> be reprocessed. >> >> Now in my view the most likely reason for this behaviour is that the >> configured component isnot being bounced due to a configuration change. The >> most likely suspect is that the component is simply not being used at that >> time, and so it is being disposed (DS lazy behaviour). This could easily >> happen if one of the dependent services that you mention starts using your >> component, and then is bounced (by a configuration update or whatever) which >> causes your component to be released. If nobody else is using your component >> at the time then it will be deactivated and released. The easiest way to >> verify this is to make your component immediate. This will remove the >> laziness, and you will get a good idea as to whether the bounce is caused by >> things that you depend on, or by things that depend on you. If making your >> component immediate removes the “problem” then it proves that this isn’t a >> problem at all (and you can then remove the immediate behaviour again). >> >> If making your component immediate doesn’t stop the bouncing then the third >> set of things to check is the list of services that your component depends >> on. Is it possible that one of them is being bounced due to a configuration >> update, or perhaps one of their service dependencies being >> unregistered/re-registered? As I mentioned before, bouncing of DS components >> is simply the way that updates propagate through the system when services >> use a static policy. It isn’t inherently a bad thing, but if you want to >> avoid it you have to be dynamic all the way down the dependency graph. >> Usually this is a lot more effort than it’s worth! >> >> I hope this helps, >> >> Tim >> >> >> >> On 12 Jul 2018, at 08:39, Peter Kriens via osgi-dev <osgi-dev@mail.osgi.org >> <mailto:osgi-dev@mail.osgi.org>> wrote: >> >> This is a gift! :-) It means your code is not handling the dynamics >> correctly and now you know it! >> >> The cause is that that the DS starts the components before the Configurator >> has done its work. The easiest solution seems to be to use start levels. If >> your code CAN handle the dynamics, then this is one of the few legitimate >> places where startlevels are useful. I usually oppose it because people do >> not handle the dynamics correctly and want a short cut. This is fine until >> it is not. And the ‘not’ happens guaranteed one day. So first fix the >> dynamics, and then think of solutions that improve the experience. >> >> For this purpose, enRoute Classic had a >> ‘osgi.enroute.configurer.api.ConfigurationDone’ service. If you made an >> @Reference to ConfigurationDone then you were guaranteed to not start before >> the Configurer had done its magic. Since you did not want to depend on such >> a specific service for reasons of cohesion, I developed AggregateState. One >> of the aggregated states was then the presence of the ConfigurationDone >> service. Although this is also not perfectly cohesive it at least aggregates >> all the uncohesive things in one place and it is configurable. >> >> Although this works the customer still is not completely happy since also >> the Aggregate State feels uncohesive. So we’ve been discussing a new angle. >> I want to try to make the Configuration Records _transient_. In Felix Config >> Admin you can provide a persistence service (and it was recently made >> useful). I was thinking of setting a special property in the configuration >> (something like ‘:persistence:transient’). The persistence layer would then >> _not_ persist it. I.e. after a restart there would be no configuration until >> the Configurer sets it. This will (I expect) seriously diminish the bouncing >> caused for these kind of components. >> >> And if you’re asking why I am still on the enRoute classic Configurer. Well, >> it has ‘precious’ fields and they solved a nasty problem. We needed to use a >> well defined value but if the user set one of those values, we wanted to >> keep the user’s value. Quite a common scenario. With `precious` fields you >> rely on default values (so no value for a precious field in the configurer’s >> input) but copy the previous value to the newer configuration, if present. >> Works quite well. >> >> I think `transient` and `precious` could be nice extensions to the new >> Configurator for R8. >> >> Hope this helps. Kind regards, >> >> Peter Kriens >> >> >> On 12 Jul 2018, at 00:48, David Leangen via osgi-dev <osgi-dev@mail.osgi.org >> <mailto:osgi-dev@mail.osgi.org>> wrote: >> >> >> Hi! >> >> A question about component configuration. >> >> I have a component that has a required configuration policy. Using a (pre >> R7) Configurator to configure the component. For some reason, the Component >> gets activated, deactivated, then activated again, which is not desirable. >> >> Questions: >> >> 1. How can I figure out why this is happening. I have tried many approaches, >> but can’t seem to get a clue as to why this is happening. Since it generally >> doesn’t seem to happen for other configured components, I am assuming that >> it is not a Configurator problem. >> >> 2. Is there a way to prohibit this from happening? >> >> >> In the meantime, I will make the dependent services more dynamic so they are >> not thrown off by this change, but their behavior is actually correct: the >> expectation is that the configured service should only get instantiated >> once, so a static @Reference is correct. >> >> >> Thanks! >> =David >> >> >> _______________________________________________ >> OSGi Developer Mail List >> osgi-dev@mail.osgi.org <mailto:osgi-dev@mail.osgi.org> >> https://mail.osgi.org/mailman/listinfo/osgi-dev >> <https://mail.osgi.org/mailman/listinfo/osgi-dev> >> >> _______________________________________________ >> OSGi Developer Mail List >> osgi-dev@mail.osgi.org <mailto:osgi-dev@mail.osgi.org> >> https://mail.osgi.org/mailman/listinfo/osgi-dev >> <https://mail.osgi.org/mailman/listinfo/osgi-dev> >> >> _______________________________________________ >> OSGi Developer Mail List >> osgi-dev@mail.osgi.org <mailto:osgi-dev@mail.osgi.org> >> https://mail.osgi.org/mailman/listinfo/osgi-dev >> <https://mail.osgi.org/mailman/listinfo/osgi-dev> > _______________________________________________ > OSGi Developer Mail List > osgi-dev@mail.osgi.org > https://mail.osgi.org/mailman/listinfo/osgi-dev
_______________________________________________ OSGi Developer Mail List osgi-dev@mail.osgi.org https://mail.osgi.org/mailman/listinfo/osgi-dev