Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

New and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler

369 views

Published on

OSGi Community Event 2016 Presentation by David Bosschaert (Adobe) & Carsten Ziegeler (Adobe)

The OSGi expert groups are working on the next big release. Learn in this session about the various new specification efforts going on and how they will make your developer life easier. The new specifications range from configuration handling, object conversion, JAX-RS, distributed eventing, to cloud and IoT.

Published in: Technology
  • Be the first to comment

New and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler

  1. 1. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. OSGi R7 upcoming specifications David Bosschaert & Carsten Ziegeler | Adobe
  2. 2. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Carsten Ziegeler  RnD Adobe Research Switzerland  Member of the Apache Software Foundation  VP of Apache Felix and Sling  OSGi Expert Groups and Board member 2
  3. 3. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. David Bosschaert  Adobe R&D Ireland  OSGi EEG co-chair  Apache member and committer  ISO JTC1 SC38 (Cloud Computing) Ireland committee member 3
  4. 4. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. OSGi Specification Process  Requirements, Use Cases -> RFP  Technical Specification -> RFC  https://github.com/osgi/design  Reference Implementation  Conformance Test Suite  Spec Chapter 4
  5. 5. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Converter and Serialization Service
  6. 6. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Object Conversion  Wouldn’t you like to convert anything to everything?  Peter Kriens’ work in Bnd started it  Convert  Scalars, Collections, Arrays  Interfaces, maps, DTOs, JavaBeans, Annotations  Need predictable behaviour – as little implementation freedom as possible  Can be customized RFC 215 – Implementation in Apache Felix (/converter) 6
  7. 7. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Sample conversions  Examples: Converter c = new StandardConverter(); // Convert scalars int i = c.convert("123").to(int.class); UUID id = c.convert("067e6162-3b6f-4ae2-a171-2470b63dff00").to(UUID.class); List<String> ls = Arrays.asList("978", "142", "-99"); short[] la = c.convert(ls).to(short[].class); 7
  8. 8. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Convert configuration data into typed information with defaults Map<String, String> myMap = new HashMap<>(); myMap.put("refresh", "750"); myMap.put("other", "hello"); // Convert map structures @interface MyAnnotation { int refresh() default 500; String temp() default "/tmp"; } MyAnnotation myAnn = converter.convert(someMap).to(MyAnnotation.class) int refresh = myAnn.refresh(); // 750 Strine temp = myAnn.temp(); // "/tmp" 8
  9. 9. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Customize your converter The converter service itself always behaves the same  Need customizations? Create a new converter: ConverterBuilder  Change default behaviour of array to scalar conversion  Convert char[] to String via adapter // Default behaviour String s = converter.convert(new char[] {‘h’, ‘i’}).to(String.class); // s = “h” Converter c = converter.newConverterBuilder() .rule(char[].class, String.class, MyCnv::caToString, MyCnv::stringToCA) .build(); String s2 = c.convert(new char[] {‘h’, ‘i’}).to(String.class); // ss=“hi” 9
  10. 10. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Serialization service  Take an object, turn it into a file/stream, and back  with the help of the converter  YAML, JSON, or your own format  Serializations can be customized with the converter 10
  11. 11. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Example JSON Serializer @Reference(target="(osgi.mimetype=application/json)") Serializer jsonSerializer; public void someMethod() { Map m = … some map …; String s = jsonSerializer.serialize(m).toString(); MyBean someBean = … some Java Bean …; String s2 = jsonSerializer.serialize(someBean).toString(); // and deserialize back MyBean recreated = jsonSerializer.deserialize(MyBean.class).from(s2); 11 {"prop1": "val1", "prop2": 42, "nested": {"really": true} }
  12. 12. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Config Admin and Configurator
  13. 13. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. OSGi Configurations  Configuration Admin Improvements  Alias for factory configurations  Optimized change handling  Revived ConfigurationPlugin 13
  14. 14. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Factory Configuration Alias 14 Configuration Admin Factor y Cfg create PID? Factory PID Configuration Admin Factor y Cfg create PID=Factory PID#alias Factory PID Alias
  15. 15. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Configuration Handling 15 Configuration Admin Cfg update Components Managed Service Listeners Changed?
  16. 16. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Configuration Admin Plugins 16 Configuration Admin Component Plugin Plugin Plugin Plugin Cfg Cfg‘ prop=${database.url } prop=myserver:987 7
  17. 17. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Reusable Configuration Format I configurations: - my.special.component: some_prop: 42 and_another: "some string" - and.a.factory.cmp#foo ... - and.a.factory.cmp#bar ... 17
  18. 18. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Reusable Configuration Format II configurations: - my.special.component: some_prop: 42 and_another: "some string" :configurator:environments: - dev - test 18
  19. 19. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. OSGi Configurator  Configurations as bundle resources  Environment support  Binaries  State handling and ranking 19
  20. 20. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Cluster Information previously known as Cloud Ecosystems
  21. 21. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Cluster Information OSGi frameworks running in a distributed environment  Cloud  IoT  <buzzword xyz in the future> Many frameworks  New ones appearing  … and disappearing  Other entities too, like databases 21
  22. 22. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Cluster Information Discovery of OSGi frameworks in a distributed environment  Find out what is available  get notifications of changes  Provision your application within the given resources  Also: non-OSGi frameworks (e.g. Database)  Monitor your application  Make changes if needed RFC 183 – Implementation in Eclipse Concierge 22
  23. 23. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Cluster Information FrameworkNodeStatus service provides metadata  Java version  OSGi version  OS version  IP address  Physical location (country, ISO 3166)  Metrics  tags / other / custom  Provisioning API (install/start/stop/uninstall bundles etc…) 23
  24. 24. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Declarative Service updates
  25. 25. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Declarative Service Updates  Field Injection of activation objects  Constructor injection  Nicer property handling 25
  26. 26. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Activation Objects 26 @Component public class MyComponent { public @interface Config { int easy_max() default 10; int medium_max() default 50; int hard_max() default 100; } @Activate private BundleContext bundleContext; @Activate private Config config;
  27. 27. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Constructor Injection 27 @Component public class MyComponent { @Activate public MyComponent( BundleContext bundleContext, @Reference EventAdmin eventAdmin, Config config, @Reference List<Receivers> receivers) {
  28. 28. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Component Properties pre R7 28 @Component(service = ServletContextHelper.class, property = { HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME + "=" + AppServletContext.NAME, HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_PATH + "=/guessinggame" } ) public class AppServletContext extends ServletContextHelper {
  29. 29. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Custom Annotations 29 @ComponentPropertyType public @interface ServletContext { String osgi_http_whiteboard_context_name(); String osgi_http_whiteboard_context_path(); } @Component(service = ServletContextHelper.class) @ServletContext( osgi_http_whiteboard_context_name = AppServletContext.NAME, osgi_http_whiteboard_context_path = "/guessinggame“ ) public class AppServletContext extends ServletContextHelper {
  30. 30. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Push Streams
  31. 31. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Push Streams Like Java 8 streams, but data is pushed For event-based data, which may or may not be infinite  Async processing and buffering  Supports back pressure  Mapping, filtering, flat-mapping  Coalescing and windowing  Merging and splitting Example:  Humidity reader/processor stream  sends an alarm when over 90% RFC 216 – Implementation will be in Apache Aries 31
  32. 32. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Asynchronous Push Streams example PushStreamProvider psp = new PushStreamProvider(); try (SimplePushEventSource<Long> ses = psp.createSimpleEventSource(Long.class)) { ses.connectPromise().then(p -> { long counter = 0; while (counter < Long.MAX_VALUE && ses.isConnected()) { ses.publish(++counter); Thread.sleep(100); System.out.println("Published: " + counter); } return null; }); psp.createStream(ses). filter(l -> l % 2L == 0). forEach(f -> System.out.println("Consumed even: " + f)); 32
  33. 33. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Additional OSGi R7 work
  34. 34. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. And much more...  Service Decorations  Http Whiteboard Update  Transaction Control  JPA Updates  Remote Service Intents 34
  35. 35. © 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. R7 Early Spec Draft Available  https://www.osgi.org/developer/specifications/drafts/ 35

×