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.

OSGi Release 4.2 - Was ist neu?

2,280 views

Published on

OSGi Release 4.2, Was ist neu ?

Erst kürzlich wurde von der OSGi Alliance die neue Version 4.2 der OSGi Spezifikation veröffentlicht. Während zum einen die Core-Spezifikation überarbeitet und an aktuelle Anforderungen angepasst wurde, enthält die neue Version besonders Enterprise-spezifische Erweiterung wie z.B. Remote Services. Diese Präsentation wird die wichtigsten Änderungen beschreiben und anhand von Code-Beispielen deren Einsatz zeigen.

Published in: Technology, Education
  • Be the first to comment

OSGi Release 4.2 - Was ist neu?

  1. 1. OSGi Release 4.2 Roman Roelofsen Lead Architect @    
  2. 2. OSGi Release 4.2 ● Released 16.09.2009 ● Änderungen Core – Bugfixes – Permissions, Service Hooks, Framework Launching ● Änderungen Compendium – Bugfixes – Diverse neue *-Specification ● Implementierungen     – Apache Felix 2.0, Eclipse Equinox 3.5, ...
  3. 3. OSGi Notation Bundle A registerService addServiceListener Bundle C getService   Bundle B  
  4. 4. Änderungen Core    
  5. 5. Multiple Service Provider Separation ● Problem 1    
  6. 6. Multiple Service Provider Separation ● Problem 2    
  7. 7. Multiple Service Provider Separation ● Problem 3    
  8. 8. Multiple Service Provider Separation ● Mögliche Lösungen – Services unter verschiedenen Class-Namen registrieren – ServiceFactories um das Client Bundle zu identifizieren – ServicePermission erweitern – Verschiedene Package Namen vergeben – BSN im Import-Package verwenden   – PackagePermission erweitern  
  9. 9. Multiple Service Provider Separation ● Mögliche Lösungen – Services unter verschiedenen Class-Namen registrieren – ServiceFactories um das Client Bundle zu identifizieren – ServicePermission erweitern – Verschiedene Package Namen vergeben – BSN im Import-Package verwenden   – PackagePermission erweitern  
  10. 10. Multiple Service Provider Separation ● ServicePermission – ServicePermission("(location=https://www.acme.com/*)", GET ) – Mögliche Filter keys ● id – Bundle ID ● location -Bundle Location ● Signer – Bundle Signer ● name – Bundle symbolic name ● @whatever – Service property 'whatever'    
  11. 11. Multiple Service Provider Separation ● PackagePermission – PackagePermission("(location=http://www.acme.com/*", IMPORT) – Mögliche Filter keys ● id – Bundle ID ● location -Bundle Location ● Signer – Bundle Signer ● name – Bundle symbolic name    
  12. 12. Multiple Service Provider Separation ● Sehr mächtiges Konzept – Application Model, … ● Setzt Java Security voraus!    
  13. 13. DENY Permission ● Problem – Ohne Java Security: alles erlaubt – Mit Java Security: Alles verboten, explizite Freigaben – Sperren von bestimmten Services kaum möglich    
  14. 14. DENY Permission ● Lösung – DENY Permission DENY { [ ..BundleSignerCondition "* ; o=ACME" "!" ] ( ..PackagePermission "com.acme.secret.*" "import,exportonly" ) }    
  15. 15. Service Hooks Specification ● Service Modell OSGi <= 4.1 – Services ● Register ● Unregister ● Find ● Get – ServiceListener ● Statusänderungen    
  16. 16. Service Hooks Specification ● Service Hooks OSGi 4.2 – FindHook (getServiceReference) – EventHook (Service Events) – ListenerHook (ServiceListener)    
  17. 17. Service Hooks Specification    
  18. 18. Service Hooks Specification ● API – context.registerService(ListenerHook.class.getName(), hook, null);    
  19. 19. Framework Launching ● Standardisierte API zum Starten von OSGi Frameworks – Starten/Stoppen – Konfigurationen ● z.B. org.osgi.framework.system.packages ● Nützlich falls ein Framework in eine Anwendung eingebettet werden soll    
  20. 20. Framework Launching Map p = new HashMap(); p.put( "org.osgi.framework.system.packages", "..."); FrameworkFactory factory = (FrameworkFactory) Class.forName( factoryName ) .newInstance(); Framework framework = factory.newFramework(p); framework.init(); BundleContext context = framework.getBundleContext(); context.installBundle( "..." ); framework.start(); framework.waitForStop();    
  21. 21. Änderungen Compendium    
  22. 22. Remote Services ● Ehemals „Distributed OSGi“ ● Spezifiziert Konfigurationsparameter und Semantik um Endpoints basierend auf Services zu erstellen – Es wird kein konkretes Protokoll verwendet ● RPC-orientiert – SOAP, RMI, CORBA, … – Nicht: JMS, MOMs, ...    
  23. 23. Remote Services    
  24. 24. Remote Services End Bundle A DSW point service.exported.interfaces = * service.exported.intents = confidentiality.message.body service.exported.configs = net.soap    
  25. 25. Remote Services End point DSW Bundle B service.imported = <<some value>> service.intends = confidentiality.message.body service.imported.configs = net.soap    
  26. 26. Remote Services    
  27. 27. Remote Services ● Discovery – Protokoll-spezifisch, oder – Statisch OSGI-INF/remote-service/serviceA.xml <service-descriptions xmlns="http://www.osgi.org/xmlns/sd/v1.0.0"> <service-description> <provide interface="remoting.api.RemoteService" /> <property name="osgi.remote.interfaces">*</property> <property name="osgi.remote.configuration.type">pojo</property> <property name="osgi.remote.configuration.pojo.address"> http://localhost:9090/remoteService </property> </service-description> </service-descriptions>    
  28. 28. Blueprint Container Spec. ● Dependency Injection Container ● Basiert auf den Konzepten von Spring/Spring-DM – Diverse Erweiterung wurden im Rahmen der Spezifizierung vorgenommen – Referenzimplementierung: Spring-DM – Zusätzlich: Apache Geronimo Blueprint IBM, Progress, … ● ● „Pimp my DS“    
  29. 29. Blueprint Container Spec.    
  30. 30. Blueprint Container Spec. ● Services registrieren <blueprint> <service id="echoService" interface="com.acme.Echo" ref="echo"/> <bean id="echo" class="com.acme.EchoImpl"> <property name="propName" value="Value"/> </bean> </blueprint>    
  31. 31. Blueprint Container Spec. ● Services konsumieren <blueprint> <reference id=“echoService“ interface=“com.acme.Echo“ filter=“(...)“ /> <bean id="echoClient" class="com.acme.EchoClient"> <property name="echoService" ref=“echoService“ /> </bean> </blueprint>    
  32. 32. Blueprint Container Spec. ● Service Ref List <blueprint> <bean id="listener" class="..." /> <ref-list interface=“....IService“> <reference-listener ref=“listener“ bind-method=“bind“ unbind-method=“unbind“ /> </ref-list> </blueprint>    
  33. 33. Blueprint Container Spec. ● Service Proxies Service Impl 1 Service Bean Ref Service Impl 2 Service Impl 3 •Proxy zum Service   •Wird automatisch ausgetauscht  
  34. 34. Blueprint Container Spec. ● Service Ref Lists Service Impl 1 Service Bean Ref Service Impl 2 List Service Impl 3 •Service Liste •Verändert sich automatisch   •Repräsentiert immer die aktuellen Services  
  35. 35. Blueprint Container Spec. ● Blueprint Events – CREATING, CREATED, … ● Framework Unterstützung (Apache Felix Karaf) ID State Blueprint Level Name [ 0] [Active ][ ] [ 0] System Bundle (1.9.0.SNAPSHOT) [ 1] [Active ] [Created ] [ 30] Apache Felix Karaf :: GShell ... [ 2] [Active ] [Created ] [ 30] Apache Felix Karaf :: GShell ... [ 3] [Active ] [Created ] [ 30] Apache Felix Karaf :: Spring ... ● Ausblick – Custom Namespaces   – ConfigAdmin Unterstützung  
  36. 36. Declarative Services Update ● Service-Component Header unterstützt Wildcards – Service-Component: OSGI-INF/*.xml ● Name Attribute von component ist optional ● Fehlermeldungen von DS mit dem LogService werden über den BundleContext des User- Bundle erzeugt    
  37. 37. Declarative Services Update ● Signatur von bind/unbind OSGi <= 4.1 protected void <method-name>(ServiceReference); protected void <method-name>(<parameter-type>); ● Signatur von bind/unbind OSGi 4.2 protected void <method-name>(ServiceReference); protected void <method-name>(<parameter-type>); protected void <method-name>(<parameter-type>, Map);    
  38. 38. Declarative Services Tipps ● XML Generierung mit BND – Deklarativ ● Service-Component=aQute.tutorial.component.World; log=org.osgi.service.log.LogService – Annotation @Component ● public class AnnotatedComponent { LogService log; @Reference void setLog(LogService log) { this.log=log; }   }  
  39. 39. Declarative Services Tipps ● XML Generierung mit maven-scr-plugin – Serviceabhängigkeiten werden in JavaDoc Kommentaren eingetragen /** * @scr.component */ public class Component { /** * @scr.reference */ LogService log; }    
  40. 40. Bundle Tracker ● ServiceTracker Spec → Tracker Spec ● Tracker Spec – Service Tracker – Bundle Tracker ● API ● BundleTracker(BundleContext,int,BundleTrackerCustomizer) – addingBundle(Bundle,BundleEvent) – modifiedBundle(Bundle,BundleEvent,Object) – removedBundle(Bundle,BundleEvent,Object)     ● bundleTracker.open()
  41. 41. Ausblick OSGi Enterprise ● JDBC Database Access ● JTA Transactions ● JMX ● JNDI ● JPA    
  42. 42. Vielen Dank für Ihre Aufmerksamkeit! Fragen? Roman Roelofsen     r.roelofsen@prosyst.com
  43. 43.    

×