Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf ·...

49
Warum OSGi Christian Baranowski

Transcript of Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf ·...

Page 1: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

Warum OSGiChristian Baranowski

Page 2: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

Willkommen• Christian Baranowski

• Software Qualitätssicherung @ SEITENBAU Gmbh Konstanz (DE)

• Custom Software Solutions

• E-Government Solutions

• Identity Management and SSO Solutions

• www.seitenbau.de

• Vorstand OSGi Users' Forum Germany

• Co-lead (mit Jochen Hiller) German Enterprise Working Group.

• OSGi Code Camp

Page 3: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

OSGi

Page 4: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

OSGi

ModularityModules

Page 5: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

OSGi

ModularityModules Lifecycle

Page 6: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

OSGi

ModularityModules Lifecycle Services

B

A

Service

Page 7: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

OSGi

ModularityModules Lifecycle Services

Security

B

A

Service

Page 8: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

OSGi

ModularityModules Lifecycle Services

Security

B

A

Serviceist����������� ������������������  ein����������� ������������������  offener����������� ������������������  Standard����������� ������������������  der����������� ������������������  

Page 9: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

“Interesting to see rising interest in OSGi support for

typesafe libraries.

I thought OSGi was dead.“- Heiko Seeberger via Twitter

Page 10: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

OSGi is alive and the community ...

OSGi ist eine Java

Nischentechnologie

Page 11: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

Aber die OSGi Nische ist nicht leer

Page 12: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

Aber die OSGi Nische ist nicht leer

Page 13: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

Wann ist OSGi denn sinnvoll?

Page 14: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

“OSGi is a great solution for complex applications with stringent modularity

requirements“ - Rod Johnson

Page 15: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

Erweiterbarkeit / Plugins

Firefox Eclipse Maven

JenkinsSpring Roo

Page 16: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

Bundle

Page 17: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

Bundle

JAR

Private����������� ������������������  Packages

Exported����������� ������������������  Packages

Imported����������� ������������������  Packages

Page 18: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

Funktionen Klassen Packages

Modul Level

Page 19: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

Funktionen Klassen Packages Bundles

Modul Level

Page 20: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

Bundles

Page 21: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

BundlesA

Provider����������� ������������������  Bundle

Page 22: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

BundlesA

Provider����������� ������������������  Bundle

Manifest-Version: 1.0Bundle-ManifestVersion: 2Bundle-SymbolicName: ABundle-Version: 1.0.1Export-Package: echo.api;version="1.0.0", echo.sysout;version="1.0.0"

Page 23: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

BundlesA B

Consumer����������� ������������������  BundleProvider����������� ������������������  Bundle

Manifest-Version: 1.0Bundle-ManifestVersion: 2Bundle-SymbolicName: ABundle-Version: 1.0.1Export-Package: echo.api;version="1.0.0", echo.sysout;version="1.0.0"

Page 24: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

BundlesA B

Consumer����������� ������������������  BundleProvider����������� ������������������  Bundle

Manifest-Version: 1.0Bundle-ManifestVersion: 2Bundle-SymbolicName: BBundle-Version: 1.0.0Import-Package: echo.api;version="[1.0,2)", echo.sysout;version="[1.0,2)"

Manifest-Version: 1.0Bundle-ManifestVersion: 2Bundle-SymbolicName: ABundle-Version: 1.0.1Export-Package: echo.api;version="1.0.0", echo.sysout;version="1.0.0"

Page 25: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

Demo Modularity / Lifecycle

API

World

Box

Provisioning

Extender

Arch

Desktop

Page 26: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

OSGi Services

Page 27: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

OSGi Services

API����������� ������������������  Bundle

Manifest-Version: 1.0Bundle-ManifestVersion: 2Bundle-SymbolicName: apiBundle-Version: 2.0.0Export-Package: echo.api;version="1.0.0"

Page 28: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

OSGi ServicesProvider����������� ������������������  Bundle

API����������� ������������������  Bundle

Service

Manifest-Version: 1.0Bundle-ManifestVersion: 2Bundle-SymbolicName: apiBundle-Version: 2.0.0Export-Package: echo.api;version="1.0.0"

