OSGi Release 4.2 - Was ist neu?

2,217 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
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,217
On SlideShare
0
From Embeds
0
Number of Embeds
32
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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.    

×