osgi puzzlers - neil bartlett & peter kriens

18
OSGi Puzzlers Neil Bartlett and Peter Kriens

Upload: mfrancis

Post on 19-May-2015

1.218 views

Category:

Technology


3 download

DESCRIPTION

OSGi Community Event 2013 (http://www.osgi.org/CommunityEvent2013/Schedule) Lightning Talk ABSTRACT A fun look at some of the traps and pitfalls that people come across when working with OSGi, along with suggestions on how you should deal with these cases in point.

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!