Manifest-Version: 1.0Bundle-ManifestVersion: 2Bundle-SymbolicName: ABundle-Version: 1.0.1Import-Package: echo.api;version="[1.0,2)"Service-Component: OSGI-INF/EchoProvider.xml

Page 29: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

OSGi ServicesConsumer����������� ������������������  BundleProvider����������� ������������������  Bundle

API����������� ������������������  Bundle

Service

Manifest-Version: 1.0Bundle-ManifestVersion: 2Bundle-SymbolicName: apiBundle-Version: 2.0.0Export-Package: echo.api;version="1.0.0"

Manifest-Version: 1.0Bundle-ManifestVersion: 2Bundle-SymbolicName: BBundle-Version: 1.0.0Import-Package: echo.api;version="[1.0,2)"Service-Component: OSGI-INF/EchoClient.xml

Manifest-Version: 1.0Bundle-ManifestVersion: 2Bundle-SymbolicName: ABundle-Version: 1.0.1Import-Package: echo.api;version="[1.0,2)"Service-Component: OSGI-INF/EchoProvider.xml

Page 30: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

OSGi ServicesConsumer����������� ������������������  BundleProvider����������� ������������������  Bundle

API����������� ������������������  Bundle

Service

Manifest-Version: 1.0Bundle-ManifestVersion: 2Bundle-SymbolicName: apiBundle-Version: 2.0.0Export-Package: echo.api;version="1.0.0"

Manifest-Version: 1.0Bundle-ManifestVersion: 2Bundle-SymbolicName: BBundle-Version: 1.0.0Import-Package: echo.api;version="[1.0,2)"Service-Component: OSGI-INF/EchoClient.xml

Manifest-Version: 1.0Bundle-ManifestVersion: 2Bundle-SymbolicName: ABundle-Version: 1.0.1Import-Package: echo.api;version="[1.0,2)"Service-Component: OSGI-INF/EchoProvider.xml

Instance����������� ������������������  Coupling

Page 31: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

Service Registry

Provider

Consumer

Service Registry

- register- unregister

- get- listen

Name Valuetype api.Echo

availavility 5

Name Valuetype api.Echo

availavility 5... ...

Page 32: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

OSGi Services Demo

API

World

Robot Sensordevices

Desktop

Wall

Page 33: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

OSGi Declarative Services

API����������� ������������������  Bundle

Page 34: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

OSGi Declarative Services Provider����������� ������������������  Bundle

API����������� ������������������  Bundle

Service

<scr:component name="echo.sysout.EchoProvider">

<implementation class="echo.sysout.EchoProvider"/>

<service>

<provide interface="echo.api.Echo"/>

</service>

</scr:component>

Page 35: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

OSGi Declarative Services Consumer����������� ������������������  BundleProvider����������� ������������������  Bundle

API����������� ������������������  Bundle

Service

<scr:component name="echo.consumer.EchoClient">

<implementation class="echo.consumer.EchoClient"/>

<reference name="Echo"

interface="echo.api.Echo"

bind="setEcho" unbind="unsetEcho"/>

</scr:component>

<scr:component name="echo.sysout.EchoProvider">

<implementation class="echo.sysout.EchoProvider"/>

<service>

<provide interface="echo.api.Echo"/>

</service>

</scr:component>

Page 36: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

DS AnnotationConsumer����������� ������������������  BundleProvider����������� ������������������  Bundle

API����������� ������������������  Bundle

Service

import org.osgi.service.component.annotations.*;import echo.api.Echo;

@Componentpublic class EchoClient {

Echo echo; @Reference public void setEcho(Echo echo){ this.echo = echo; } public void unsetEcho(Echo echo){ this.echo = null; }}

import org.osgi.service.component.annotations.*;import echo.api.Echo;

@Componentpublic class EchoProvider implements Echo { @Activate public void activate() { }

}

Page 37: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

Blueprint Services

API����������� ������������������  Bundle

Page 38: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

Blueprint ServicesConsumer����������� ������������������  Bundle

API����������� ������������������  Bundle

