SlideShare ist ein Scribd-Unternehmen logo
1 von 44
Server Revolutions
     Der Spring Source DM Server




Sandro Sonntag - Adorsys GmbH & Co KG
                  1
Was erwartet Sie?

• Einführung in OSGi
• Was bedeutet „Enterprise“ für OSGi?
• Spring Dynamic Modules Architektur
• Eine Spring OSGi App from Scratch
• Einführung in die Konzepte des DM Servers
                    2
Warum noch ein
 Appserver?


      3
Wie funktioniert
  Wiederverwendung
       Heute?
• Auf Service Ebene?
• Auf Library Ebene?
• In unterschiedlichen Versionen?
• Und die Kommunikation zwischen Modulen?
• Und wie geht es Ihrem Permgen Space
  dabei?           4
Klassische Java Systeme
•   Java Standard Edition
    •   System Classloader
    •   eine Version pro Library
    •   Keinerlei Modul oder Komponenten Model auf
        Klassenebene
•   Java Enterprise Edition
    •   Eingeschränkt auf Deployment Typen (EJB, WAR, EAR)
    •   Grobgranular!
    •   Library Wiederverwendung nicht vorgesehen!


                                   5
Potential von OSGi
•   Modularisierung
    •   Auf Library und Service Ebene
•   Deklaration von Abhängigkeiten (zur Laufzeit!)
•   Förderung der Unabhängigkeit von
    Komponenten (Sichtbarkeit/Isolation)
• Sehr Leichtgewichtiger Container
• Kein „One size fits all“ Server mehr
• Bedeutet: riesen Schritt nach vorne!
                         6
Das Geheimnis
        heutiger Appserver
•   Fast alle JEE Application Server basieren heute auf
    OSGi
    •   ...und im Embedded Bereich und in der IDE läuft
        es schon seit Jahren!
•   Aber: keiner lässt die Applikationen von OSGi
    profitieren
•   Warum können Business-Apps nicht die Vorteile
    der OSGi Architektur nutzen?
•   Spring DM macht dies möglich

                            7
Software auf OSGi
•   Websphere
•   JBoss
•   Weblogic
•   OpenEJB
•   Eclipse
•   JOnAS 5
•   GlassFish (v3)
•   ServiceMix

                     8
OSGi?
•   Ist ein Modul Container
•   Partitioniert Systeme in Bundles
•   Build Zeit Abhängigkeiten gelten nun auch zur Runtime
•   Verwaltet Abhängigkeiten zwischen Modulen
•   Isoliert Module (strenge Sichbarkeitsregeln)
•   Vermittelt Services zwischen Bundles
•   kennt Versionierung
•   Sorgt für Disziplin!

                              9
Was ist ein
              Bundle?
• Jedes Bundle hat einen
  eigenen Classloader
• Dadurch können Bundles
  installiert, gestartet, gestopt, neugeladen
  werden
• Bundles legen Ihre Beziehungen zu
  anderen Bundles durch import/export
  fest
• Bundles unterliegen einem Lifecycle
                        10
Service Platform

• Bundles können Services dynamisch
  veröffentlichen
• ServiceRegistry erlaubt es diese Services zu
  nutzen



                     11
Bundle Activator
• Deployment von Services ist nicht
   Deklarativ!
• Vorteil: Flexibilität
• Nachteil: Komplexität, Fehleranfälligkeit
  Manifest-Version: 1.0

  Bundle-Activator: com.javaworld.sample.helloworld.Activator



  public class Activator implements BundleActivator {
      public void start(BundleContext context) throws Exception {
          System.out.println("Hello world");
      }
      public void stop(BundleContext context) throws Exception {
          System.out.println("Goodbye World");
      }
  }
                                          12
Service Registrierung in
             OSGI
public class HelloServiceActivator implements BundleActivator   {
    ServiceRegistration helloServiceRegistration;

    public void start(BundleContext context) throws Exception {
       HelloService helloService = new HelloServiceImpl();
       helloServiceRegistration =
       context.registerService(HelloService.class.getName(),
                                helloService, null);
    }
    public void stop(BundleContext context) throws Exception {
        helloServiceRegistration.unregister();
    }
}




                                      13
Verwendung eines
                 Services in OSGi
public class Activator implements BundleActivator {

    ServiceReference helloServiceReference;

    public void start(BundleContext context) throws Exception {
        System.out.println("Hello World!!");

        helloServiceReference= context.getServiceReference(HelloService.class.getName());
        HelloService helloService =(HelloService)context.getService(helloServiceReference);

        System.out.println(helloService.sayHello());

    }
    public void stop(BundleContext context) throws Exception {
        System.out.println("Goodbye World!!");

        context.ungetService(helloServiceReference);
    }
}



                                              14
Angst?
•   Neuer Infrastrukturcode
    •   Komplex!

    •   Fehleranfällig!

•   Achtung: lookup eines Objekts führt zu einer direkten Referenz des
    Objektes!
    •   Bei undeploy des Impl Bundles muss die Referenz freigegeben werden!

    •   Resourceleaks!

•   Was wenn sich Abhängigkeiten ändern?
    •   Services sollten nicht manuell referenziert werden
    •   Service Tracker wird empfohlen - noch komplexer!

•   Und sieht so die Zukunft aus?


                                      15
OSGi Enterprise

• Webapps
• Business Components
• Transaction manager
• Datasources
• Configurations
                  16
