SlideShare una empresa de Scribd logo
1 de 54
Descargar para leer sin conexión
Thorsten Kamann ● thorsten.kamann@itemis.de   1
Inhalt
                           Einführung

                          Konfiguration

                                AOP

                         Transaktionen

                       Spring Web MVC

                             Sonstiges

                      Zusammenfassung


Thorsten Kamann ● thorsten.kamann@itemis.de   2
Einführung: Was ist Spring?




Thorsten Kamann ● thorsten.kamann@itemis.de   3
Einführung: Was ist Spring?

                              IoC             Ansammlung
                      (Dependency
                                               von API‘s
                       Injection)




                                 Programmiermodell



Thorsten Kamann ● thorsten.kamann@itemis.de                4
Einführung: Spring Komponenten
                                              Spring Core
                                              The IoC Container


                    AOP                                                 Web
                                                      JEE
             Spring AOP                                            Spring Web MVC
                                                       JMX
          AspectJ Integration                                           Struts
                                                       JMS
                                                                      WebWork
                                                       JCA
                                                                       Tapestry
                                                     Remoting
         DAO                    ORM                                       JSF
                                                      EJB‘s
    Spring JDBC                Hibernate                                 PDF
                                                      Email
    Transaction                  JPA                                Jasper Reports
    Management                 TopLink                                   Excel
                                 JDO                              Spring Portlet MVC