<blueprint> <bean class="echo.consumer.EchoClient"> <property name="echo" ref="echo" /> </bean></blueprint>

core-context.xml

Page 39: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

Blueprint ServicesConsumer����������� ������������������  Bundle

API����������� ������������������  Bundle

Service

<blueprint> <bean class="echo.consumer.EchoClient"> <property name="echo" ref="echo" /> </bean></blueprint>

<blueprint>

<reference id="echo" interface="echo.api.Echo"/></blueprint>

core-context.xml

osgi-context.xml

Page 40: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

Blueprint ServicesConsumer����������� ������������������  BundleProvider����������� ������������������  Bundle

API����������� ������������������  Bundle

Service

<beans> <context:component-scan

base-package="echo.sysout" /></beans>

core-context.xml

@Component("echo")public class EchoProvider implements Echo { @PostConstruct public void init() { }}

Spring����������� ������������������  Proprietär

<blueprint> <bean class="echo.consumer.EchoClient"> <property name="echo" ref="echo" /> </bean></blueprint>

<blueprint>

<reference id="echo" interface="echo.api.Echo"/></blueprint>

core-context.xml

osgi-context.xml

Page 41: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

Blueprint ServicesConsumer����������� ������������������  BundleProvider����������� ������������������  Bundle

API����������� ������������������  Bundle

Service

<beans> <context:component-scan

base-package="echo.sysout" /></beans>

core-context.xml

<blueprint> <service ref="echo"

interface="echo.api.Echo" /></blueprint>

@Component("echo")public class EchoProvider implements Echo { @PostConstruct public void init() { }}

osgi-context.xml

Spring����������� ������������������  Proprietär

<blueprint> <bean class="echo.consumer.EchoClient"> <property name="echo" ref="echo" /> </bean></blueprint>

<blueprint>

<reference id="echo" interface="echo.api.Echo"/></blueprint>

core-context.xml

osgi-context.xml

Page 42: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

Demo Dynamik mit OSGi Services

Page 43: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

PojoSRPojo Service Registry

Provider

Consumer

Service Registry

- register- unregister

- get- listen

Name Valuetype api.Echo

availavility 5

Name Valuetype api.Echo

availavility 5... ...

Page 44: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

Remote ServicesConsumer����������� ������������������  BundleProvider����������� ������������������  BundleAPI����������� ������������������  Bundle

exported����������� ������������������  service

listen

get

service.exported.interfaces=*

API����������� ������������������  Bundle

imported����������� ������������������  service

Distribution Provider Impl. (ECF)

endpoint

register

to����������� ������������������  endpoint

Host����������� ������������������  A Host����������� ������������������  B

Page 45: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

Bndtools

Semantic VersioningInstant Builder Integrated Testing

OBR ResolvingRepositoriesImport Analysis

Page 46: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

Warum OSGi?1. Modules, Extension, Plug-ins, Plattformen

2. Services, Service Registry, Dynamik Instance Coupling

3. Einfachere Entwicklung keine Restarts

Page 47: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

“Warum OSGi?

- BJ Hargrave, IBM Peter Kriens, aQute

... because it is a better way to develop

software ...“

Page 48: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

Q&A

Page 49: Warum OSGi - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs//2012/folien/D7.pdf · OSGI-INF/EchoClient.xml Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName:

Ressourcen• OSGi Alliance

http://www.osgi.org/

• OSGi in Action (ISBN 1933988916)Richard S. Hall, Karl Pauls, Stuart McCulloch, and David Savage

• Why OSGi? BJ Hargrave (IBM), Peter Kriens (aQute)http://www.slideshare.net/bjhargrave/why-osgi

• OSGi: Not Easy Enough to Use. Not as Productive as it Should Be, Rod Johnsonhttp://www.theserverside.com/news/2240037102/OSGi-Not-Easy-Enough-to-Use-Not-as-Productive-as-it-Should-Be

• Bndtools http://bndtools.org/

• OSGi Demo Mars Robot Projecthttp://code.google.com/a/eclipselabs.org/p/occ/

• PojoSRhttp://code.google.com/p/pojosr/