Business
Web Application
                             Services



        Enterprice Infrastructure


 Web Container                ORM


  Transaction MGR         Datasource MGR




             OSGi Platform




                    17
Spring DM Architektur




          18
Bundle Application
         Context
•   Bundle META-INF/spring enthält Konfiguration
•   oder Manifest enthält „Spring-Context: xyz.xml“
    declaration
•   Es werden alle XML Dateien gelesen
•   Ein OSGi Application Context wird erstellt
•   Durch Spring DM Extender ist kein
    BundleActivator notwendig
•   ApplicationContexte sind über die OSGi
    ServiceRegistry zugreifbar
                         19
OSGi Services ala
       Spring
• Import:
 <osgi:reference id="messageService"
 interface="com.xyz.MessageService"/>


• Export:
 <osgi:service ref="beanToBeExported"
 interface="com.xyz.MessageService"/>




                       20
OSGi Registry
           lauschen!
• Es existieren Listener Provider und
  Consumer Seite
• Damit lassen sich sehr elegant Services
  überwachen
   <reference id="someService" interface="com.xyz.MessageService">
     <listener bind-method="onBind" unbind-method="onUnbind">
        <beans:bean class="MyCustomListener"/>
     </listener>
   </reference>

   <service ref="beanToBeExported" interface="SomeInterface">
     <registration-listener ref="myListener"
       registration-method="serviceRegistered"
       unregistration-method="serviceUnregistered"/>
   </service>

                               21
Applikation in OSGi
                                                               Service
•   Ausschließlich                            Web              Registry
    Abhängigkeiten auf API

•   Änderung der
                                            Model/API
    Implementierung
    Möglich

•   zur Laufzeit!                     Service Implementation


•   Infrastruktur ist nur eine
    andere Art von Service
                                          Infrastructure

                                 22
OSGi Applikationen mit
       Spring
•   Es sind immer noch POJOs!
•   Keine Platform- und Codeabhängigkeit zu OSGi
•   Keine Codeänderung notwendig
•   Apps sind auch noch in JEE lauffähig
•   Best Pactice: 2 Spring Konfigurationen
    •   Applikations Konfiguration
    •   OSGi Konfiguration (Service Import/Export)

                         23
Webapp Unterstützung
•   Servlet Container weden selbst als Bundle
    deployed
•   Wie werden WAR Bundles im Webcontainer
    deployed?
    •   OSGi sieht hier nichts vor!
    •   Spring hält Web OSGi Bundles bereit
    •   Deployment via Spring OSGi Web Extender
•   Tomcat und Jetty werden unterstützt

                           24
Schlechte
          Gewohnheiten?
•   Class.forName
•   Thread ContextClassloader
    •   Das Verhalten ist in OSGi undefiniert!
    •   Spring DM kann den TCC managen!
•   Probleme mit statischen Variablen
•   Suche in Jars
    •   TLD´s, Facelet Tags
•   OSGi Service als Observable

                              25
Kompatibilität zu
      Enterprise Libs
• Viele der Bibliotheken sind nicht für OSGi
  entwickelt
• OSGi import und export fehlen im Manifest!
• Classloading Probleme
  • Verwendung von ContextClassloader
  • META-INF resources
  • Sichtbarkeit von Klassen
  • Packaging Fehler 26
Beliebte Frameworks
•   Spring 2.5 +
•   Jetty +
•   Tomcat 5 +
•   Tomcat 6 (kein JSP)
•   Hibernate/JPA (+)
•   JSP (+)
•   JSF Myfaces (+)
•   Apache Commons +
•   Log4J


                          27
Spring Enterprise
        Repository
• Enthält viele migrierte Bundles aus dem
  Maven Central Repository
• Leider sind es nicht immer die aktuellsten
• Es ist nicht garantiert dass die Libs auch
  funktionieren
• http://www.springsource.com/repository/
  app/

                     28
Was fehlt noch zu JEE?
                                 EJB/Web Container       Spring DM

           Webapps                         +                   +

         Services/EJBs                     +                   +

         Modulsystem                       /                   +

Kommunikation zwischen Modulen      / (Serialisiert)           +

          Remoting                         +            / (WebServices)

     Reife der Technologie                 +                   -

           Security                        +           / (Spring Security)




                                          29
SpringSource DM
     Server


       30
Etwas Praxis...
Begriffswirrwarr
•   Spring Dynamic Modules = Spring für OSGI

    •   Application Context per Bundle

    •   Webapp Unterstützung

    •   License: Apache

•   SpringSource DM Server

    •   neuer Typ: „Applikation“ (OSGi kennt nur Bundles)

    •   Distribution von OSGi Bundles und Scripten

    •   Diagnose & Monitoring (Kommerziell)

    •   Lizenz: GPL und Kommerziell
                              32
Features

• Vorinstallierte OSGi Standard Bundles
• PAR Package - Application Deployment
 • Isolation
• Deployment Plan als XML
• Diagnose & Monitoring (Kommerziell)
                    33
Technologien

• Spring Framework
• Tomcat
• OSGi R4.1
• Equinox als OSGi Implementierung
• Spring Dynamic Modules
                   34
Architektur




     35
WAR Deployment
       Types

• Standard WAR mit Libraries
• Shared Libraries WAR
• Shared Services WAR

                    36
PAR
• OSGi kenn keine Applikation
• dadurch schwammige Grenzen
• Versionierung über Bundles hinweg
• (re)deploy als Einheit
• Verbergen von internas
 • Services
 • Bundles
                    37
