OSGi enRoute Unveiled - P Kriens

Post on 29-Nov-2014

814 views 1 download

description

OSGi enRoute is an OSGi project to make OSGi as easy to use as some of non-java dynamic web development environments but still provide the benefits of OSGi's strong modularity. OSGi makes it easy to get started with OSGi by providing an integrated tool chain with several runtime environments, that uses OSGi as it always was intended to be used. By leveraging OSGi's powerful features like services and the powerful requirement/capability model, development of applications can be significantly simplified. This presentation will provide an introduction to OSGi, the way it is used in enRoute, and then a demo of how to build an application with enRoute. Bio: Peter Kriens is an independent consultant since 1990.He currently works for the OSGi Alliance and Paremus. During the eighties he developed advanced distributed systems for newspapers based on microcomputers based on, at the time very novel, object oriented technologies. For this experience in Objects he was hired by a number of international companies, including Adobe, Intel, Ericsson, IBM, and many others. During his work at Ericsson Research in 1998 he got involved with the OSGi specification; Later he became the primary editor for these specifications. In 2005 he was awarded the OSGi Fellows title. After taking a sabbatical in 2012 to develop jpm4j he returned to the OSGi Alliance to help increasing adoption. He is Dutch but decided to live in France.

Transcript of OSGi enRoute Unveiled - P Kriens

OSGi enRouteAn Development Chain for OSGi

αβ

A

B

AB

C

D

7.

04.23.14 EnRoute LOGO DEVELOPMENT ALTERNATIVE DESIGN SOLUTIONS

A

1

2

3

B C

04.23.14 EnRoute LOGO DEVELOPMENT ALTERNATIVE DESIGN SOLUTIONS

A

1

2

3

B C

04.23.14 EnRoute LOGO DEVELOPMENT ALTERNATIVE DESIGN SOLUTIONS

A

1

2

3

B C04.23.14 EnRoute LOGO DEVELOPMENT ALTERNATIVE DESIGN SOLUTIONS

A

1

2

3

B C04.23.14 EnRoute LOGO DEVELOPMENT ALTERNATIVE DESIGN SOLUTIONS

A

1

2

3

B C

04.23.14 EnRoute LOGO DEVELOPMENT ALTERNATIVE DESIGN SOLUTIONS

A

1

2

3

B C

04.23.14 EnRoute LOGO DEVELOPMENT ALTERNATIVE DESIGN SOLUTIONS

A

1

2

3

B C

04.23.14 EnRoute LOGO DEVELOPMENT ALTERNATIVE DESIGN SOLUTIONS

A

1

2

3

B C

04.23.14 EnRoute LOGO DEVELOPMENT ALTERNATIVE DESIGN SOLUTIONS

A

1

2

3

B C

The existential question

Why OSGi?

“Hello World”

… is not a benchmark

Language

Dev Chain

Small versus Largeco

st o

f cha

nge

functionality

dynamic languages

Java & OSGi

Startup cost of Java (statically typed

languages) is higher

However, long term cost is much lower

target.foo(15,”abc”); target.foo(15,”abc”);

Javascript Java

You HOPE target implements foo …

You KNOW target implements foo …

and expects an integer and a string

Your IDE knows exactly who is using this

OSGi extends type safety to modules that evolve

What is OSGi enRoute?co

st o

f cha

nge

functionality

dynamic languages

Java & OSGi

How?

OSGi enRoute• µService Oriented Programming

• To reduce system complexity

• Dependency Management

• To reduce errors in development & operations

• Tooling

• To reduce time to market

• Documentation & Training

• To reduce confusion with developers

Development Process

Components

Run!Descriptor

Distro

enRoute!Profile

other!API’s

Deployable!Unit

test

compile

resolve

build

release

define

baseline

external dependencies

QA & Production

staging

bnd, the little engine that built …

bndlib

bndtools (eclipse)maven

gradle, ant

