osgi enroute unveiled - p kriens
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
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!