PAR


  Web                                 Business
                   Model
Application                           Services



          Enterprice Infrastructure


   Web Container                ORM


   Transaction MGR          Datasource MGR




               OSGi Platform




                     38
Plans
• Beschreibt die zu deployenden Bundles
• Wie ein PAR jedoch werden die Bundles
     referenziert
• Effizenter da weniger IO
<plan name="com.springsource.server.admin.plan" version="2.0.0" scoped="true" atomic="true"
      xmlns="http://www.springsource.org/schema/dm-server/plan"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.springsource.org/schema/dm-server/plan
                   http://www.springsource.org/schema/dm-server/plan/springsource-dm-server-
plan.xsd">


     <artifact type="bundle" name="com.springsource.server.admin.state" version="[2.0,2.5)"/>

     <artifact type="bundle" name="com.springsource.server.admin.content" version="[2.0,2.5)"/>
      <artifact type="bundle" name="com.springsource.server.admin.web" version="[2.0,2.5)"/>
</plan>
                                                39
Import Hölle

• Import Library
 • Hibernate
 • Spring
 • JSF
• Import Bundle
                   40
Hibernate CNF
             Probleme
•   Problem Lazy Loding
•   Domain Model Bytecode Enhancement
•   Unsichtbare Abhängigkeit Model -> Hibernate
    entsteht
•   Lösung 1: Import-Package
    •   Ungewollte Abhängigkeit
•   Lösung 2: import-scope:=application
    •   Angabe den direkten Hibernate
        Abhängigkeiten    41
Licht und Schatten
•   OSGi ist zweifelsohne ein Fortschritt und in vielen Dingen
    bestehenden Komponenten Technologien wie EJB überlegen
•   Spring integriert sich hervorragend in die OSGi Platform
    und ist eine Bereicherung das bereits viele Enterprise
    Probleme gelöst sind
•   Leider verderben nicht OSGi konforme Libraries immer
    wieder den Spaß durch Classloading Probleme
•   Im Enterprise Bereich kann man leider noch nicht von
    „straight forward“ Entwicklung sprechen, hier gibt es noch
    viele Detail Probleme


                              42
Resourcen
• www.spring-buch.de/Beispiele/readme.html
• http://www.javaworld.com/javaworld/
  jw-04-2008/jw-04-osgi2.html
• http://www.javaworld.com/javaworld/
  jw-03-2008/jw-03-osgi1.html
• http://springosgi.googlepages.com/
                     43
Noch Fragen?

Weitere ähnliche Inhalte

Was ist angesagt?

Informatik Seminar Groovy Und Grails
Informatik Seminar Groovy Und GrailsInformatik Seminar Groovy Und Grails
Informatik Seminar Groovy Und Grailsschmichri
 
WebLogic Server auf ODA: Erfahrungen aus einem Kundenprojekt
WebLogic Server auf ODA: Erfahrungen aus einem KundenprojektWebLogic Server auf ODA: Erfahrungen aus einem Kundenprojekt
WebLogic Server auf ODA: Erfahrungen aus einem KundenprojektOPITZ CONSULTING Deutschland
 
Java oberflächlich betrachtet - Welche GUI ist die richtige?
Java oberflächlich betrachtet - Welche GUI ist die richtige?Java oberflächlich betrachtet - Welche GUI ist die richtige?
Java oberflächlich betrachtet - Welche GUI ist die richtige?GFU Cyrus AG
 
Ruby on Rails in a metro session
Ruby on Rails in a metro sessionRuby on Rails in a metro session
Ruby on Rails in a metro sessionVirttoo org
 
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleich
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im VergleichWie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleich
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleichgedoplan
 
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScriptJSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScriptOPEN KNOWLEDGE GmbH
 
MEAN SCS in der Cloud
MEAN SCS in der CloudMEAN SCS in der Cloud
MEAN SCS in der CloudTorsten Fink
 
SQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreiben
SQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreibenSQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreiben
SQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreibenJan Hentschel
 
JUG MZ OSGi Lightning Talk
JUG MZ OSGi Lightning TalkJUG MZ OSGi Lightning Talk
JUG MZ OSGi Lightning TalkThilo Käsemann
 
Java EE 7 - Enterprise-Anwendungen ohne Ballast
Java EE 7 - Enterprise-Anwendungen ohne BallastJava EE 7 - Enterprise-Anwendungen ohne Ballast
Java EE 7 - Enterprise-Anwendungen ohne Ballastgedoplan
 
Performanter, hochskalierbarer Web 2.0-Dienst in Ruby
Performanter, hochskalierbarer Web 2.0-Dienst in RubyPerformanter, hochskalierbarer Web 2.0-Dienst in Ruby
Performanter, hochskalierbarer Web 2.0-Dienst in Rubyvesparun
 
Java EE Microservices ohne Server
Java EE Microservices ohne ServerJava EE Microservices ohne Server
Java EE Microservices ohne Servergedoplan
 
2. Technologie-Tag - Frontend Architektur
2. Technologie-Tag - Frontend Architektur2. Technologie-Tag - Frontend Architektur
2. Technologie-Tag - Frontend ArchitekturNico Steiner
 
Java-Webanwendungen mit Vaadin 8
Java-Webanwendungen mit Vaadin 8Java-Webanwendungen mit Vaadin 8
Java-Webanwendungen mit Vaadin 8gedoplan
 
