That was my executor code and not Tims but I did leave out a lot of code not say that I didn't make poor choices.
On Wed, Nov 23, 2016 at 10:19 AM, Peter Kriens <peter.kri...@aqute.biz> wrote: > DS should never call your activate twice. That said, I’ve seen the Felix > impl do this if you throw an exception from activate. It might maybe do > this when your activate does not return? However, then you should some > information from SCR in your log file. > > If you properly end your thread in deactivate then things should work out > fine. > > Your executor code in the previous mail looked very strange, why call an > executor when you wait for the result? It might help to show a skeleton of > your code so we can look at it. > > You also do not show how you stop your thread. You are sure you are using > the right method? Interrupts work best usually. See > http://enroute.osgi.org/appnotes/concurrency.html > > If you have configuration you could get a created/deleted/created but this > should follow the invariants. If you want to prevent this then set the > configurationPolicy=REQUIRE. I also generally use factories even if only > one is required. This is how I normally use components. This is one of the > main reasons for the configurer so that proper configuration is available > for all my components in my application bundle. The idea is to write > reusable components that parameterized by a single bundle that acts as the > root of your application. > > Another explanation is if DS is installed 2x. This will obviously cause > problems. > > Kind regards, > > Peter Kriens > > > > > > > > > > > On 23 Nov 2016, at 16:08, Tim Ward <t...@telensa.com> wrote: > > Three of us have now looked at this code and we can't see any issues like > that with it: > > @Activate > void activate( ComponentContext cc, BundleContext bc, > Map<String,Object> config ) > { > logger.info( "activate" ); > > thread = new Thread( this ); > thread.start(); > } > > > On 23/11/2016 14:58, David Daniel wrote: > > An issue I had with threading was that the activate function was never > completing because I had a loop waiting for the thread. I ended up moving > the thread creation out of activate and using an executor to run the thread > instead of a while loop which took the whole cpu. I also check to make > sure the executer is null and if it is not then I kill the old thread. > > if (_executor != null) { > _executor.shutdownNow(); > while(!_executor.isTerminated()){ > } > } > _executor = Executors.newSingleThreadExecutor(); > > SseWriter writer = new SseWriter(eventQueue, pout, _uri); > int circuitBreaker = 0; > _executor.execute(writer); > > while(!writer.isStreaming() && circuitBreaker < 10 ) { > circuitBreaker++; > Thread.sleep(1000); > } > > _executor.awaitTermination(5, TimeUnit.MINUTES); > > On Wed, Nov 23, 2016 at 9:43 AM, Christian Schneider < > ch...@die-schneider.net> wrote: > >> If you get this: "osgi.enroute.configurer.simple.provider" >> Then the configurer is still active. >> >> Christian >> >> >> On 23.11.2016 15:37, Tim Ward wrote: >> >> No difference. It still activates my @Component twice, with no >> deactivation in between, so I start two threads and one of them crashes. >> >> 2016-11-23 14:35:42,487 | INFO | pool-37-thread-3 | >> provider | 73 - >> osgi.enroute.configurer.simple.provider >> - 2.0.0.201610141744 | Reading configurations for bundle >> com.telensa.apps.planet.p2c.provider 1.0.0.201611231201 in >> configuration/configuration.json >> 2016-11-23 14:35:42,487 | INFO | pool-37-thread-3 | >> provider | 73 - >> osgi.enroute.configurer.simple.provider >> - 2.0.0.201610141744 | Reading configuration for bundle >> com.telensa.apps.planet.p2c.provider 1.0.0.201611231201 in >> configuration/configuration.json null >> 2016-11-23 14:35:42,498 | INFO | pool-37-thread-3 | >> P2cImpl | 74 - com.telensa.apps.planet.p2c.provider >> - 1.0.0.201611231201 | activate >> 2016-11-23 14:35:42,517 | INFO | pool-37-thread-3 | >> P2cImpl | 74 - com.telensa.apps.planet.p2c.provider >> - 1.0.0.201611231201 | activate >> 2016-11-23 14:35:42,517 | INFO | pool-37-thread-3 | >> provider | 73 - >> osgi.enroute.configurer.simple.provider >> - 2.0.0.201610141744 | Reading configurations for bundle >> com.telensa.apps.planet.p2c.provider 1.0.0.201611231201 in >> configuration/configuration.json >> 2016-11-23 14:35:42,518 | INFO | pool-37-thread-3 | >> provider | 73 - >> osgi.enroute.configurer.simple.provider >> - 2.0.0.201610141744 | Reading configuration for bundle >> com.telensa.apps.planet.p2c.provider 1.0.0.201611231201 in >> configuration/configuration.json null >> 2016-11-23 14:35:42,522 | INFO | Thread-47 | >> P2cImpl | 74 - com.telensa.apps.planet.p2c.provider >> - 1.0.0.201611231201 | Thread started running >> 2016-11-23 14:35:42,527 | INFO | Thread-48 | >> P2cImpl | 74 - com.telensa.apps.planet.p2c.provider >> - 1.0.0.201611231201 | Thread started running >> >> >> On 23/11/2016 14:15, Dirk Fauth wrote: >> >> I don't know how it looks like in karaf, but probably yes >> >> Am 23.11.2016 15:09 schrieb "Tim Ward" <t...@telensa.com>: >> >>> Do you mean delete karaf\data and start all over again? - no, I haven't >>> tried that. >>> >>> On 23/11/2016 13:38, Dirk Fauth wrote: >>> >>> Have you cleared the bundle cache in between? >>> >>> Am 23.11.2016 13:42 schrieb "Tim Ward" <t...@telensa.com>: >>> >>>> I have a @Component with immediate=true which fires up a thread in its >>>> @Activate to listen on a socket. The @Deactivate, if it were ever called, >>>> would kill the thread. >>>> >>>> What I appear to be seeing is that the @Activate is called twice with >>>> no call to @Deactivate (so I get two threads, one of which crashes because >>>> the port is in use). >>>> >>>> There may be a hint that this is connected to the processing of >>>> configuration.json, even though there is nothing in configuration.json for >>>> this particular @Component. >>>> >>>> Any ideas? >>>> >>>> When I shut down the system some time later there *are* two calls to >>>> the @Deactivate method logged, which suggests that it is being called and >>>> the logging is working. If I leave out the "immediate=true" there are no >>>> calls to @Activate. >>>> >>> >>> -- >>> Tim Ward >>> >>> >>> _______________________________________________ >>> OSGi Developer Mail List >>> osgi-dev@mail.osgi.org >>> https://mail.osgi.org/mailman/listinfo/osgi-dev >>> >> >> >> _______________________________________________ >> OSGi Developer Mail >> listosgi-...@mail.osgi.orghttps://mail.osgi.org/mailman/listinfo/osgi-dev >> >> -- >> Tim Ward >> >> _______________________________________________ >> OSGi Developer Mail >> listosgi-...@mail.osgi.orghttps://mail.osgi.org/mailman/listinfo/osgi-dev >> >> >> -- >> Christian Schneiderhttp://www.liquid-reality.de >> >> Open Source Architecthttp://www.talend.com >> >> _______________________________________________ OSGi Developer Mail List >> osgi-dev@mail.osgi.org https://mail.osgi.org/mailman/listinfo/osgi-dev > > _______________________________________________ > OSGi Developer Mail > listosgi-...@mail.osgi.orghttps://mail.osgi.org/mailman/listinfo/osgi-dev > > -- > Tim Ward > > _______________________________________________ > 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 >
_______________________________________________ OSGi Developer Mail List osgi-dev@mail.osgi.org https://mail.osgi.org/mailman/listinfo/osgi-dev