Transcript
Page 1: OSGi Puzzlers - Neil Bartlett & Peter Kriens

OSGi PuzzlersNeil Bartlett and Peter Kriens

Page 2: OSGi Puzzlers - Neil Bartlett & Peter Kriens

Overlapping Concerns...

Page 3: OSGi Puzzlers - Neil Bartlett & Peter Kriens

What Does it Print?

NOW STOP BUNDLE P1...

P1

P2Example

ComponentMyService

MyService

Page 4: OSGi Puzzlers - Neil Bartlett & Peter Kriens

CKFU!(OBVIOUSLY)

Page 5: OSGi Puzzlers - Neil Bartlett & Peter Kriens

WTF?

OSGi Compendium, section 112.5.10 Dynamic Service Replacement

“SCR must first bind a replacement target service and then unbind the outgoing service” (emphasis added)

Page 6: OSGi Puzzlers - Neil Bartlett & Peter Kriens

Beware this Pattern@Componentpublic class ExampleComponent { private MyService svc; @Reference(dynamic = true) public void setMyService(MyService svc) { this.svc = svc; } public void unsetMyService(MyService svc) { this.svc = null; // OOOPS! }

}

Page 7: OSGi Puzzlers - Neil Bartlett & Peter Kriens

Better...@Componentpublic class ExampleComponent { private MyService svc; @Reference(dynamic = true) public synchronized void setMyService(MyService svc) { this.svc = svc; } public synchronized void unsetMyService(MyService svc) { if (this.svc == svc) this.svc = null; }

}

Page 8: OSGi Puzzlers - Neil Bartlett & Peter Kriens

Even Better...@Componentpublic class ExampleComponent { private final AtomicReference<MyService> svcRef = new AtomicReference<>(); @Reference(dynamic = true) public void setMyService(MyService svc) { svcRef.set(svc); } public void unsetMyService(MyService svc) { svcRef.compareAndSet(svc, null); }

}

Page 9: OSGi Puzzlers - Neil Bartlett & Peter Kriens

Stooopid Hoooman...

Page 10: OSGi Puzzlers - Neil Bartlett & Peter Kriens

What Does It Print?

A. 0,1,2,3,4,5,6,7,8,9,...B. 1,C. 1,2,3,4,5,6,7,8,9,....D. NullPointerException

Page 11: OSGi Puzzlers - Neil Bartlett & Peter Kriens

What Does It Print?

A. 0,1,2,3,4,5,6,7,8,9,...B. 1,C. 1,2,3,4,5,6,7,8,9,....D. NullPointerException

Page 12: OSGi Puzzlers - Neil Bartlett & Peter Kriens

WTF?

Page 13: OSGi Puzzlers - Neil Bartlett & Peter Kriens

Blacklisting

EventHandlers have to return quickly

If they don’t... BLACKLIST! No more events for you.

Humans are slow and stooopid.

Turn off blacklisting, OR use printf-style debugging

Page 14: OSGi Puzzlers - Neil Bartlett & Peter Kriens

You Gotta Start Me Up...

Page 15: OSGi Puzzlers - Neil Bartlett & Peter Kriens

What Does It Print?

A. “Constructed...Started.”B. “Constructed...”C. NothingD. IllegalAccessExceptionE. “Started.”

Page 16: OSGi Puzzlers - Neil Bartlett & Peter Kriens

What Does It Print?

A. “Constructed...Started.”B. “Constructed...”C. NothingD. IllegalAccessExceptionE. “Started.”

Page 17: OSGi Puzzlers - Neil Bartlett & Peter Kriens

WTF?

DS Services are Lazy

Not an error... just waiting for a consumer!

Page 18: OSGi Puzzlers - Neil Bartlett & Peter Kriens

REMEMBER:

OSGi is Your Friend!


Top Related