ESEconf2011 - Bosch Andy: "JavaServer Faces im Portal - Statusbestimmung"
ESEconf2011 - Bosch Andy: "JavaServer Faces im Portal - Statusbestimmung"ESEconf2011 - Bosch Andy: "JavaServer Faces im Portal - Statusbestimmung"
ESEconf2011 - Bosch Andy: "JavaServer Faces im Portal - Statusbestimmung"Aberla
 
Boost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerBoost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerSteven Grzbielok
 
ColdFusion im Enterprise Umfeld - Deep Dive
ColdFusion im Enterprise Umfeld - Deep DiveColdFusion im Enterprise Umfeld - Deep Dive
ColdFusion im Enterprise Umfeld - Deep DiveBokowsky + Laymann GmbH
 
Acceptance Testing - Automatisierte Web App Tests mit CasperJS
Acceptance Testing - Automatisierte Web App Tests mit CasperJSAcceptance Testing - Automatisierte Web App Tests mit CasperJS
Acceptance Testing - Automatisierte Web App Tests mit CasperJSBjörn Wilmsmann
 

Was ist angesagt? (20)

Informatik Seminar Groovy Und Grails
Informatik Seminar Groovy Und GrailsInformatik Seminar Groovy Und Grails
Informatik Seminar Groovy Und Grails
 
WebLogic Server auf ODA: Erfahrungen aus einem Kundenprojekt
WebLogic Server auf ODA: Erfahrungen aus einem KundenprojektWebLogic Server auf ODA: Erfahrungen aus einem Kundenprojekt
WebLogic Server auf ODA: Erfahrungen aus einem Kundenprojekt
 
Spring 2.0
Spring 2.0Spring 2.0
Spring 2.0
 
Java oberflächlich betrachtet - Welche GUI ist die richtige?
Java oberflächlich betrachtet - Welche GUI ist die richtige?Java oberflächlich betrachtet - Welche GUI ist die richtige?
Java oberflächlich betrachtet - Welche GUI ist die richtige?
 
Ruby on Rails in a metro session
Ruby on Rails in a metro sessionRuby on Rails in a metro session
Ruby on Rails in a metro session
 
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleich
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im VergleichWie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleich
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleich
 
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScriptJSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
 
MEAN SCS in der Cloud
MEAN SCS in der CloudMEAN SCS in der Cloud
MEAN SCS in der Cloud
 
SQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreiben
SQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreibenSQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreiben
SQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreiben
 
JUG MZ OSGi Lightning Talk
JUG MZ OSGi Lightning TalkJUG MZ OSGi Lightning Talk
JUG MZ OSGi Lightning Talk
 
Java EE 7 - Enterprise-Anwendungen ohne Ballast
Java EE 7 - Enterprise-Anwendungen ohne BallastJava EE 7 - Enterprise-Anwendungen ohne Ballast
Java EE 7 - Enterprise-Anwendungen ohne Ballast
 
Performanter, hochskalierbarer Web 2.0-Dienst in Ruby
Performanter, hochskalierbarer Web 2.0-Dienst in RubyPerformanter, hochskalierbarer Web 2.0-Dienst in Ruby
Performanter, hochskalierbarer Web 2.0-Dienst in Ruby
 
Java EE Microservices ohne Server
Java EE Microservices ohne ServerJava EE Microservices ohne Server
Java EE Microservices ohne Server
 
2. Technologie-Tag - Frontend Architektur
2. Technologie-Tag - Frontend Architektur2. Technologie-Tag - Frontend Architektur
2. Technologie-Tag - Frontend Architektur
 
Java-Webanwendungen mit Vaadin 8
Java-Webanwendungen mit Vaadin 8Java-Webanwendungen mit Vaadin 8
Java-Webanwendungen mit Vaadin 8
 
ESEconf2011 - Bosch Andy: "JavaServer Faces im Portal - Statusbestimmung"
ESEconf2011 - Bosch Andy: "JavaServer Faces im Portal - Statusbestimmung"ESEconf2011 - Bosch Andy: "JavaServer Faces im Portal - Statusbestimmung"
ESEconf2011 - Bosch Andy: "JavaServer Faces im Portal - Statusbestimmung"
 
Boost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerBoost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with Docker
 
ColdFusion im Enterprise Umfeld - Deep Dive
ColdFusion im Enterprise Umfeld - Deep DiveColdFusion im Enterprise Umfeld - Deep Dive
ColdFusion im Enterprise Umfeld - Deep Dive
 
Acceptance Testing - Automatisierte Web App Tests mit CasperJS
Acceptance Testing - Automatisierte Web App Tests mit CasperJSAcceptance Testing - Automatisierte Web App Tests mit CasperJS
Acceptance Testing - Automatisierte Web App Tests mit CasperJS
 
C1 CDH Sametime
C1 CDH SametimeC1 CDH Sametime
C1 CDH Sametime
 

Andere mochten auch

25-01-2014 Guillermo Padrés en entrevista en el programa “El Show de Chema Ar...
25-01-2014 Guillermo Padrés en entrevista en el programa “El Show de Chema Ar...25-01-2014 Guillermo Padrés en entrevista en el programa “El Show de Chema Ar...
25-01-2014 Guillermo Padrés en entrevista en el programa “El Show de Chema Ar...Guillermo Padrés Elías
 
