new and cool in osgi r7 - david bosschaert & carsten ziegeler

36
© 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. OSGi R7 upcoming specifications David Bosschaert & Carsten Ziegeler | Adobe

Upload: mfrancis

Post on 16-Apr-2017

193 views

Category:

Technology


6 download

TRANSCRIPT

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

© 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.

OSGi R7 upcoming specificationsDavid Bosschaert & Carsten Ziegeler | Adobe

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

© 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 2

Carsten Ziegeler RnD Adobe Research Switzerland Member of the Apache Software Foundation VP of Apache Felix and Sling OSGi Expert Groups and Board member

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

© 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

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

© 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

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

© 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.

Converterand Serialization Service

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

© 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

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

© 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.

Sample conversions Examples:

Converter c = new StandardConverter();

// Convert scalarsint 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

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

© 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(); // 750Strine temp = myAnn.temp(); // "/tmp"

8

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

© 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.

Customize your converterThe 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 behaviourString 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

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

© 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

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

© 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}}

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

© 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.

Config Admin and Configurator

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

© 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.

OSGi Configurations Configuration Admin Improvements

Alias for factory configurations Optimized change handling Revived ConfigurationPlugin

13

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

© 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.

Factory Configuration Alias

14

Configuration AdminFactor

yCfg

create

PID?

Factory PID

Configuration Admin

Factory

Cfg

create

PID=Factory PID#alias

Factory PIDAlias

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

© 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.

Configuration Handling

15

Configuration AdminCfg

updateComponents

Managed Service

Listeners

Changed?

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

© 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.

Configuration Admin Plugins

16

Configuration Admin Component

PluginPlugin

PluginPlugin

Cfg Cfg‘prop=$

{database.url}prop=myserver:9

877

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

© 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.

Reusable Configuration Format Iconfigurations: - my.special.component: some_prop: 42 and_another: "some string"

- and.a.factory.cmp#foo ... - and.a.factory.cmp#bar ...

17

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

© 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.

Reusable Configuration Format IIconfigurations: - my.special.component: some_prop: 42 and_another: "some string" :configurator:environments: - dev - test

18

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

© 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.

OSGi Configurator Configurations as bundle resources Environment support Binaries State handling and ranking

19

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

© 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.

Cluster Informationpreviously known as Cloud Ecosystems

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

© 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.

Cluster InformationOSGi 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

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

© 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.

Cluster InformationDiscovery 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 Concierge22

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

© 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.

Cluster InformationFrameworkNodeStatus 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

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

© 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.

Declarative Service updates

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

© 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.

Declarative Service Updates Field Injection of activation objects Constructor injection Nicer property handling

25

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

© 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.

Activation Objects

26

@Componentpublic class MyComponent {

public @interface Config {int easy_max() default 10;

int medium_max() default 50;

int hard_max() default 100;}

@Activateprivate BundleContext bundleContext;

@Activateprivate Config config;

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

© 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.

Constructor Injection

27

@Componentpublic class MyComponent {

@Activatepublic MyComponent(

BundleContext bundleContext,

@Reference EventAdmin eventAdmin,

Config config,

@Reference List<Receivers> receivers) {

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

© 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 {

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

© 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.

Custom Annotations

29

@ComponentPropertyTypepublic @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 {

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

© 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.

Push Streams

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

© 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.

Push StreamsLike Java 8 streams, but data is pushedFor 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 Aries31

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

© 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.

Asynchronous Push Streams examplePushStreamProvider 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

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

© 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.

Additional OSGi R7 work

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

© 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

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

© 2016 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.

R7 Early Spec Draft Available https://www.osgi.org/developer/specifications/drafts/

35

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