Thorsten Kamann ● thorsten.kamann@itemis.de                                            5
Einführung: Features
               Leichtgewichtiger Container
               • Zentralisierte und automatisierte Konfiguration
                 und Verdrahtung der Anwendungsobjekte
               • Nicht invasiv
               • Fügt lose gekoppelte Komponenten (POJO's) zu
                 komplexen Systemen zusammen
               • Skalierbar
               • Verbessert die Testbarkeit der Komponenten,
                 indem sie zuerst unabhängig von der
                 Serverinfrastruktur getestet werden können

Thorsten Kamann ● thorsten.kamann@itemis.de                        6
Einführung: Features
              Abstraktionsschicht für Transaktions-
              Management

             • Erweiterbares Transaktions-Management
             • Deklarative Konfiguration der Transaktionen,
               ohne tief in das entsprechende Framework
               einzusteigen
             • Im Gegensatz zu reinem JTA oder EJB CMP ist
               dieses Transaktions-Management nicht auf
               J2EE-Umgebungen beschränkt



Thorsten Kamann ● thorsten.kamann@itemis.de                   7
Einführung: Features
              Abstraktionsschicht für reines JDBC

              • Reduziert den Code für auf JDBC-basierte
                Anwendungen
              • Vereinfacht die Fehlerbehandlung
              • Bietet eine aussagekräftige Exception-
                Hierarchie (herstellerunabhängig)
              • Exceptions basieren auf der DAO-Exception-
                Hierarchie



Thorsten Kamann ● thorsten.kamann@itemis.de                  8
Einführung: Features
                 Integration von populären O/R-Mappern

                 • Unterstützung von Hibernate, Toplink, JDO
                   und iBATIS SQL Maps
                 • Vereinfacht die Entwicklung mit diesen O/R-
                   Mappern
                 • Unterstützung von Transaktionen
                 • Unterstützung des DAO-Patterns




Thorsten Kamann ● thorsten.kamann@itemis.de                      9
Einführung: Features

                AOP Funktionalität
                  • Basiert auf AspectJ
                  • Vollständig integriert in das Spring
                    Konfigurations-Management
                  • Transaktions-Management basiert auf AOP
                  • Jedes Objekt in Spring kann mittels AOP
                    gemanaged werden




Thorsten Kamann ● thorsten.kamann@itemis.de                   10
Einführung: Features
                 Flexibles MVC-Webapplication
                 Framework
                  • Benutzt die Spring-Core Funktionalitäten
                  • Sehr konfigurierbar durch verschiedene
                    Strategie-Interfaces
                  • Kombinierbar mit den verschiedensten
                    Viewtechnologien:
                    • JSP, Velocity, Tiles, iText, POI




Thorsten Kamann ● thorsten.kamann@itemis.de                    11
Konfiguration



Thorsten Kamann ● thorsten.kamann@itemis.de   12
Konfiguration: XML-Schema

              Konfiguration per XML-Schema

               • Spring Konfigurationen basieren auf XML-
                 Schema
               • Durch XML-Schema ist eine direktere
                 Konfiguration möglich
               • Dadurch kürzere und eindeutigere
                 Konfigurationen




Thorsten Kamann ● thorsten.kamann@itemis.de                 13
Konfiguration: XML-Schema
                   Alt:
                     • <bean id=“bean1quot; class=“a.b.Beanquot;>
                          <property name=“prop1“ value=“value1quot;/>
                       </bean>


                   Neu:
                    • <bean id=„bean1“ class=„a.b.Bean“
                           p.prop1=„value1“/>




Thorsten Kamann ● thorsten.kamann@itemis.de                         14
Konfiguration: Modularisierung
          Konfiguration besteht aus verschiedenen
          Schemata
          •   Beans - Konfiguration von Spring-Beans
          •   Utils - Utilities wie Maps, Lists, Static Fields
          •   JEE - J2EE Konfiguration, wie EJB, JNDI
          •   Lang - Scriptsprachen (Groovy, JRuby, BeanShell)
          •   Tx - Transaktionen
          •   Aop - Aspekte
          •   Tool - 3rd Party Erweiterungen



Thorsten Kamann ● thorsten.kamann@itemis.de                      15
Konfiguration: Erweiterungen
                    Erweiterbare Konfiguration

                    • 3rd Party Erweiterungen
                    • Domänen-spezifische Konfigurationsdialekte
                    • Tools-Schema unterstützt die Erstellung von
                      Erweiterungen
                    • Einfaches Deployment mittels JAR




Thorsten Kamann ● thorsten.kamann@itemis.de                         16
Konfiguration: XML
•    <beans>
        <bean id=„marge“ class=„Person“ p:name=„marge“>
            <property name=„husband“>
               <bean class=„Person“ p:name=„homer“ p:age=„45“>
                   <property name=„props“>
                       <props>
                           <prop key=„overweight“>true</prop>
                           <prop key=„height“>1.8m</prop>
                       </props>
                   </property>
               </bean>
            </property>
            <property name=„children“><list>…</list></property>
         </bean>
         <bean id=„bart“ …/>
         <bean id=„lisa“ …/>
     </beans>


Thorsten Kamann ● thorsten.kamann@itemis.de                       17
Konfiguration: Java
•    @Configuration
     public class MyConfig {
         @Bean
         public Person marge() {
             Person marge = new Person();
             Person husband = new Person();
             marge.setName(„marge“);
             marge.setHusband(husband);
             marge.addCildren(bart);
             return marge;
         }

            @Bean
            public Person bart () {
               Person bart = new Person();
               return bart;
            }
     }

Thorsten Kamann ● thorsten.kamann@itemis.de   18
Konfiguration: GroovyBuilder
•    bb.beans {
          marge(Person.class) {
              name = quot;marge„
              husband = { Person p ->
                             name = quot;homer„
                             age = 45
                             props = [overweight:true,
                                      height:quot;1.8mquot;] }
             children = [bart, lisa]
        }
        bart(Person.class) {}
        lisa(Person.class) {}
     }




Thorsten Kamann ● thorsten.kamann@itemis.de              19
Konfiguration: Bean Scopes
                       5 Bean Scopes
                      •   Singleton
                      •   Prototype
                      •   *Request (Web)
                      •   *Session (Web)
                      •   *Global Session (Portlets)




Thorsten Kamann ● thorsten.kamann@itemis.de            20
AOP



Thorsten Kamann ● thorsten.kamann@itemis.de         21
AOP: Allgemein
                  SpringAOP vs AspectJ
                  • SpringAOP ist einfacher und kann mit
                    einfachen Beans arbeiten
                  • SpringAOP unterstützt zur Zeit nur Methoden-
                    basierte Join Points

                  • AspectJ wird vollständig unterstützt und kann
                    auch auf nicht-SpringBeans angewandt werden




Thorsten Kamann ● thorsten.kamann@itemis.de                         22
AOP: Konfiguration
                   Konfigurationsoptionen
                  • Annotations (@AspectJ) oder XML-basiert
                  • Aktivierung von @AspectJ mit <aop:aspectj-
                    autoproxy/>
                  • Pointcut-Definition mit AspectJ Expression-
                    Sprache
                  • AOP-Autoproxies (default) oder CGLIB-
                    Proxies




Thorsten Kamann ● thorsten.kamann@itemis.de                       23
AOP: Beispiel (Java-Code)
public class SimpleProfiler {
   public Object profile(ProceedingJoinPoint call)
      throws Throwable {
      StopWatch clock = new StopWatch(
            quot;Profiling for 'quot; + call.toShortString() + quot;'quot;);
      try {
         clock.start(call.toShortString());
         return call.proceed();
      } finally {
         clock.stop();
         System.out.println(clock.prettyPrint());
      }
   }
}



Thorsten Kamann ● thorsten.kamann@itemis.de                    24
AOP: Beispiel (Konfig. mit Schema)
<bean id=quot;profiler“ class=„d.it.s2.test.aop.SimpleProfilerquot; />

<aop:config>
   <aop:aspect ref=quot;profilerquot;>
      <aop:pointcut id=quot;daoCreatequot;
         expression=quot;execution(* d.i.s.dao.*.create*(..))quot; />
      <aop:around pointcut-ref=quot;daoCreatequot; method=quot;profilequot; />
    </aop:aspect>
   <aop:aspect ref=quot;profilerquot;>
        <aop:pointcut id=quot;daoSavequot;
          expression=quot;execution(* d.i.s2.dao.*.save*(..))quot; />
        <aop:around pointcut-ref=quot;daoSavequot; method=quot;profilequot; />
    </aop:aspect>
</aop:config>



Thorsten Kamann ● thorsten.kamann@itemis.de                  25
AOP: Beispiel (Annotations)
@Aspect
public class SimpleProfilerAnnotated {

      @Pointcut
          execution(* de.itemis.spring2.dao..create*(..))
      public void create(){};

      @Around(„create()“)
      public Object profile(ProceedingJoinPoint call)
         throws Throwable {
          […]
      }
}



Thorsten Kamann ● thorsten.kamann@itemis.de                 26
AOP: Beispiel (Konfig. mit @AspectJ)

<bean id=quot;profiler“
      class=„d.i.s2.test.aop.SimpleProfilerAnnotatedquot; />
<aop:aspectj-autoproxy/>




Thorsten Kamann ● thorsten.kamann@itemis.de                27
Transaktionen



Thorsten Kamann ● thorsten.kamann@itemis.de   28
Transaktionen:Übersicht

                                                                In: Create Transaction
                                                                Out: Commit/Rollback



                             AOP-             Transaction-      Custom
      Caller                                                                     Target
                             Proxy              Advisor        Advisor(s)




                                                   Vor oder nach            Business-
                     Proxy                        dem Transaction-           Logik
                anstatt des Ziels                     Advisor


Thorsten Kamann ● thorsten.kamann@itemis.de                                               29
Transaktionen:Konfiguration
                     Konfiguration
                     •   XML-Schema (tx-Namensraum)
                     •   Annotations
                     •   Programmatisch
                     •   Intern wird AOP verwendet
                     •   Durch Verwendung von AspectJ Ausweitung
                         auf nicht-Spring-Objekte möglich




Thorsten Kamann ● thorsten.kamann@itemis.de                        30
Transaktionen: Konfiguration (XML-Schema)

<bean id=„txManager“/>
<tx:advice id=„txAdvice“ transaction-manager=„txManager“>
    <tx:attributes>
        <tx:method name=„get*“ read-only=„true“/>
        <tx:method name=„*“/>
    </tx:attributes>
</tx:advice>

<aop:config>
    <aop:pointcut id=„pid“ expression=„…“/>
    <aop:advisor advice-ref=„txAdvice“ pointcut-ref=„pid“/>
</aop:config>




Thorsten Kamann ● thorsten.kamann@itemis.de                   31
Transaktionen: Konfiguration (Annotations)

@Transactional(readOnly = true)
public class DefaultFooService implements FooService {

        public Foo getFoo(String fooName) {
        }

      @Transactional(readOnly = false,
         propagation = Propagation.REQUIRES_NEW)
       public void updateFoo(Foo foo) {
       }
}


Thorsten Kamann ● thorsten.kamann@itemis.de              32
Transaktionen: Konfiguration (Annotations)

<tx:annotation-driven transaction-manager=quot;txManagerquot;/>

  <bean id=quot;txManagerquot;
      class=„o.s.jdbc.datasource.DataSourceTransactionManager„
      p:dataSource-ref=„dataSource“/>




Thorsten Kamann ● thorsten.kamann@itemis.de                      33
Spring Web MVC



Thorsten Kamann ● thorsten.kamann@itemis.de   34
Spring Web MVC: Übersicht
                Features
              • Trennung von Rollen
                (Controller, Validator, Command Object, Form
                Object, Model,…)
              • Convention over Configuration
              • Unterstützung sämtlicher Spring Features
              • Eigene TagLibrary
              • Unterstützung einer großen Anzahl von Web-
                Frameworks
                (JSP, JSF, Struts, Tapestry, WebWork, Velocity)


Thorsten Kamann ● thorsten.kamann@itemis.de                       35
Spring Web MVC
                 Convention over Configuration

                 • URL  Controller
                   /welcome/*  WelcomeController
                 • Automatische Übergabe von Modellelementen
                   an die View: de.itemis.modell.User ist als
                   user in der View bekannt
                 • URL View
                   /welcome.jsp 
                                 /WEB-INF/jsps/welcome.jsp



Thorsten Kamann ● thorsten.kamann@itemis.de                     36
Spring Web MVC
                       Form TagLibrary
                    • Seit Spring 2.0
                    • Ermöglicht den direkten Zugriff auf Controller
                      und Command-Objekte
                    • Vereinfacht die JSP‘s
                      <form:form commandName=quot;userquot;>
                            <form:input path=„firstName“/>
                      </form:form>




Thorsten Kamann ● thorsten.kamann@itemis.de                            37
Sonstiges



Thorsten Kamann ● thorsten.kamann@itemis.de    38
Sonstiges: JPA
                      JPA
                      • Abstraktionsschicht für JPA
                      • JPATemplate und JPADaoSupport arbeiten
                        gegen die „Plain JPA-API“
                      • Einfache Arbeit mit verschiedenen JPA-
                        Implementierungen




Thorsten Kamann ● thorsten.kamann@itemis.de                      39
Sonstiges: JDBC
                       JDBC
                      • NamedParameterJdbcTemplate
                         String sql =
                           „SELECT * FROM C WHERE c.fn = :firstName“

                         anstatt

                         String sql =
                           „SELECT * FROM C WHERE c.fn = ?“

                      • SimpleJdbcTemplate
                        • Autoboxing
                        • varargs



Thorsten Kamann ● thorsten.kamann@itemis.de                            40
Sonstiges: Dynamische Sprachen
                Dynamische Sprachen
               • Groovy, JRuby, BeanShell
               • Eigener Namespace für jede Sprache
                 • lang:groovy, lang:jruby, lang:bsh
               • Autom. Reloading
                 • refresh-check-delay=quot;TIME_IN_MSECquot;
               • Inline-Scripts
               • Grails ist eine Spring Web MVC Anwendung




Thorsten Kamann ● thorsten.kamann@itemis.de                 41
Sonstiges: JMX
                     JMX

                     • Notification Mechanismus
                       • NotificationListener
                       • NotificationPublisher
                     • Kontrolle des Verhaltens bei der
                       Registrierung im MbeanServer
                       • REGISTRATION_FAIL_ON_EXISTING
                       • REGISTRATION_IGNORE_EXISTING
                       • REGISTRATION_REPLACE_EXISTING


Thorsten Kamann ● thorsten.kamann@itemis.de               42
Sonstiges: Task Scheduler
                       Task Scheduler
                       • Abstraktionsschicht für das Konzept der
                         Executors (Thread Pools in Java 5)
                       • Verfügbar auch für Java 1.3 und Java 1.4
                       • Synchrone, asynchrone, zeitgesteuerte Tasks
                       • Konfiguration über Beandefinitionen
                          <bean id=quot;tEquot;
                          class=quot;o.s.ThreadPoolTaskExecutor“/>
                          <bean ...>
                              <constructor-arg ref=quot;tEquot; />
                          </bean>


Thorsten Kamann ● thorsten.kamann@itemis.de                            43
Sonstiges: Java5-Support
                      Java5-Support
                      • Annotations
                        • AOP, Transaktionen, Konfiguration
                        • Verlagert die Konfiguration von XML nach
                          Java Vor- oder Nachteil?
                      • Beispiele:
                         <tx:annotation-driven
                               transaction-manager=quot;txManagerquot;/>
                         <aop:aspectj-autoproxy/>
                      • Generics



Thorsten Kamann ● thorsten.kamann@itemis.de                          44
Sonstiges: Portlet MVC Framework
                      Portlet MVC Framework
                      • Basiert auf den gleichen Konzepten wie das
                        Spring Web MVC
                      • JSR-168 The Java Portlet Specification
                      • Unterstützt Spring Webflow




Thorsten Kamann ● thorsten.kamann@itemis.de                          45
Spring im
              Entwicklungsprozess



Thorsten Kamann ● thorsten.kamann@itemis.de   46
Agiles und iteratives Vorgehen
                  Agil
                  • Agiles Vorgehen wird im Sinne von Flexibilität
                    unterstützt
                  • Hohe Modularisierung möglich
                  • Flexible Anpassung von Konfigurationen

                  Iterativ
                  • Die Konfiguration wächst mit der Software
                  • Zusätzliche Features brauchen erst konfiguriert
                    werden, wenn die Implementierung existiert

Thorsten Kamann ● thorsten.kamann@itemis.de                           47
Modellgetriebene Entwicklung
                      MDSD


                    • Konfigurationen sind einfach zu generieren
                    • Annotations verringern die Menge an
                      generierten Codezeilen
                    • Modularisierung ermöglicht manuelle
                      Anpassung des Generats
                    • Erzeugung von Testhelpern und –stubs
                      beschleunigen die Erstellung von Tests


Thorsten Kamann ● thorsten.kamann@itemis.de                        48
Unit-Test
                    Software-Tests

                   • Dependency Injection fördert die Testbarkeit
                     von Systemen
                   • Austauschbare Konfiguration ermöglicht
                     angepasste Konfiguration für Tests
                   • Integrationstests werden unterstützt
                   • Tests selber können mit Spring konfiguriert
                     werden



Thorsten Kamann ● thorsten.kamann@itemis.de                         49
Zusammenfassung



Thorsten Kamann ● thorsten.kamann@itemis.de   50
Zusammenfassung
                   Fazit
                  • Spring2 bietet viele sinnvolle Verbesserungen
                    und Erweiterungen
                  • Die fast 100% Abwärtskompatibilität
                    vereinfacht die Migration bestehender
                    Anwendungen
                  • Durch die vollständige Integration von AOP
                    lässt sich sehr bequem Funktionalität zu
                    bestehendem Code hinzufügen
                  • Der Scriptsupport ermöglicht es, sehr
                    dynamische Software zu bauen

Thorsten Kamann ● thorsten.kamann@itemis.de                         51
Zusammenfassung
                      Ausblick
                      • Spring befindet sich auf dem Weg zu einer
                        noch besseren Modularisierung
                      • Teile werden in Spring-Modules ausgelagert
                      • Einbindung in 3rd-Party Produkte ist heute
                        schon problemlos möglich (z.B. Celtix – ein
                        OS ESB)
                      • Spring Web MVC und Spring Portlet
                        Framework bieten eine sehr gute Basis für
                        Webanwendungen (siehe Grails)


Thorsten Kamann ● thorsten.kamann@itemis.de                           52
Links



Thorsten Kamann ● thorsten.kamann@itemis.de           53
Links
• Springframework Webseite
  http://www.springframework.org
• Spring IDE (Eclipse Plugin)
  http://www.springide.org
• Grails
  http://www.grails.org/
• Thorsten Kamann
  http://www.thorsten-kamann.de
• Beispielprojekt mit Spring2, Hibernate und AOP
  http://thorque.wiki.com/Spring_2.0


Thorsten Kamann ● thorsten.kamann@itemis.de        54

Más contenido relacionado

La actualidad más candente

DOAG 2006: More than Dept and Emp mit JDeveloper and ADF
DOAG 2006: More than Dept and Emp mit JDeveloper and ADFDOAG 2006: More than Dept and Emp mit JDeveloper and ADF
DOAG 2006: More than Dept and Emp mit JDeveloper and ADFUlrich Gerkmann-Bartels
 
Webinar Modern ABAP
Webinar Modern ABAPWebinar Modern ABAP
Webinar Modern ABAPCadaxo GmbH
 
Frontend-Architektur der 1&1 Bestellsysteme
Frontend-Architektur der 1&1 BestellsystemeFrontend-Architektur der 1&1 Bestellsysteme
Frontend-Architektur der 1&1 BestellsystemeNico Steiner
 
WJAX 2012: Dreamteam "BPM + Java EE"
WJAX 2012: Dreamteam "BPM + Java EE"WJAX 2012: Dreamteam "BPM + Java EE"
WJAX 2012: Dreamteam "BPM + Java EE"camunda services GmbH
 
Webinar ABAP 7.51 Releaseinformationen
Webinar ABAP 7.51 ReleaseinformationenWebinar ABAP 7.51 Releaseinformationen
Webinar ABAP 7.51 ReleaseinformationenCadaxo GmbH
 
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...Lukas Eder
 
Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...
Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...
Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...kaftanenko
 
Einführung in Ruby On Rails
Einführung in Ruby On RailsEinführung in Ruby On Rails
Einführung in Ruby On Railsfoobar2605
 
Auszug Seminarunterlagen "Tomcat 6.x"
Auszug Seminarunterlagen "Tomcat 6.x"Auszug Seminarunterlagen "Tomcat 6.x"
Auszug Seminarunterlagen "Tomcat 6.x"schellsoft
 
Leichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Leichtgewichtige Architekturen mit Spring, JPA, Maven und GroovyLeichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Leichtgewichtige Architekturen mit Spring, JPA, Maven und GroovyThorsten Kamann
 
Performance durch Caching
Performance durch CachingPerformance durch Caching
Performance durch CachingAOE
 
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Ralf Sigmund
 
Migrate your Sametime Server to LDAP Authentication (Admincamp 2013)
Migrate your Sametime Server to LDAP Authentication (Admincamp 2013)Migrate your Sametime Server to LDAP Authentication (Admincamp 2013)
Migrate your Sametime Server to LDAP Authentication (Admincamp 2013)Novakenstein
 
Reporting mit Jasper Reports
Reporting mit Jasper ReportsReporting mit Jasper Reports
Reporting mit Jasper Reportsgedoplan
 
2. Technologie-Tag - Frontend Architektur
2. Technologie-Tag - Frontend Architektur2. Technologie-Tag - Frontend Architektur
2. Technologie-Tag - Frontend ArchitekturNico Steiner
 
High Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der CloudHigh Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der CloudAOE
 

La actualidad más candente (18)

DOAG 2006: More than Dept and Emp mit JDeveloper and ADF
DOAG 2006: More than Dept and Emp mit JDeveloper and ADFDOAG 2006: More than Dept and Emp mit JDeveloper and ADF
DOAG 2006: More than Dept and Emp mit JDeveloper and ADF
 
Webinar Modern ABAP
Webinar Modern ABAPWebinar Modern ABAP
Webinar Modern ABAP
 
Frontend-Architektur der 1&1 Bestellsysteme
Frontend-Architektur der 1&1 BestellsystemeFrontend-Architektur der 1&1 Bestellsysteme
Frontend-Architektur der 1&1 Bestellsysteme
 
Backbase Intro
Backbase IntroBackbase Intro
Backbase Intro
 
WJAX 2012: Dreamteam "BPM + Java EE"
WJAX 2012: Dreamteam "BPM + Java EE"WJAX 2012: Dreamteam "BPM + Java EE"
WJAX 2012: Dreamteam "BPM + Java EE"
 
Webinar ABAP 7.51 Releaseinformationen
Webinar ABAP 7.51 ReleaseinformationenWebinar ABAP 7.51 Releaseinformationen
Webinar ABAP 7.51 Releaseinformationen
 
JBoss ESB
JBoss ESBJBoss ESB
JBoss ESB
 
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...
 
Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...
Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...
Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...
 
Einführung in Ruby On Rails
Einführung in Ruby On RailsEinführung in Ruby On Rails
Einführung in Ruby On Rails
 
Auszug Seminarunterlagen "Tomcat 6.x"
Auszug Seminarunterlagen "Tomcat 6.x"Auszug Seminarunterlagen "Tomcat 6.x"
Auszug Seminarunterlagen "Tomcat 6.x"
 
Leichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Leichtgewichtige Architekturen mit Spring, JPA, Maven und GroovyLeichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Leichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
 
Performance durch Caching
Performance durch CachingPerformance durch Caching
Performance durch Caching
 
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
 
Migrate your Sametime Server to LDAP Authentication (Admincamp 2013)
Migrate your Sametime Server to LDAP Authentication (Admincamp 2013)Migrate your Sametime Server to LDAP Authentication (Admincamp 2013)
Migrate your Sametime Server to LDAP Authentication (Admincamp 2013)
 
Reporting mit Jasper Reports
Reporting mit Jasper ReportsReporting mit Jasper Reports
Reporting mit Jasper Reports
 
2. Technologie-Tag - Frontend Architektur
2. Technologie-Tag - Frontend Architektur2. Technologie-Tag - Frontend Architektur
2. Technologie-Tag - Frontend Architektur
 
High Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der CloudHigh Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der Cloud
 

Destacado

Gana dinero a diario
Gana dinero a diarioGana dinero a diario
Gana dinero a diarioRoberto Niño
 
Como enviar un correo firmado digitalmente
Como enviar un correo firmado digitalmenteComo enviar un correo firmado digitalmente
Como enviar un correo firmado digitalmentecubela
 
Proyectoecologicopilas
ProyectoecologicopilasProyectoecologicopilas
Proyectoecologicopilaslagacetistapya
 
Importancia de los valores para una convivencia social
Importancia de los valores para una convivencia socialImportancia de los valores para una convivencia social
Importancia de los valores para una convivencia socialcamiloups
 
Suchmaschinen-Optimierung
Suchmaschinen-OptimierungSuchmaschinen-Optimierung
Suchmaschinen-OptimierungFH Joanneum
 
Plan de clase docencia y curriculum
Plan de clase docencia y curriculumPlan de clase docencia y curriculum
Plan de clase docencia y curriculumAlex Bueno
 
FORO - Presentarse, abrir y responder nuevos temas. Entrar a la chatbox.
FORO - Presentarse, abrir y responder nuevos temas. Entrar a la chatbox.FORO - Presentarse, abrir y responder nuevos temas. Entrar a la chatbox.
FORO - Presentarse, abrir y responder nuevos temas. Entrar a la chatbox.Merluza1979
 
HSEdesign: Weltformat
HSEdesign: WeltformatHSEdesign: Weltformat
HSEdesign: Weltformathsedesign
 
Quevedo lindo
Quevedo lindoQuevedo lindo
Quevedo lindoCyber SDL
 

Destacado (20)

Presentación1
Presentación1Presentación1
Presentación1
 
Gana dinero a diario
Gana dinero a diarioGana dinero a diario
Gana dinero a diario
 
Axiologia y anomia
Axiologia y anomiaAxiologia y anomia
Axiologia y anomia
 
Comercial y oficina
Comercial y oficinaComercial y oficina
Comercial y oficina
 
Presentaciónp
PresentaciónpPresentaciónp
Presentaciónp
 
P.o.p
P.o.pP.o.p
P.o.p
 
LAS VOCALES
LAS VOCALESLAS VOCALES
LAS VOCALES
 
Eco local
Eco localEco local
Eco local
 
Como enviar un correo firmado digitalmente
Como enviar un correo firmado digitalmenteComo enviar un correo firmado digitalmente
Como enviar un correo firmado digitalmente
 
Proyectoecologicopilas
ProyectoecologicopilasProyectoecologicopilas
Proyectoecologicopilas
 
Importancia de los valores para una convivencia social
Importancia de los valores para una convivencia socialImportancia de los valores para una convivencia social
Importancia de los valores para una convivencia social
 
H4 sem facebook
H4 sem facebookH4 sem facebook
H4 sem facebook
 
Service Entgelt
Service EntgeltService Entgelt
Service Entgelt
 
Suchmaschinen-Optimierung
Suchmaschinen-OptimierungSuchmaschinen-Optimierung
Suchmaschinen-Optimierung
 
C2 lenguaje html
C2 lenguaje htmlC2 lenguaje html
C2 lenguaje html
 
Datensammler und Kostenfallen - Tatjana Halm
Datensammler und Kostenfallen - Tatjana HalmDatensammler und Kostenfallen - Tatjana Halm
Datensammler und Kostenfallen - Tatjana Halm
 
Plan de clase docencia y curriculum
Plan de clase docencia y curriculumPlan de clase docencia y curriculum
Plan de clase docencia y curriculum
 
FORO - Presentarse, abrir y responder nuevos temas. Entrar a la chatbox.
FORO - Presentarse, abrir y responder nuevos temas. Entrar a la chatbox.FORO - Presentarse, abrir y responder nuevos temas. Entrar a la chatbox.
FORO - Presentarse, abrir y responder nuevos temas. Entrar a la chatbox.
 
HSEdesign: Weltformat
HSEdesign: WeltformatHSEdesign: Weltformat
HSEdesign: Weltformat
 
Quevedo lindo
Quevedo lindoQuevedo lindo
Quevedo lindo
 

Similar a Spring 2.0

bccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-admins
bccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-adminsbccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-admins
bccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-adminsICS User Group
 
Tipps und Skripts aus dem Leben eines Connections Admins
Tipps und Skripts aus dem Leben eines Connections AdminsTipps und Skripts aus dem Leben eines Connections Admins
Tipps und Skripts aus dem Leben eines Connections AdminsKlaus Bild
 
Icsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratoren
Icsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratorenIcsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratoren
Icsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratorenICS User Group
 
Jax 2012-activiti-und-camel-presentation
Jax 2012-activiti-und-camel-presentationJax 2012-activiti-und-camel-presentation
Jax 2012-activiti-und-camel-presentationcamunda services GmbH
 
Enterprise Java Batch mit Spring
Enterprise Java Batch mit SpringEnterprise Java Batch mit Spring
Enterprise Java Batch mit Springdenschu
 
Avatr – Dein virtueller Assistent. Robert Granich, AvatR GbR, Dresden
Avatr – Dein virtueller Assistent. Robert Granich, AvatR GbR, DresdenAvatr – Dein virtueller Assistent. Robert Granich, AvatR GbR, Dresden
Avatr – Dein virtueller Assistent. Robert Granich, AvatR GbR, DresdenLeiter AK Software - Dr. Schönefeld
 
JAX 2013: BPMN 2.0 gehört in den Werkzeugkasten JEDES Java- Entwicklers
JAX 2013: BPMN 2.0 gehört in den Werkzeugkasten JEDES Java- EntwicklersJAX 2013: BPMN 2.0 gehört in den Werkzeugkasten JEDES Java- Entwicklers
JAX 2013: BPMN 2.0 gehört in den Werkzeugkasten JEDES Java- Entwicklerscamunda services GmbH
 
B1 Lotusday 2008 Vortrag X Forms Rapid Development
B1 Lotusday 2008 Vortrag X Forms Rapid DevelopmentB1 Lotusday 2008 Vortrag X Forms Rapid Development
B1 Lotusday 2008 Vortrag X Forms Rapid DevelopmentAndreas Schulte
 
Whitepaper Infopark Cloud Express
Whitepaper Infopark Cloud ExpressWhitepaper Infopark Cloud Express
Whitepaper Infopark Cloud ExpressJustRelate
 
JBoss AS / EAP Clustering
JBoss AS / EAP  ClusteringJBoss AS / EAP  Clustering
JBoss AS / EAP Clusteringhwilming
 
Meet Magento - High performance magento
Meet Magento - High performance magentoMeet Magento - High performance magento
Meet Magento - High performance magentoAOE
 
Deployment mit Webistrano
Deployment mit WebistranoDeployment mit Webistrano
Deployment mit Webistranodaniel.mattes
 
Optimierung von JPA-Anwendungen
Optimierung von JPA-AnwendungenOptimierung von JPA-Anwendungen
Optimierung von JPA-Anwendungengedoplan
 
Entity Framework Core - Der Umstieg auf Core
Entity Framework Core - Der Umstieg auf CoreEntity Framework Core - Der Umstieg auf Core
Entity Framework Core - Der Umstieg auf CoreNETUserGroupBern
 
MongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDBMongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDBTobias Trelle
 

Similar a Spring 2.0 (20)

jBPM & Drools
jBPM & DroolsjBPM & Drools
jBPM & Drools
 
bccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-admins
bccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-adminsbccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-admins
bccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-admins
 
Tipps und Skripts aus dem Leben eines Connections Admins
Tipps und Skripts aus dem Leben eines Connections AdminsTipps und Skripts aus dem Leben eines Connections Admins
Tipps und Skripts aus dem Leben eines Connections Admins
 
Icsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratoren
Icsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratorenIcsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratoren
Icsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratoren
 
Jax 2012-activiti-und-camel-presentation
Jax 2012-activiti-und-camel-presentationJax 2012-activiti-und-camel-presentation
Jax 2012-activiti-und-camel-presentation
 
Enterprise Java Batch mit Spring
Enterprise Java Batch mit SpringEnterprise Java Batch mit Spring
Enterprise Java Batch mit Spring
 
Scaling Rails
Scaling RailsScaling Rails
Scaling Rails
 
Avatr – Dein virtueller Assistent. Robert Granich, AvatR GbR, Dresden
Avatr – Dein virtueller Assistent. Robert Granich, AvatR GbR, DresdenAvatr – Dein virtueller Assistent. Robert Granich, AvatR GbR, Dresden
Avatr – Dein virtueller Assistent. Robert Granich, AvatR GbR, Dresden
 
20110119 activiti jughh
20110119 activiti jughh20110119 activiti jughh
20110119 activiti jughh
 
WJAX 2012: Advanced Activiti
WJAX 2012: Advanced ActivitiWJAX 2012: Advanced Activiti
WJAX 2012: Advanced Activiti
 
JAX 2013: BPMN 2.0 gehört in den Werkzeugkasten JEDES Java- Entwicklers
JAX 2013: BPMN 2.0 gehört in den Werkzeugkasten JEDES Java- EntwicklersJAX 2013: BPMN 2.0 gehört in den Werkzeugkasten JEDES Java- Entwicklers
JAX 2013: BPMN 2.0 gehört in den Werkzeugkasten JEDES Java- Entwicklers
 
B1 Lotusday 2008 Vortrag X Forms Rapid Development
B1 Lotusday 2008 Vortrag X Forms Rapid DevelopmentB1 Lotusday 2008 Vortrag X Forms Rapid Development
B1 Lotusday 2008 Vortrag X Forms Rapid Development
 
Whitepaper Infopark Cloud Express
Whitepaper Infopark Cloud ExpressWhitepaper Infopark Cloud Express
Whitepaper Infopark Cloud Express
 
JBoss AS / EAP Clustering
JBoss AS / EAP  ClusteringJBoss AS / EAP  Clustering
JBoss AS / EAP Clustering
 
Meet Magento - High performance magento
Meet Magento - High performance magentoMeet Magento - High performance magento
Meet Magento - High performance magento
 
Deployment mit Webistrano
Deployment mit WebistranoDeployment mit Webistrano
Deployment mit Webistrano
 
Optimierung von JPA-Anwendungen
Optimierung von JPA-AnwendungenOptimierung von JPA-Anwendungen
Optimierung von JPA-Anwendungen
 
Entity Framework Core - Der Umstieg auf Core
Entity Framework Core - Der Umstieg auf CoreEntity Framework Core - Der Umstieg auf Core
Entity Framework Core - Der Umstieg auf Core
 
MongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDBMongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDB
 
Sage CRM 7.1 Versionshinweise
Sage CRM 7.1 VersionshinweiseSage CRM 7.1 Versionshinweise
Sage CRM 7.1 Versionshinweise
 

Más de Thorsten Kamann

Scrum and distributed teams
Scrum and distributed teamsScrum and distributed teams
Scrum and distributed teamsThorsten Kamann
 
Effizente Entwicklung für verteilte Projekte
Effizente Entwicklung für verteilte ProjekteEffizente Entwicklung für verteilte Projekte
Effizente Entwicklung für verteilte ProjekteThorsten Kamann
 
Spring 3 - Der dritte Frühling
Spring 3 - Der dritte FrühlingSpring 3 - Der dritte Frühling
Spring 3 - Der dritte FrühlingThorsten Kamann
 
Spring 3 - An Introduction
Spring 3 - An IntroductionSpring 3 - An Introduction
Spring 3 - An IntroductionThorsten Kamann
 
Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and Maven
Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and MavenWebtests Reloaded - Webtest with Selenium, TestNG, Groovy and Maven
Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and MavenThorsten Kamann
 
My Daily Spring - Best Practices with the Springframework
My Daily Spring - Best Practices with the SpringframeworkMy Daily Spring - Best Practices with the Springframework
My Daily Spring - Best Practices with the SpringframeworkThorsten Kamann
 
Vortragsreihe Dortmund: Unified Development Environments
Vortragsreihe Dortmund: Unified Development EnvironmentsVortragsreihe Dortmund: Unified Development Environments
Vortragsreihe Dortmund: Unified Development EnvironmentsThorsten Kamann
 
Leichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Leichtgewichtige Architekturen mit Spring, JPA, Maven und GroovyLeichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Leichtgewichtige Architekturen mit Spring, JPA, Maven und GroovyThorsten Kamann
 
Let’s groove with Groovy
Let’s groove with GroovyLet’s groove with Groovy
Let’s groove with GroovyThorsten Kamann
 
Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Thorsten Kamann
 

Más de Thorsten Kamann (12)

Scrum on rails
Scrum on railsScrum on rails
Scrum on rails
 
Scrum and distributed teams
Scrum and distributed teamsScrum and distributed teams
Scrum and distributed teams
 
Effizente Entwicklung für verteilte Projekte
Effizente Entwicklung für verteilte ProjekteEffizente Entwicklung für verteilte Projekte
Effizente Entwicklung für verteilte Projekte
 
Spring 3 - Der dritte Frühling
Spring 3 - Der dritte FrühlingSpring 3 - Der dritte Frühling
Spring 3 - Der dritte Frühling
 
Spring 3 - An Introduction
Spring 3 - An IntroductionSpring 3 - An Introduction
Spring 3 - An Introduction
 
Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and Maven
Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and MavenWebtests Reloaded - Webtest with Selenium, TestNG, Groovy and Maven
Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and Maven
 
My Daily Spring - Best Practices with the Springframework
My Daily Spring - Best Practices with the SpringframeworkMy Daily Spring - Best Practices with the Springframework
My Daily Spring - Best Practices with the Springframework
 
Vortragsreihe Dortmund: Unified Development Environments
Vortragsreihe Dortmund: Unified Development EnvironmentsVortragsreihe Dortmund: Unified Development Environments
Vortragsreihe Dortmund: Unified Development Environments
 
Leichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Leichtgewichtige Architekturen mit Spring, JPA, Maven und GroovyLeichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Leichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
 
Let’s groove with Groovy
Let’s groove with GroovyLet’s groove with Groovy
Let’s groove with Groovy
 
Groovy - Rocks or Not?
Groovy - Rocks or Not?Groovy - Rocks or Not?
Groovy - Rocks or Not?
 
Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?
 

Spring 2.0

  • 1. Thorsten Kamann ● thorsten.kamann@itemis.de 1
  • 2. Inhalt Einführung Konfiguration AOP Transaktionen Spring Web MVC Sonstiges Zusammenfassung Thorsten Kamann ● thorsten.kamann@itemis.de 2
  • 3. Einführung: Was ist Spring? Thorsten Kamann ● thorsten.kamann@itemis.de 3
  • 4. Einführung: Was ist Spring? IoC Ansammlung (Dependency von API‘s Injection) Programmiermodell Thorsten Kamann ● thorsten.kamann@itemis.de 4
  • 5. Einführung: Spring Komponenten Spring Core The IoC Container AOP Web JEE Spring AOP Spring Web MVC JMX AspectJ Integration Struts JMS WebWork JCA Tapestry Remoting DAO ORM JSF EJB‘s Spring JDBC Hibernate PDF Email Transaction JPA Jasper Reports Management TopLink Excel JDO Spring Portlet MVC Thorsten Kamann ● thorsten.kamann@itemis.de 5
  • 6. Einführung: Features Leichtgewichtiger Container • Zentralisierte und automatisierte Konfiguration und Verdrahtung der Anwendungsobjekte • Nicht invasiv • Fügt lose gekoppelte Komponenten (POJO's) zu komplexen Systemen zusammen • Skalierbar • Verbessert die Testbarkeit der Komponenten, indem sie zuerst unabhängig von der Serverinfrastruktur getestet werden können Thorsten Kamann ● thorsten.kamann@itemis.de 6
  • 7. Einführung: Features Abstraktionsschicht für Transaktions- Management • Erweiterbares Transaktions-Management • Deklarative Konfiguration der Transaktionen, ohne tief in das entsprechende Framework einzusteigen • Im Gegensatz zu reinem JTA oder EJB CMP ist dieses Transaktions-Management nicht auf J2EE-Umgebungen beschränkt Thorsten Kamann ● thorsten.kamann@itemis.de 7
  • 8. Einführung: Features Abstraktionsschicht für reines JDBC • Reduziert den Code für auf JDBC-basierte Anwendungen • Vereinfacht die Fehlerbehandlung • Bietet eine aussagekräftige Exception- Hierarchie (herstellerunabhängig) • Exceptions basieren auf der DAO-Exception- Hierarchie Thorsten Kamann ● thorsten.kamann@itemis.de 8
  • 9. Einführung: Features Integration von populären O/R-Mappern • Unterstützung von Hibernate, Toplink, JDO und iBATIS SQL Maps • Vereinfacht die Entwicklung mit diesen O/R- Mappern • Unterstützung von Transaktionen • Unterstützung des DAO-Patterns Thorsten Kamann ● thorsten.kamann@itemis.de 9
  • 10. Einführung: Features AOP Funktionalität • Basiert auf AspectJ • Vollständig integriert in das Spring Konfigurations-Management • Transaktions-Management basiert auf AOP • Jedes Objekt in Spring kann mittels AOP gemanaged werden Thorsten Kamann ● thorsten.kamann@itemis.de 10
  • 11. Einführung: Features Flexibles MVC-Webapplication Framework • Benutzt die Spring-Core Funktionalitäten • Sehr konfigurierbar durch verschiedene Strategie-Interfaces • Kombinierbar mit den verschiedensten Viewtechnologien: • JSP, Velocity, Tiles, iText, POI Thorsten Kamann ● thorsten.kamann@itemis.de 11
  • 12. Konfiguration Thorsten Kamann ● thorsten.kamann@itemis.de 12
  • 13. Konfiguration: XML-Schema Konfiguration per XML-Schema • Spring Konfigurationen basieren auf XML- Schema • Durch XML-Schema ist eine direktere Konfiguration möglich • Dadurch kürzere und eindeutigere Konfigurationen Thorsten Kamann ● thorsten.kamann@itemis.de 13
  • 14. Konfiguration: XML-Schema Alt: • <bean id=“bean1quot; class=“a.b.Beanquot;> <property name=“prop1“ value=“value1quot;/> </bean> Neu: • <bean id=„bean1“ class=„a.b.Bean“ p.prop1=„value1“/> Thorsten Kamann ● thorsten.kamann@itemis.de 14
  • 15. Konfiguration: Modularisierung Konfiguration besteht aus verschiedenen Schemata • Beans - Konfiguration von Spring-Beans • Utils - Utilities wie Maps, Lists, Static Fields • JEE - J2EE Konfiguration, wie EJB, JNDI • Lang - Scriptsprachen (Groovy, JRuby, BeanShell) • Tx - Transaktionen • Aop - Aspekte • Tool - 3rd Party Erweiterungen Thorsten Kamann ● thorsten.kamann@itemis.de 15
  • 16. Konfiguration: Erweiterungen Erweiterbare Konfiguration • 3rd Party Erweiterungen • Domänen-spezifische Konfigurationsdialekte • Tools-Schema unterstützt die Erstellung von Erweiterungen • Einfaches Deployment mittels JAR Thorsten Kamann ● thorsten.kamann@itemis.de 16
  • 17. Konfiguration: XML • <beans> <bean id=„marge“ class=„Person“ p:name=„marge“> <property name=„husband“> <bean class=„Person“ p:name=„homer“ p:age=„45“> <property name=„props“> <props> <prop key=„overweight“>true</prop> <prop key=„height“>1.8m</prop> </props> </property> </bean> </property> <property name=„children“><list>…</list></property> </bean> <bean id=„bart“ …/> <bean id=„lisa“ …/> </beans> Thorsten Kamann ● thorsten.kamann@itemis.de 17
  • 18. Konfiguration: Java • @Configuration public class MyConfig { @Bean public Person marge() { Person marge = new Person(); Person husband = new Person(); marge.setName(„marge“); marge.setHusband(husband); marge.addCildren(bart); return marge; } @Bean public Person bart () { Person bart = new Person(); return bart; } } Thorsten Kamann ● thorsten.kamann@itemis.de 18
  • 19. Konfiguration: GroovyBuilder • bb.beans { marge(Person.class) { name = quot;marge„ husband = { Person p -> name = quot;homer„ age = 45 props = [overweight:true, height:quot;1.8mquot;] } children = [bart, lisa] } bart(Person.class) {} lisa(Person.class) {} } Thorsten Kamann ● thorsten.kamann@itemis.de 19
  • 20. Konfiguration: Bean Scopes 5 Bean Scopes • Singleton • Prototype • *Request (Web) • *Session (Web) • *Global Session (Portlets) Thorsten Kamann ● thorsten.kamann@itemis.de 20
  • 21. AOP Thorsten Kamann ● thorsten.kamann@itemis.de 21
  • 22. AOP: Allgemein SpringAOP vs AspectJ • SpringAOP ist einfacher und kann mit einfachen Beans arbeiten • SpringAOP unterstützt zur Zeit nur Methoden- basierte Join Points • AspectJ wird vollständig unterstützt und kann auch auf nicht-SpringBeans angewandt werden Thorsten Kamann ● thorsten.kamann@itemis.de 22
  • 23. AOP: Konfiguration Konfigurationsoptionen • Annotations (@AspectJ) oder XML-basiert • Aktivierung von @AspectJ mit <aop:aspectj- autoproxy/> • Pointcut-Definition mit AspectJ Expression- Sprache • AOP-Autoproxies (default) oder CGLIB- Proxies Thorsten Kamann ● thorsten.kamann@itemis.de 23
  • 24. AOP: Beispiel (Java-Code) public class SimpleProfiler { public Object profile(ProceedingJoinPoint call) throws Throwable { StopWatch clock = new StopWatch( quot;Profiling for 'quot; + call.toShortString() + quot;'quot;); try { clock.start(call.toShortString()); return call.proceed(); } finally { clock.stop(); System.out.println(clock.prettyPrint()); } } } Thorsten Kamann ● thorsten.kamann@itemis.de 24
  • 25. AOP: Beispiel (Konfig. mit Schema) <bean id=quot;profiler“ class=„d.it.s2.test.aop.SimpleProfilerquot; /> <aop:config> <aop:aspect ref=quot;profilerquot;> <aop:pointcut id=quot;daoCreatequot; expression=quot;execution(* d.i.s.dao.*.create*(..))quot; /> <aop:around pointcut-ref=quot;daoCreatequot; method=quot;profilequot; /> </aop:aspect> <aop:aspect ref=quot;profilerquot;> <aop:pointcut id=quot;daoSavequot; expression=quot;execution(* d.i.s2.dao.*.save*(..))quot; /> <aop:around pointcut-ref=quot;daoSavequot; method=quot;profilequot; /> </aop:aspect> </aop:config> Thorsten Kamann ● thorsten.kamann@itemis.de 25
  • 26. AOP: Beispiel (Annotations) @Aspect public class SimpleProfilerAnnotated { @Pointcut execution(* de.itemis.spring2.dao..create*(..)) public void create(){}; @Around(„create()“) public Object profile(ProceedingJoinPoint call) throws Throwable { […] } } Thorsten Kamann ● thorsten.kamann@itemis.de 26
  • 27. AOP: Beispiel (Konfig. mit @AspectJ) <bean id=quot;profiler“ class=„d.i.s2.test.aop.SimpleProfilerAnnotatedquot; /> <aop:aspectj-autoproxy/> Thorsten Kamann ● thorsten.kamann@itemis.de 27
  • 28. Transaktionen Thorsten Kamann ● thorsten.kamann@itemis.de 28
  • 29. Transaktionen:Übersicht In: Create Transaction Out: Commit/Rollback AOP- Transaction- Custom Caller Target Proxy Advisor Advisor(s) Vor oder nach Business- Proxy dem Transaction- Logik anstatt des Ziels Advisor Thorsten Kamann ● thorsten.kamann@itemis.de 29
  • 30. Transaktionen:Konfiguration Konfiguration • XML-Schema (tx-Namensraum) • Annotations • Programmatisch • Intern wird AOP verwendet • Durch Verwendung von AspectJ Ausweitung auf nicht-Spring-Objekte möglich Thorsten Kamann ● thorsten.kamann@itemis.de 30
  • 31. Transaktionen: Konfiguration (XML-Schema) <bean id=„txManager“/> <tx:advice id=„txAdvice“ transaction-manager=„txManager“> <tx:attributes> <tx:method name=„get*“ read-only=„true“/> <tx:method name=„*“/> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id=„pid“ expression=„…“/> <aop:advisor advice-ref=„txAdvice“ pointcut-ref=„pid“/> </aop:config> Thorsten Kamann ● thorsten.kamann@itemis.de 31
  • 32. Transaktionen: Konfiguration (Annotations) @Transactional(readOnly = true) public class DefaultFooService implements FooService { public Foo getFoo(String fooName) { } @Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW) public void updateFoo(Foo foo) { } } Thorsten Kamann ● thorsten.kamann@itemis.de 32
  • 33. Transaktionen: Konfiguration (Annotations) <tx:annotation-driven transaction-manager=quot;txManagerquot;/> <bean id=quot;txManagerquot; class=„o.s.jdbc.datasource.DataSourceTransactionManager„ p:dataSource-ref=„dataSource“/> Thorsten Kamann ● thorsten.kamann@itemis.de 33
  • 34. Spring Web MVC Thorsten Kamann ● thorsten.kamann@itemis.de 34
  • 35. Spring Web MVC: Übersicht Features • Trennung von Rollen (Controller, Validator, Command Object, Form Object, Model,…) • Convention over Configuration • Unterstützung sämtlicher Spring Features • Eigene TagLibrary • Unterstützung einer großen Anzahl von Web- Frameworks (JSP, JSF, Struts, Tapestry, WebWork, Velocity) Thorsten Kamann ● thorsten.kamann@itemis.de 35
  • 36. Spring Web MVC Convention over Configuration • URL  Controller /welcome/*  WelcomeController • Automatische Übergabe von Modellelementen an die View: de.itemis.modell.User ist als user in der View bekannt • URL View /welcome.jsp  /WEB-INF/jsps/welcome.jsp Thorsten Kamann ● thorsten.kamann@itemis.de 36
  • 37. Spring Web MVC Form TagLibrary • Seit Spring 2.0 • Ermöglicht den direkten Zugriff auf Controller und Command-Objekte • Vereinfacht die JSP‘s <form:form commandName=quot;userquot;> <form:input path=„firstName“/> </form:form> Thorsten Kamann ● thorsten.kamann@itemis.de 37
  • 38. Sonstiges Thorsten Kamann ● thorsten.kamann@itemis.de 38
  • 39. Sonstiges: JPA JPA • Abstraktionsschicht für JPA • JPATemplate und JPADaoSupport arbeiten gegen die „Plain JPA-API“ • Einfache Arbeit mit verschiedenen JPA- Implementierungen Thorsten Kamann ● thorsten.kamann@itemis.de 39
  • 40. Sonstiges: JDBC JDBC • NamedParameterJdbcTemplate String sql = „SELECT * FROM C WHERE c.fn = :firstName“ anstatt String sql = „SELECT * FROM C WHERE c.fn = ?“ • SimpleJdbcTemplate • Autoboxing • varargs Thorsten Kamann ● thorsten.kamann@itemis.de 40
  • 41. Sonstiges: Dynamische Sprachen Dynamische Sprachen • Groovy, JRuby, BeanShell • Eigener Namespace für jede Sprache • lang:groovy, lang:jruby, lang:bsh • Autom. Reloading • refresh-check-delay=quot;TIME_IN_MSECquot; • Inline-Scripts • Grails ist eine Spring Web MVC Anwendung Thorsten Kamann ● thorsten.kamann@itemis.de 41
  • 42. Sonstiges: JMX JMX • Notification Mechanismus • NotificationListener • NotificationPublisher • Kontrolle des Verhaltens bei der Registrierung im MbeanServer • REGISTRATION_FAIL_ON_EXISTING • REGISTRATION_IGNORE_EXISTING • REGISTRATION_REPLACE_EXISTING Thorsten Kamann ● thorsten.kamann@itemis.de 42
  • 43. Sonstiges: Task Scheduler Task Scheduler • Abstraktionsschicht für das Konzept der Executors (Thread Pools in Java 5) • Verfügbar auch für Java 1.3 und Java 1.4 • Synchrone, asynchrone, zeitgesteuerte Tasks • Konfiguration über Beandefinitionen <bean id=quot;tEquot; class=quot;o.s.ThreadPoolTaskExecutor“/> <bean ...> <constructor-arg ref=quot;tEquot; /> </bean> Thorsten Kamann ● thorsten.kamann@itemis.de 43
  • 44. Sonstiges: Java5-Support Java5-Support • Annotations • AOP, Transaktionen, Konfiguration • Verlagert die Konfiguration von XML nach Java Vor- oder Nachteil? • Beispiele: <tx:annotation-driven transaction-manager=quot;txManagerquot;/> <aop:aspectj-autoproxy/> • Generics Thorsten Kamann ● thorsten.kamann@itemis.de 44
  • 45. Sonstiges: Portlet MVC Framework Portlet MVC Framework • Basiert auf den gleichen Konzepten wie das Spring Web MVC • JSR-168 The Java Portlet Specification • Unterstützt Spring Webflow Thorsten Kamann ● thorsten.kamann@itemis.de 45
  • 46. Spring im Entwicklungsprozess Thorsten Kamann ● thorsten.kamann@itemis.de 46
  • 47. Agiles und iteratives Vorgehen Agil • Agiles Vorgehen wird im Sinne von Flexibilität unterstützt • Hohe Modularisierung möglich • Flexible Anpassung von Konfigurationen Iterativ • Die Konfiguration wächst mit der Software • Zusätzliche Features brauchen erst konfiguriert werden, wenn die Implementierung existiert Thorsten Kamann ● thorsten.kamann@itemis.de 47
  • 48. Modellgetriebene Entwicklung MDSD • Konfigurationen sind einfach zu generieren • Annotations verringern die Menge an generierten Codezeilen • Modularisierung ermöglicht manuelle Anpassung des Generats • Erzeugung von Testhelpern und –stubs beschleunigen die Erstellung von Tests Thorsten Kamann ● thorsten.kamann@itemis.de 48
  • 49. Unit-Test Software-Tests • Dependency Injection fördert die Testbarkeit von Systemen • Austauschbare Konfiguration ermöglicht angepasste Konfiguration für Tests • Integrationstests werden unterstützt • Tests selber können mit Spring konfiguriert werden Thorsten Kamann ● thorsten.kamann@itemis.de 49
  • 50. Zusammenfassung Thorsten Kamann ● thorsten.kamann@itemis.de 50
  • 51. Zusammenfassung Fazit • Spring2 bietet viele sinnvolle Verbesserungen und Erweiterungen • Die fast 100% Abwärtskompatibilität vereinfacht die Migration bestehender Anwendungen • Durch die vollständige Integration von AOP lässt sich sehr bequem Funktionalität zu bestehendem Code hinzufügen • Der Scriptsupport ermöglicht es, sehr dynamische Software zu bauen Thorsten Kamann ● thorsten.kamann@itemis.de 51
  • 52. Zusammenfassung Ausblick • Spring befindet sich auf dem Weg zu einer noch besseren Modularisierung • Teile werden in Spring-Modules ausgelagert • Einbindung in 3rd-Party Produkte ist heute schon problemlos möglich (z.B. Celtix – ein OS ESB) • Spring Web MVC und Spring Portlet Framework bieten eine sehr gute Basis für Webanwendungen (siehe Grails) Thorsten Kamann ● thorsten.kamann@itemis.de 52
  • 53. Links Thorsten Kamann ● thorsten.kamann@itemis.de 53
  • 54. Links • Springframework Webseite http://www.springframework.org • Spring IDE (Eclipse Plugin) http://www.springide.org • Grails http://www.grails.org/ • Thorsten Kamann http://www.thorsten-kamann.de • Beispielprojekt mit Spring2, Hibernate und AOP http://thorque.wiki.com/Spring_2.0 Thorsten Kamann ● thorsten.kamann@itemis.de 54