19-02-2011 Guillermo Padrés en el marco de la VXIII ED. de la cumbre Alamos A...
19-02-2011 Guillermo Padrés en el marco de la VXIII ED. de la cumbre Alamos A...19-02-2011 Guillermo Padrés en el marco de la VXIII ED. de la cumbre Alamos A...
19-02-2011 Guillermo Padrés en el marco de la VXIII ED. de la cumbre Alamos A...Guillermo Padrés Elías
 
Geprüfte Bohne - Der Bean Validation Standard
Geprüfte Bohne - Der Bean Validation StandardGeprüfte Bohne - Der Bean Validation Standard
Geprüfte Bohne - Der Bean Validation StandardSandro Sonntag
 
Happy b day bansal main video
Happy b day bansal main videoHappy b day bansal main video
Happy b day bansal main videoKavya Garg
 
Semantic web die konzepte hinter dem rdf standard
Semantic web   die konzepte hinter dem rdf standardSemantic web   die konzepte hinter dem rdf standard
Semantic web die konzepte hinter dem rdf standardSandro Sonntag
 
Escalar un e-commerce con Rails y otras hierbas
Escalar un e-commerce con Rails y otras hierbasEscalar un e-commerce con Rails y otras hierbas
Escalar un e-commerce con Rails y otras hierbasGert Findel
 
Entrevistas contestadas
Entrevistas contestadasEntrevistas contestadas
Entrevistas contestadasSAHARELHDEZ
 
4. guion de entrevistas
4.  guion de entrevistas4.  guion de entrevistas
4. guion de entrevistasAlma Carrillo
 

Andere mochten auch (9)

25-01-2014 Guillermo Padrés en entrevista en el programa “El Show de Chema Ar...
25-01-2014 Guillermo Padrés en entrevista en el programa “El Show de Chema Ar...25-01-2014 Guillermo Padrés en entrevista en el programa “El Show de Chema Ar...
25-01-2014 Guillermo Padrés en entrevista en el programa “El Show de Chema Ar...
 
19-02-2011 Guillermo Padrés en el marco de la VXIII ED. de la cumbre Alamos A...
19-02-2011 Guillermo Padrés en el marco de la VXIII ED. de la cumbre Alamos A...19-02-2011 Guillermo Padrés en el marco de la VXIII ED. de la cumbre Alamos A...
19-02-2011 Guillermo Padrés en el marco de la VXIII ED. de la cumbre Alamos A...
 
Geprüfte Bohne - Der Bean Validation Standard
Geprüfte Bohne - Der Bean Validation StandardGeprüfte Bohne - Der Bean Validation Standard
Geprüfte Bohne - Der Bean Validation Standard
 
Happy b day bansal main video
Happy b day bansal main videoHappy b day bansal main video
Happy b day bansal main video
 
Semantic web die konzepte hinter dem rdf standard
Semantic web   die konzepte hinter dem rdf standardSemantic web   die konzepte hinter dem rdf standard
Semantic web die konzepte hinter dem rdf standard
 
Escalar un e-commerce con Rails y otras hierbas
Escalar un e-commerce con Rails y otras hierbasEscalar un e-commerce con Rails y otras hierbas
Escalar un e-commerce con Rails y otras hierbas
 
Entrevistas contestadas
Entrevistas contestadasEntrevistas contestadas
Entrevistas contestadas
 
Einführung in SCRUM
Einführung in SCRUMEinführung in SCRUM
Einführung in SCRUM
 
4. guion de entrevistas
4.  guion de entrevistas4.  guion de entrevistas
4. guion de entrevistas
 

Ähnlich wie Server Revolutions- Der Spring Source DM Server

EnterJS 2015 - JavaScript von Morgen schon heute
EnterJS 2015 - JavaScript von Morgen schon heuteEnterJS 2015 - JavaScript von Morgen schon heute
EnterJS 2015 - JavaScript von Morgen schon heutePhilipp Burgmer
 
Creasoft-Akademie - Mobile Multiplattform Apps
Creasoft-Akademie - Mobile Multiplattform AppsCreasoft-Akademie - Mobile Multiplattform Apps
Creasoft-Akademie - Mobile Multiplattform AppsCreasoft AG
 
micro services
micro servicesmicro services
micro servicessmancke
 
Icinga 2009 at Nagios Workshop
Icinga 2009 at Nagios WorkshopIcinga 2009 at Nagios Workshop
Icinga 2009 at Nagios WorkshopIcinga
 
Bernhard Wick - appserver.io - code.talks 2015
 Bernhard Wick - appserver.io - code.talks 2015 Bernhard Wick - appserver.io - code.talks 2015
Bernhard Wick - appserver.io - code.talks 2015AboutYouGmbH
 
Jug nbg containerplattform dcos
Jug nbg containerplattform dcosJug nbg containerplattform dcos
Jug nbg containerplattform dcosRalf Ernst
 
Nanoservice Architekturen
Nanoservice ArchitekturenNanoservice Architekturen
Nanoservice ArchitekturenLeo Lindhorst
 
DevOps der Triple-E Klasse - Eclipse DemoCamp
DevOps der Triple-E Klasse - Eclipse DemoCampDevOps der Triple-E Klasse - Eclipse DemoCamp
DevOps der Triple-E Klasse - Eclipse DemoCampWerner Keil
 
Portale 2.0 mit Liferay
Portale 2.0 mit LiferayPortale 2.0 mit Liferay
Portale 2.0 mit Liferayinovex GmbH
 
2007 - Basta!: Nach soa kommt soc
2007 - Basta!: Nach soa kommt soc2007 - Basta!: Nach soa kommt soc
2007 - Basta!: Nach soa kommt socDaniel Fisher
 