bnd command line

bundle bundle

workspace

project

cnf

project

profiles

Profiles• A profile is specific catalog of specifications that vendors

can provide in a distribution.

• An OSGi Profile consists of

• µServices — Specifications of either OSGi Alliance or external µservices.

• Extenders — An extender provides support functionality to OSGi bundles.

• Capabilities — A capability describes a feature/function/resource of the underlying system in abstract format.

Profiles• Each OSGi enRoute Profile is represented by a

clean signed JAR library that can be used to build bundles against.

• This is a specification only library,

• It can not introduce unwanted dependencies, or

• Let developers accidentally use proprietary features of a vendor

Planned Profiles• java 1.8 — All profiles are based on Java 1.8

• base — A minimum profile, mostly as common base and for demonstrations. It provides support for the best practices in our industry.

• base.debug — Supports developing and debugging

• web — Web application development optimized for single page web apps.

• web.debug — Supports developing and debugging web apps.

• persistence — Provides support for JPA on OSGi

Base Profile• OSGi Core Framework — R6

• OSGi Compendium — ConfigurationAdmin, Coordinator, EventAdmin, LogService, MetaTypeService,UserAdmin

• Logging — Extensive Java Logging and SLF4J (dynamic!) logging support. Both service based an statics.

• OSGi enRoute Support!

• Requirements and Capabilities — Completely developed with the R&C model in mind

• Specifications in code — Extensive support to use Java classes and interfaces to also specifies non-Java aspects. E.g. license headers, forms, versioning, etc. Mostly through annotations.

Base Profile• OSGi enRoute services!

• Authenticator and Authority — For extensible security

• ConfigurationDone — To signal end of initialization at startup

• DTOs — Extensive support for Data Transfer Objects (JSON, conversion, diffing, named access)

• Launched — Provides access to startup parameters

• LoggerAdmin — Administrative front end to logging. Can handle OSGi, SLF4J, and Java Logging

• java.util.Timer — Scheduled tasks

• java.util.concurrent.Executor — Background tasks

package com.api

publishbind

subscribe

dependency

Components

Component (object)

Creates a component

Can (de)activate, gets configuration data

Service dependency

Bundles

Bundlecomponent

component

component

component

Bundles

Bundle

Private packages

Exported packages

Calculated imports

bnd descriptor

Continuous build JARs

Content, e.g. Component XML

external dependencies

(or where the heck is maven central????)

Repository (includes maven central)

Search repos

Opens browser window

OSGi Framework

Bundle

Assemble

Bundle

BundleBundle

BundleBundle

OSGi Framework

distros

Distros• A distro provides the runtime environment for one

or more profiles

• The OSGi enRoute project will deliver a reference distribution for all profiles based on open source and OSGi provided bundles

• Members and other companies can provide other, competing, interoperable, distributions (And are actively encouraged to do so).

how do we prevent vendor lock-in?

foo =14 base =“bar” id =21

namespace

Capability Model

(foo>=14)

Requirement Capability

osgi.wiring.package

Capability Model

(& (osgi.wiring.package=com.acme) (version>=1.2) )

Import Export

osgi.wiring.package=com.acme version=1.2

Resolve requirements

bndrun descriptor

Requirements

Debug

Running

Resolved bundles

staging

StagingOSGi Framework

Export

release

Semantic Versioning

• major – Breaking change for consumers

• minor – Breaking change for providers

• micro – Invisible change

baselining

Released bundles

NoSuchMethodException

Incompatible API change

version wrong

command line

continuous integration

summary

Continuous Integration?

IDE? command line?

Repository?

MethodClassPackageBundleWorkspace returnparameters methodmethodclass classpackage packagebundle bundle

bnd(tools) gradle, bnd

jpm4j (maven central)

travis

// TODO

TODO• bnd(tools) documentation

• Base Tutorial

• Additional profiles

• Additional deployment standards

• Create a community!