JSUG - OSGi by Michael Greifeneder
JSUG - OSGi by Michael GreifenederJSUG - OSGi by Michael Greifeneder
JSUG - OSGi by Michael GreifenederChristoph Pickl
 
Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.
Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.
Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.David Jardin
 
HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien
HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien
HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien DNUG e.V.
 
EntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedEntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedRené Winkelmeyer
 
Microservices - Was EAs zu Microservices wissen sollten
Microservices - Was EAs zu Microservices wissen solltenMicroservices - Was EAs zu Microservices wissen sollten
Microservices - Was EAs zu Microservices wissen solltenJan Thielscher
 
Entwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HHEntwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HHFlorian Holzhauer
 

Ähnlich wie Server Revolutions- Der Spring Source DM Server (20)

EnterJS 2015 - JavaScript von Morgen schon heute
EnterJS 2015 - JavaScript von Morgen schon heuteEnterJS 2015 - JavaScript von Morgen schon heute
EnterJS 2015 - JavaScript von Morgen schon heute
 
Creasoft-Akademie - Mobile Multiplattform Apps
Creasoft-Akademie - Mobile Multiplattform AppsCreasoft-Akademie - Mobile Multiplattform Apps
Creasoft-Akademie - Mobile Multiplattform Apps
 
micro services
micro servicesmicro services
micro services
 
Icinga 2009 at Nagios Workshop
Icinga 2009 at Nagios WorkshopIcinga 2009 at Nagios Workshop
Icinga 2009 at Nagios Workshop
 
GWT – Google Web Toolkit in der Praxis
GWT – Google Web Toolkit in der PraxisGWT – Google Web Toolkit in der Praxis
GWT – Google Web Toolkit in der Praxis
 
CDI
CDICDI
CDI
 
Bernhard Wick - appserver.io - code.talks 2015
 Bernhard Wick - appserver.io - code.talks 2015 Bernhard Wick - appserver.io - code.talks 2015
Bernhard Wick - appserver.io - code.talks 2015
 
GWT
GWTGWT
GWT
 
Jug nbg containerplattform dcos
Jug nbg containerplattform dcosJug nbg containerplattform dcos
Jug nbg containerplattform dcos
 
Nanoservice Architekturen
Nanoservice ArchitekturenNanoservice Architekturen
Nanoservice Architekturen
 
DevOps der Triple-E Klasse - Eclipse DemoCamp
DevOps der Triple-E Klasse - Eclipse DemoCampDevOps der Triple-E Klasse - Eclipse DemoCamp
DevOps der Triple-E Klasse - Eclipse DemoCamp
 
OSGi: Tools und Entwicklungsprozesse in OSGi Projekten
OSGi: Tools und Entwicklungsprozesse in OSGi ProjektenOSGi: Tools und Entwicklungsprozesse in OSGi Projekten
OSGi: Tools und Entwicklungsprozesse in OSGi Projekten
 
Portale 2.0 mit Liferay
Portale 2.0 mit LiferayPortale 2.0 mit Liferay
Portale 2.0 mit Liferay
 
2007 - Basta!: Nach soa kommt soc
2007 - Basta!: Nach soa kommt soc2007 - Basta!: Nach soa kommt soc
2007 - Basta!: Nach soa kommt soc
 
JSUG - OSGi by Michael Greifeneder
JSUG - OSGi by Michael GreifenederJSUG - OSGi by Michael Greifeneder
JSUG - OSGi by Michael Greifeneder
 
Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.
Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.
Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.
 
HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien
HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien
HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien
 
EntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedEntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloaded
 
Microservices - Was EAs zu Microservices wissen sollten
Microservices - Was EAs zu Microservices wissen solltenMicroservices - Was EAs zu Microservices wissen sollten
Microservices - Was EAs zu Microservices wissen sollten
 
Entwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HHEntwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HH
 

Server Revolutions- Der Spring Source DM Server

  • 1. Server Revolutions Der Spring Source DM Server Sandro Sonntag - Adorsys GmbH & Co KG 1
  • 2. Was erwartet Sie? • Einführung in OSGi • Was bedeutet „Enterprise“ für OSGi? • Spring Dynamic Modules Architektur • Eine Spring OSGi App from Scratch • Einführung in die Konzepte des DM Servers 2
  • 3. Warum noch ein Appserver? 3
  • 4. Wie funktioniert Wiederverwendung Heute? • Auf Service Ebene? • Auf Library Ebene? • In unterschiedlichen Versionen? • Und die Kommunikation zwischen Modulen? • Und wie geht es Ihrem Permgen Space dabei? 4
  • 5. Klassische Java Systeme • Java Standard Edition • System Classloader • eine Version pro Library • Keinerlei Modul oder Komponenten Model auf Klassenebene • Java Enterprise Edition • Eingeschränkt auf Deployment Typen (EJB, WAR, EAR) • Grobgranular! • Library Wiederverwendung nicht vorgesehen! 5
  • 6. Potential von OSGi • Modularisierung • Auf Library und Service Ebene • Deklaration von Abhängigkeiten (zur Laufzeit!) • Förderung der Unabhängigkeit von Komponenten (Sichtbarkeit/Isolation) • Sehr Leichtgewichtiger Container • Kein „One size fits all“ Server mehr • Bedeutet: riesen Schritt nach vorne! 6
  • 7. Das Geheimnis heutiger Appserver • Fast alle JEE Application Server basieren heute auf OSGi • ...und im Embedded Bereich und in der IDE läuft es schon seit Jahren! • Aber: keiner lässt die Applikationen von OSGi profitieren • Warum können Business-Apps nicht die Vorteile der OSGi Architektur nutzen? • Spring DM macht dies möglich 7
  • 8. Software auf OSGi • Websphere • JBoss • Weblogic • OpenEJB • Eclipse • JOnAS 5 • GlassFish (v3) • ServiceMix 8
  • 9. OSGi? • Ist ein Modul Container • Partitioniert Systeme in Bundles • Build Zeit Abhängigkeiten gelten nun auch zur Runtime • Verwaltet Abhängigkeiten zwischen Modulen • Isoliert Module (strenge Sichbarkeitsregeln) • Vermittelt Services zwischen Bundles • kennt Versionierung • Sorgt für Disziplin! 9
  • 10. Was ist ein Bundle? • Jedes Bundle hat einen eigenen Classloader • Dadurch können Bundles installiert, gestartet, gestopt, neugeladen werden • Bundles legen Ihre Beziehungen zu anderen Bundles durch import/export fest • Bundles unterliegen einem Lifecycle 10
  • 11. Service Platform • Bundles können Services dynamisch veröffentlichen • ServiceRegistry erlaubt es diese Services zu nutzen 11
  • 12. Bundle Activator • Deployment von Services ist nicht Deklarativ! • Vorteil: Flexibilität • Nachteil: Komplexität, Fehleranfälligkeit Manifest-Version: 1.0 Bundle-Activator: com.javaworld.sample.helloworld.Activator public class Activator implements BundleActivator { public void start(BundleContext context) throws Exception { System.out.println("Hello world"); } public void stop(BundleContext context) throws Exception { System.out.println("Goodbye World"); } } 12
  • 13. Service Registrierung in OSGI public class HelloServiceActivator implements BundleActivator { ServiceRegistration helloServiceRegistration; public void start(BundleContext context) throws Exception { HelloService helloService = new HelloServiceImpl(); helloServiceRegistration = context.registerService(HelloService.class.getName(), helloService, null); } public void stop(BundleContext context) throws Exception { helloServiceRegistration.unregister(); } } 13
  • 14. Verwendung eines Services in OSGi public class Activator implements BundleActivator { ServiceReference helloServiceReference; public void start(BundleContext context) throws Exception { System.out.println("Hello World!!"); helloServiceReference= context.getServiceReference(HelloService.class.getName()); HelloService helloService =(HelloService)context.getService(helloServiceReference); System.out.println(helloService.sayHello()); } public void stop(BundleContext context) throws Exception { System.out.println("Goodbye World!!"); context.ungetService(helloServiceReference); } } 14
  • 15. Angst? • Neuer Infrastrukturcode • Komplex! • Fehleranfällig! • Achtung: lookup eines Objekts führt zu einer direkten Referenz des Objektes! • Bei undeploy des Impl Bundles muss die Referenz freigegeben werden! • Resourceleaks! • Was wenn sich Abhängigkeiten ändern? • Services sollten nicht manuell referenziert werden • Service Tracker wird empfohlen - noch komplexer! • Und sieht so die Zukunft aus? 15
  • 16. OSGi Enterprise • Webapps • Business Components • Transaction manager • Datasources • Configurations 16
  • 17. Business Web Application Services Enterprice Infrastructure Web Container ORM Transaction MGR Datasource MGR OSGi Platform 17
  • 19. Bundle Application Context • Bundle META-INF/spring enthält Konfiguration • oder Manifest enthält „Spring-Context: xyz.xml“ declaration • Es werden alle XML Dateien gelesen • Ein OSGi Application Context wird erstellt • Durch Spring DM Extender ist kein BundleActivator notwendig • ApplicationContexte sind über die OSGi ServiceRegistry zugreifbar 19
  • 20. OSGi Services ala Spring • Import: <osgi:reference id="messageService" interface="com.xyz.MessageService"/> • Export: <osgi:service ref="beanToBeExported" interface="com.xyz.MessageService"/> 20
  • 21. OSGi Registry lauschen! • Es existieren Listener Provider und Consumer Seite • Damit lassen sich sehr elegant Services überwachen <reference id="someService" interface="com.xyz.MessageService"> <listener bind-method="onBind" unbind-method="onUnbind"> <beans:bean class="MyCustomListener"/> </listener> </reference> <service ref="beanToBeExported" interface="SomeInterface"> <registration-listener ref="myListener" registration-method="serviceRegistered" unregistration-method="serviceUnregistered"/> </service> 21
  • 22. Applikation in OSGi Service • Ausschließlich Web Registry Abhängigkeiten auf API • Änderung der Model/API Implementierung Möglich • zur Laufzeit! Service Implementation • Infrastruktur ist nur eine andere Art von Service Infrastructure 22
  • 23. OSGi Applikationen mit Spring • Es sind immer noch POJOs! • Keine Platform- und Codeabhängigkeit zu OSGi • Keine Codeänderung notwendig • Apps sind auch noch in JEE lauffähig • Best Pactice: 2 Spring Konfigurationen • Applikations Konfiguration • OSGi Konfiguration (Service Import/Export) 23
  • 24. Webapp Unterstützung • Servlet Container weden selbst als Bundle deployed • Wie werden WAR Bundles im Webcontainer deployed? • OSGi sieht hier nichts vor! • Spring hält Web OSGi Bundles bereit • Deployment via Spring OSGi Web Extender • Tomcat und Jetty werden unterstützt 24
  • 25. Schlechte Gewohnheiten? • Class.forName • Thread ContextClassloader • Das Verhalten ist in OSGi undefiniert! • Spring DM kann den TCC managen! • Probleme mit statischen Variablen • Suche in Jars • TLD´s, Facelet Tags • OSGi Service als Observable 25
  • 26. Kompatibilität zu Enterprise Libs • Viele der Bibliotheken sind nicht für OSGi entwickelt • OSGi import und export fehlen im Manifest! • Classloading Probleme • Verwendung von ContextClassloader • META-INF resources • Sichtbarkeit von Klassen • Packaging Fehler 26
  • 27. Beliebte Frameworks • Spring 2.5 + • Jetty + • Tomcat 5 + • Tomcat 6 (kein JSP) • Hibernate/JPA (+) • JSP (+) • JSF Myfaces (+) • Apache Commons + • Log4J 27
  • 28. Spring Enterprise Repository • Enthält viele migrierte Bundles aus dem Maven Central Repository • Leider sind es nicht immer die aktuellsten • Es ist nicht garantiert dass die Libs auch funktionieren • http://www.springsource.com/repository/ app/ 28
  • 29. Was fehlt noch zu JEE? EJB/Web Container Spring DM Webapps + + Services/EJBs + + Modulsystem / + Kommunikation zwischen Modulen / (Serialisiert) + Remoting + / (WebServices) Reife der Technologie + - Security + / (Spring Security) 29
  • 30. SpringSource DM Server 30
  • 32. Begriffswirrwarr • Spring Dynamic Modules = Spring für OSGI • Application Context per Bundle • Webapp Unterstützung • License: Apache • SpringSource DM Server • neuer Typ: „Applikation“ (OSGi kennt nur Bundles) • Distribution von OSGi Bundles und Scripten • Diagnose & Monitoring (Kommerziell) • Lizenz: GPL und Kommerziell 32
  • 33. Features • Vorinstallierte OSGi Standard Bundles • PAR Package - Application Deployment • Isolation • Deployment Plan als XML • Diagnose & Monitoring (Kommerziell) 33
  • 34. Technologien • Spring Framework • Tomcat • OSGi R4.1 • Equinox als OSGi Implementierung • Spring Dynamic Modules 34
  • 36. WAR Deployment Types • Standard WAR mit Libraries • Shared Libraries WAR • Shared Services WAR 36
  • 37. PAR • OSGi kenn keine Applikation • dadurch schwammige Grenzen • Versionierung über Bundles hinweg • (re)deploy als Einheit • Verbergen von internas • Services • Bundles 37
  • 38. PAR Web Business Model Application Services Enterprice Infrastructure Web Container ORM Transaction MGR Datasource MGR OSGi Platform 38
  • 39. Plans • Beschreibt die zu deployenden Bundles • Wie ein PAR jedoch werden die Bundles referenziert • Effizenter da weniger IO <plan name="com.springsource.server.admin.plan" version="2.0.0" scoped="true" atomic="true" xmlns="http://www.springsource.org/schema/dm-server/plan" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springsource.org/schema/dm-server/plan http://www.springsource.org/schema/dm-server/plan/springsource-dm-server- plan.xsd"> <artifact type="bundle" name="com.springsource.server.admin.state" version="[2.0,2.5)"/> <artifact type="bundle" name="com.springsource.server.admin.content" version="[2.0,2.5)"/> <artifact type="bundle" name="com.springsource.server.admin.web" version="[2.0,2.5)"/> </plan> 39
  • 40. Import Hölle • Import Library • Hibernate • Spring • JSF • Import Bundle 40
  • 41. Hibernate CNF Probleme • Problem Lazy Loding • Domain Model Bytecode Enhancement • Unsichtbare Abhängigkeit Model -> Hibernate entsteht • Lösung 1: Import-Package • Ungewollte Abhängigkeit • Lösung 2: import-scope:=application • Angabe den direkten Hibernate Abhängigkeiten 41
  • 42. Licht und Schatten • OSGi ist zweifelsohne ein Fortschritt und in vielen Dingen bestehenden Komponenten Technologien wie EJB überlegen • Spring integriert sich hervorragend in die OSGi Platform und ist eine Bereicherung das bereits viele Enterprise Probleme gelöst sind • Leider verderben nicht OSGi konforme Libraries immer wieder den Spaß durch Classloading Probleme • Im Enterprise Bereich kann man leider noch nicht von „straight forward“ Entwicklung sprechen, hier gibt es noch viele Detail Probleme 42
  • 43. Resourcen • www.spring-buch.de/Beispiele/readme.html • http://www.javaworld.com/javaworld/ jw-04-2008/jw-04-osgi2.html • http://www.javaworld.com/javaworld/ jw-03-2008/jw-03-osgi1.html • http://springosgi.googlepages.com/ 43

Hinweis der Redaktion

  1. \n
  2. \n
  3. \n
  4. Die Zeiten vorbei wo Appserver noch von Zentraler Bedeutung\nAppserver immer vergleichbarer\nMarkt hat sich konsolidiert\nKeine Innovationen mehr!\nOSGi aera hat begonnen\ngute libs standalone verf&amp;#xFC;gbar\nnimm das beste beider welten\n\n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n