SlideShare a Scribd company logo
1 of 61
Download to read offline
The Spring fram ork –J2EE s lidskou tváří
               ew
Opravdu s lidskou tváří?
Trochu o mě

• Rom Pichlík
     an
• HP Software
• Blog http://sweb.cz/pichlik
• Czech Java User Group

• CZ Podcast
Agenda

• J2EE

• Proč        je tu Spring
• Spring IOC

• Spring AOP

• Spring DAO

• Dynamické jazyky
• Spring a vliv na J2EE



4   15. listopad 2007
J2EE intro

• Nadstavba standardní            Javy
  − Enterprise oblast
    •Misssion critical aplikace
       −Webové aplikace?

• Sada specifikací      a API
  − Java Com unity Process
            m
  −Middlew dodavatelé
          are
• Klíč ové technologie

  − EJB, JTA, Servlety a JSP, JSF, JNDI, JCA a dalš í...
Jak bylo J2EE m š leno
               y

• Robustnost

• Interoperabilita

• Bezpe nost
       č
• Cluster-aware
• SOA

• Buzzwords...
Jak to dopadlo

• One size fits all

  − 80/20
  −Webové aplikace
• Velká komplexnost
  − Jednoduché vě ci slož itě a slož ité nem ž ně
                                            o
  − Příliš mnoho k uč ení
• Standardy vs Standardizace

  − Pom adopce
       alá
  − Rychlé zastarávání
Co lidé opravdu chtě jí

• Jednoduchost

  − Testovatelnost
  − Vývoj
  − Nasazení
• Agilnost

  − m š lenky
     y
  − technologie
  − postupy
Nabídka se nestřetla s
     poptávkou
?
Přichází náš rytíř




     ?
Přichází náš rytíř
?
Přichází náš rytíř



     ?
Přichází náš rytíř
?
Přichází náš rytíř



     ?
Přichází náš rytíř
Historie Spring fram orku
                    ew

• 2002

  − Rod Johnson, J2EE Design and Development
      • Návod jak dobře a úspě š ně použ ívat J2EE
      • 30000 řádků kódu

• 2003 zalo ení
           ž          open source projektu
  −   http://springfram ork.org/
                       ew
  −   http://w w
              w .springfram ork.org/docum
                           ew            entation
Úhel pohledu

• Komplexní   řeš ení
  − W Enterprise, Desktop
     eb,
• Poskytovatel   služ eb
  − transakce, AOP, konfigurace, remoting...
• Rozhraní   aplikace/prostředí
  − aplikač ní server, webový kontejner, testy
• Rozhraní   aplikace/technologie
  − Hibernate, JM JSF, JPA, JDBC, EJB...
                 S,
Co m ž ná o Springu uslyš íte
    o

• Náhrada J2EE a p edevš ím EJB
                  ř
• Sada modulů   pro rů zné použ ití
• Továrna na továrny

•Webový fram ork
            ew
• Sada pomocných API     pro Hibernate
• Pře itek v dob
     ž          ě   EJB 3.0
• Výstřelek zhýralých vývojářů
Nejvě tš í mýty

• Spring se nehodí     pro Enterprise aplikace
  − 10 velkých bankovních institucí použ ívá Spring
  −Weblogic, WebSphere AS certifikují Spring
• Spring nepouž ívají   velké firmy
  − eBay, Oracle, HP
• Spring nejde š kálovat

  − Open Terracotta
  − Tangosol Coherence Data Grid
Základní m š lenky
          y

• Zjednoduš ení   komplexnosti
  − Nejenom J2EE
  − API Abstrakce
• Neinvazivnost

• Zam ření
     ě       na architekturu aplikace
• Jednoduchá testovatelnost a použ ití

•Modulárnost
Základní m š lenky řeč í technologie
          y

• Inversion Of Control

• Aspektově   orientované programování (AOP)
• OOP p ístup
       ř
  − programování rozhraním
• Open-Closed princip

  − otevřený pro rozš íření
  − uzavřený pro modifikace
• POJO (Plain Old Java Objects) p ístup
                                 ř
Stavební kameny
Modulárnost

• Použ ij   co potřebuješ
• JAR distribuce

  − kompletní (2,5 MB)
  − po modulech
•Malá závislost na knihovnách třetích stran
• Rů zné scénáře použ ití   modulů
Vš echny moduly
Integrace s w fram orky
             eb   ew
Remoting
Subprojekty kolem Springu

• Spring W Flow
          eb
• Spring Security

• Spring Dynam M
              ic odules
• Spring W Services
          eb
• Spring Batch

• Spring Integration

• Spring IDE

• Spring SpringSource dm Server
Inversion Of Control
Příklad

• Rezervace knih
Typický kód
public class ReservationService{
    private BookService bookService;


    public ReservationService() {
        init();
    }
    private void init () {
        //create concrete instance of BookService implementation
        LocalBookStore localBookStore = new LocalBookStore();
        localBookStore.setPath("/usr/home/data.xml"); //setup
        bookService = localBookStore;
    }
    public boolean reserveBook(long bookId, Date from,Date to,User u) {
        Book book = bookService.getBook(bookId);
        //reservation code omitted
        return true;
    }
}
Typický kód - problémy

• Tě sné vazby mezi      objekty
  − Volba konkrétní implementace
  − Odpově dnost za inicializaci

   private void init () {
          //create concrete instance of BookService implementation
          LocalBookStore localBookStore = new LocalBookStore();
          localBookStore.setPath("/home/dagi/data.xml"); //setup
          bookService = localBookStore;
   }
Inversion Of Control

• M Fow (2004) návrhový vzor
   .   ler
• Proč

  − Tě sné vazby m objekty
                  ezi
  − Vytváření a skládání objektů podle jejich vazeb
• Jak

  − Obrácená kontrola
  − Odpově dnost na ně kom třetím
    • IoC kontejner

• Chce to mentální    kotrmelec ;-)
IoC kontejner
Objekty (POJOs)
public class ReservationService {
    private BookService bookService;

    public boolean reserveBook(long bookId, Date from, Date to, User user) {
        Book book = bookService.getBook(bookId);
        //reservation code omitted
        return true;
    }
}



public class LocalBookStore implements BookService {
    private String path;

    public Book getBook(long bookId) {;
        //accessing code omitted
    }
    }
}
Metadata
@Component
public class ReservationService {
    @Autowired
    private BookService bookService;
    ...
}

@Component
public class LocalBookStore    implements BookService {
    @Autowired
    @Qualifier("file.path")
    private String path;
    ....
}
<beans>
    <context:annotation-config/>
    <context:component-scan base-package="cz.sweb.pichlik"/>
    <bean id="file.path" class="java.lang.String">
         <constructor-arg value="/home/dagi.data.xml"></constructor-arg>
    </bean>
</beans>
Kontejner

ApplicationContext container =

         new ClassPathXmlApplicationContext("applicationContext.xml");

ReservationService reservationService =

      (ReservationService) container.getBean(ResrvationService.class);
Test
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"applicationContext.xml"})
public class ReservationServiceTest {
    @Autowired
    private ReservationService reservationService;


    @Test
    public void testReserveBook() {
        reservationService.reserveBook
        ...
    }
}
Spring IoC kontejner

• Základní   a nejdů lež itě jš í komponenta
•Metadata
  − XM Anotace, Konfigurač ní kód atd.
      L,
• Snadná inicializace

  − Testy, W EJB, program ě
            eb,          ov
• Atributy

  − Hierarchie, Události, Dependency injection
  − Scopes, Placeholders, vysoká customizovatelnost
  − ...
Spring kontejner vs. EJB kontejner
                      Spring IoC                           EJB 3.0 IoC
definice závislosti   XML descriptor, anotace, properties, anotace, XML descriptor
                      konfigurační java kód
aplikovatelnost       bez omezení                          Servlet, listener classes, web services
                                                           end-point, JAX-RPC handlers,
                                                           DataSource, JMS, Mail, EJB,
                                                           Environment entries, EntityManager,
                                                           UserTransaction, EJB Beans,
                                                           interceptors, web services end-point,
                                                           DataSource, JMS, Mail, Environment
                                                           entries, EntityManager, EJB Context,
nepřímé závislosti    ano                                  ne
způsob nastavení      setter, anotace proměnné,            setter, anotace proměnné
závislosti            konstruktor
extension pointy      AOP, BeanPostProcessor, Factory, interceptory, lifecycle rozhrani
                      lifecycle rozhrani, typová konverze
autowiring            typem, jménem                        ne
Autowiring –beans collecting

   Loosely coupled extensibility
   Sbě r objektů urč itého typu


@Component                                    @Component("serviceA")

public class ServiceRegistry {                public class BusinessServiceA implements BusinessService {

    @Autowired

    private List<BusinessService> services;   }

                                              @Service("serviceB")
}                                             public class BusinessServiceB implements BusinessService {



                                              }
Aspect Oriented Program ing
                       m
          (AOP)
AOP

• M š lenka
   y
  „V kaž dé aplikaci máme kous ky kódu, kte ré s e nám
  prolínají v š e mi v rs tv ami naš í aplikace , ale do ž ádné ne patří
  konkré tn ě . Tě mto kous ků m kódu m ů ž e me říkat as pe kty .
  AOP nabíz í mož nos t ty to as pe kty prolínat s táv ajícím kóde m
  aniž by chom te nto kód mus e li modifikov at.“
AOP
• Nový p ístup pro ře ení
        ř            š        tradič ních
 oblastí
  − implementač ní overhead
• Aspekt

  − Ucelený kus kódu
  − Java třída
  − Typy
    • Produkč ní
    • Vývojové
Základní pojmy
• Join Point
  − Definuje stavy, ve kterých se m e nacházet vykonávání
                                   ůž
    kódu např. volání m etody, volání konstruktoru, statická
    inicializace atd.
• Pointcut
  − Definuje jazyk, pom kterého se lze na jednotlivé Join
                       ocí
    Ponty zavě sit
• Advice
  − Um žň uje nadefinovat vlastní kód, který se vykoná v
       o
    závislosti na zavě š ení pointcatu. V podstatě když
    nastane tohle, udě lám toto.
•Weaving
  − zač leně ní aspectu do kódu aplikace
• Target object
  − cílový objekt, který je obohacen o aspekt
Aspect

• Aspect =   Advice + Pointcut
Jednoduchý aspect (AspectJ)
                             anotace označ ující třídu jako aspect

@Aspect
public class ProfilingAspect {
                                                                 pointcut definice

     @Around("execution(* cz.sweb.pichlik.springaop.dao.UserStorageDao.*(..))")
     public Object tracingMethod(ProceedingJoinPoint call) throws Throwable{
          long start = System.nanoTime();
          try{
              return call.proceed();
                                                    volání metody target objektu
          }finally{
              long time = System.nanoTime() - start;
              System.out.println("Invocation time:"+ time + "ns");
          }
     }
}

anotace označ ující advice
Spring AOP

• Integrace AspectJ

  − ne vš echny vlastnosti (ořezaný pointcut language)
• Anotace, XML
• Runtim w
        e eaving (proxy)
AOP netradič ní případy už ití

• Synchronizace

  − Kontrola zámků
• Překlad výjimek
• Cacheování     výsledků volání metod
• Introduction
Přístup do databáze
Problém jménem JDBC

   Využ ití JDBC se skládá z tě chto č inností
       Získání databázového připojení
       Vytvoření statementu
       Nastavení parametru a exekuce SQL
       Procházení resultsetu a zpracování dat
       Uzavření resultsetu, statementu a datab. připojení
       Oš etření java.sql.SQLException
   Typický kód pak vypadá následovně
JDBC klasika
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
try{
    con = getConnection();//ziskej databazove pripojeni
    String sql = "select count(*) from user";
    ps = con.prepareStatement(sql); //vytvor statement
    rs = ps.executeQuery(); //vykonej
    while(rs.next()){
        //zpracuj hodnoty
    }
}finally{ //a prosimte nezapomen vse uvolnit...
    rs.close();
    ps.close();
    con.close();
}
• DP „
              Najdi a vlep“

    − Starat se o uzavírání zdrojů
    − Oš etření SQLException
Connection con = null;                • Co je š patně
PreparedStatement ps = dností
   −M  íchání odpově null;
ResultSet rs = null;                    − Č asto se opakující kód
      • Vykonání
try{
         • Zpracování výsledků              • DP „
                                                 Najdi a vlep“
    con = getConnection();
    String sql = "select count(*)from user";Starat se o uzavírání   zdrojů
                                        −
    ps = con.prepareStatement(sql);     − Oš etření SQLException
    rs = ps.executeQuery();
    while(rs.next()){                   −Míchání odpově dností
        //zpracuj hodnoty                   • Vykonání
    }
                                            • Zpracování výsledků
}finally{
    rs.close();
    ps.close();
    con.close();
}
Ř eš ení

• spole ný kód je nadefinován v p edkovi
       č                         ř
  − potom přepisuje pouze to co potřebuje
         ek
    • obvykle zpracování řádku ResultSetu




• Spring definuje pro JDBC úč ely třídu
  − org.springframework.jdbc.core.JdbcTemplate
JdbcTemplate –příklady už ití
int rowCount = jdbcTemplate.queryForInt("select count(*) from user");

Actor actor = (Actor) jdbcTemplate.queryForObject(
    "select first_name, surname from t_actor where id = ?",
    new Object[]{new Long(1212)},
    new RowMapper() {
          public Object mapRow(ResultSet rs, int rn) throws SQLException {
              Actor actor = new Actor();
              actor.setFirstName(rs.getString("first_name"));
              actor.setSurname(rs.getString("surname"));
              return actor;
      }
    });
Spring DAO

• Abstrakce

  − Usnadň uje použ ití
    • JDBC, Hibernate, JPA, iBatis

  − Překlad SQLException na vlastní hierarchie výjimek
• Napojení   na datasource
• Transakce

  − Programově
  − Deklarativně (XM anotace)
                    L,
Integrace dynamické jazyky
Proč dynamické jazyky

• Proto e jsou dynam
       ž            ické oproti      Jave
   − Deployment
   −MOP
   − Pestřejš í syntaxe (DSL)
• č itelně jš í   API
   − use-case orientované
   − XM filesystem
       L,
• Vhodné pro urč ité typy úkolů

   − Testy, Frontend, Customizace, Prototypy...
Spring integrace

• Groovy, JRuby, BeanShell
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xmlns:lang="http://www.springframework.org/schema/lang"

       xsi:schemaLocation="

http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.5.xsd">

    <!-- this is the bean definition for the Groovy-backed Messenger implementation -->

    <lang:groovy id="messenger" script-source="classpath:Messenger.groovy">

        <lang:property name="message" value="I Can Do The Frug" />

    </lang:groovy>

    <!-- an otherwise normal bean that will be injected by the Groovy-backed Messenger -->

    <bean id="bookingService" class="x.y.DefaultBookingService">

        <property name="messenger" ref="messenger" />

    </bean>

</beans>
Spring a vliv na J2EE

• J2EE 5

• EJB 3.1

• J2EE 6

  − Profily
  − SPI
• Budoucnost

  − OSGi
SpringSource dm Server
• Spring +   Apache + OSGi
Díky za pozornost




               Q&A

More Related Content

Similar to Spring framework - J2EE S Lidskou Tvari

2007 Technologie Pro Tvorbu Java Enterprise Aplikací
2007 Technologie Pro Tvorbu Java Enterprise Aplikací2007 Technologie Pro Tvorbu Java Enterprise Aplikací
2007 Technologie Pro Tvorbu Java Enterprise AplikacíMartin Ptáček
 
Výběr vhodných technologii pro startup v prostředí cloudu
Výběr vhodných technologii pro startup v prostředí clouduVýběr vhodných technologii pro startup v prostředí cloudu
Výběr vhodných technologii pro startup v prostředí clouduJan Kodera
 
2009 X33EJA Moderní Technologie Pro Vývoj JEE
2009 X33EJA Moderní Technologie Pro Vývoj JEE2009 X33EJA Moderní Technologie Pro Vývoj JEE
2009 X33EJA Moderní Technologie Pro Vývoj JEEMartin Ptáček
 
Borek Bernard: TypeScript - příčetný jazyk pro web
Borek Bernard: TypeScript - příčetný jazyk pro webBorek Bernard: TypeScript - příčetný jazyk pro web
Borek Bernard: TypeScript - příčetný jazyk pro webDevelcz
 
Čtvrtkon #71 - Marian Benčat - Angular a NativeScript
Čtvrtkon #71 - Marian Benčat - Angular a NativeScriptČtvrtkon #71 - Marian Benčat - Angular a NativeScript
Čtvrtkon #71 - Marian Benčat - Angular a NativeScriptCtvrtkoncz
 
Úvod do vývoje pro platformu iOS [ZČU 24.4.2014]
Úvod do vývoje pro platformu iOS [ZČU 24.4.2014]Úvod do vývoje pro platformu iOS [ZČU 24.4.2014]
Úvod do vývoje pro platformu iOS [ZČU 24.4.2014]Kuba Břečka
 
Výkonnost webových aplikací
Výkonnost webových aplikacíVýkonnost webových aplikací
Výkonnost webových aplikacíTaste Medio
 
INPTP Rekapitulace
INPTP Rekapitulace INPTP Rekapitulace
INPTP Rekapitulace Jan Hřídel
 
Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]Tomáš Kukol
 
Představení Ruby on Rails
Představení Ruby on RailsPředstavení Ruby on Rails
Představení Ruby on Railsigloonet
 
Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022
Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022
Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022PeckaDesign.cz
 
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve SwiftuJan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftumdevtalk
 
2010 Identifikace a optimalizace výkonu JEE aplikací
2010 Identifikace a optimalizace výkonu JEE aplikací2010 Identifikace a optimalizace výkonu JEE aplikací
2010 Identifikace a optimalizace výkonu JEE aplikacíMartin Ptáček
 

Similar to Spring framework - J2EE S Lidskou Tvari (20)

TNPW2-2013-05
TNPW2-2013-05TNPW2-2013-05
TNPW2-2013-05
 
2007 Technologie Pro Tvorbu Java Enterprise Aplikací
2007 Technologie Pro Tvorbu Java Enterprise Aplikací2007 Technologie Pro Tvorbu Java Enterprise Aplikací
2007 Technologie Pro Tvorbu Java Enterprise Aplikací
 
TNPW2-2012-03
TNPW2-2012-03TNPW2-2012-03
TNPW2-2012-03
 
Výběr vhodných technologii pro startup v prostředí cloudu
Výběr vhodných technologii pro startup v prostředí clouduVýběr vhodných technologii pro startup v prostředí cloudu
Výběr vhodných technologii pro startup v prostředí cloudu
 
2009 X33EJA Moderní Technologie Pro Vývoj JEE
2009 X33EJA Moderní Technologie Pro Vývoj JEE2009 X33EJA Moderní Technologie Pro Vývoj JEE
2009 X33EJA Moderní Technologie Pro Vývoj JEE
 
2009 JEE Overview
2009 JEE Overview2009 JEE Overview
2009 JEE Overview
 
Borek Bernard: TypeScript - příčetný jazyk pro web
Borek Bernard: TypeScript - příčetný jazyk pro webBorek Bernard: TypeScript - příčetný jazyk pro web
Borek Bernard: TypeScript - příčetný jazyk pro web
 
Čtvrtkon #71 - Marian Benčat - Angular a NativeScript
Čtvrtkon #71 - Marian Benčat - Angular a NativeScriptČtvrtkon #71 - Marian Benčat - Angular a NativeScript
Čtvrtkon #71 - Marian Benčat - Angular a NativeScript
 
Úvod do vývoje pro platformu iOS [ZČU 24.4.2014]
Úvod do vývoje pro platformu iOS [ZČU 24.4.2014]Úvod do vývoje pro platformu iOS [ZČU 24.4.2014]
Úvod do vývoje pro platformu iOS [ZČU 24.4.2014]
 
Sexy infrastruktura
Sexy infrastrukturaSexy infrastruktura
Sexy infrastruktura
 
Výkonnost webových aplikací
Výkonnost webových aplikacíVýkonnost webových aplikací
Výkonnost webových aplikací
 
INPTP Rekapitulace
INPTP Rekapitulace INPTP Rekapitulace
INPTP Rekapitulace
 
Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]
 
Představení Ruby on Rails
Představení Ruby on RailsPředstavení Ruby on Rails
Představení Ruby on Rails
 
CSAS_v06
CSAS_v06CSAS_v06
CSAS_v06
 
Google App Engine
Google App EngineGoogle App Engine
Google App Engine
 
JS2016
JS2016JS2016
JS2016
 
Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022
Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022
Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022
 
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve SwiftuJan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
 
2010 Identifikace a optimalizace výkonu JEE aplikací
2010 Identifikace a optimalizace výkonu JEE aplikací2010 Identifikace a optimalizace výkonu JEE aplikací
2010 Identifikace a optimalizace výkonu JEE aplikací
 

More from Roman Pichlík

More from Roman Pichlík (16)

Cynycal software
Cynycal softwareCynycal software
Cynycal software
 
App Design Architecture
App Design ArchitectureApp Design Architecture
App Design Architecture
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
 
Spring Transactions
Spring TransactionsSpring Transactions
Spring Transactions
 
Spring Testing
Spring TestingSpring Testing
Spring Testing
 
Spring J2EE
Spring J2EESpring J2EE
Spring J2EE
 
Spring ioc-advanced
Spring ioc-advancedSpring ioc-advanced
Spring ioc-advanced
 
Spring ioc
Spring iocSpring ioc
Spring ioc
 
Spring introduction
Spring introductionSpring introduction
Spring introduction
 
Spring integration
Spring integrationSpring integration
Spring integration
 
Spring dao
Spring daoSpring dao
Spring dao
 
Spring aop
Spring aopSpring aop
Spring aop
 
Spring Web Services
Spring Web ServicesSpring Web Services
Spring Web Services
 
MongoDB for Java Developers
MongoDB for Java DevelopersMongoDB for Java Developers
MongoDB for Java Developers
 
Nosql from java developer pov
Nosql from java developer povNosql from java developer pov
Nosql from java developer pov
 
Dependency Injection Frameworky
Dependency Injection FrameworkyDependency Injection Frameworky
Dependency Injection Frameworky
 

Spring framework - J2EE S Lidskou Tvari

  • 1. The Spring fram ork –J2EE s lidskou tváří ew
  • 2. Opravdu s lidskou tváří?
  • 3. Trochu o mě • Rom Pichlík an • HP Software • Blog http://sweb.cz/pichlik • Czech Java User Group • CZ Podcast
  • 4. Agenda • J2EE • Proč je tu Spring • Spring IOC • Spring AOP • Spring DAO • Dynamické jazyky • Spring a vliv na J2EE 4 15. listopad 2007
  • 5. J2EE intro • Nadstavba standardní Javy − Enterprise oblast •Misssion critical aplikace −Webové aplikace? • Sada specifikací a API − Java Com unity Process m −Middlew dodavatelé are • Klíč ové technologie − EJB, JTA, Servlety a JSP, JSF, JNDI, JCA a dalš í...
  • 6. Jak bylo J2EE m š leno y • Robustnost • Interoperabilita • Bezpe nost č • Cluster-aware • SOA • Buzzwords...
  • 7. Jak to dopadlo • One size fits all − 80/20 −Webové aplikace • Velká komplexnost − Jednoduché vě ci slož itě a slož ité nem ž ně o − Příliš mnoho k uč ení • Standardy vs Standardizace − Pom adopce alá − Rychlé zastarávání
  • 8. Co lidé opravdu chtě jí • Jednoduchost − Testovatelnost − Vývoj − Nasazení • Agilnost − m š lenky y − technologie − postupy
  • 9. Nabídka se nestřetla s poptávkou
  • 16. Historie Spring fram orku ew • 2002 − Rod Johnson, J2EE Design and Development • Návod jak dobře a úspě š ně použ ívat J2EE • 30000 řádků kódu • 2003 zalo ení ž open source projektu − http://springfram ork.org/ ew − http://w w w .springfram ork.org/docum ew entation
  • 17. Úhel pohledu • Komplexní řeš ení − W Enterprise, Desktop eb, • Poskytovatel služ eb − transakce, AOP, konfigurace, remoting... • Rozhraní aplikace/prostředí − aplikač ní server, webový kontejner, testy • Rozhraní aplikace/technologie − Hibernate, JM JSF, JPA, JDBC, EJB... S,
  • 18. Co m ž ná o Springu uslyš íte o • Náhrada J2EE a p edevš ím EJB ř • Sada modulů pro rů zné použ ití • Továrna na továrny •Webový fram ork ew • Sada pomocných API pro Hibernate • Pře itek v dob ž ě EJB 3.0 • Výstřelek zhýralých vývojářů
  • 19. Nejvě tš í mýty • Spring se nehodí pro Enterprise aplikace − 10 velkých bankovních institucí použ ívá Spring −Weblogic, WebSphere AS certifikují Spring • Spring nepouž ívají velké firmy − eBay, Oracle, HP • Spring nejde š kálovat − Open Terracotta − Tangosol Coherence Data Grid
  • 20. Základní m š lenky y • Zjednoduš ení komplexnosti − Nejenom J2EE − API Abstrakce • Neinvazivnost • Zam ření ě na architekturu aplikace • Jednoduchá testovatelnost a použ ití •Modulárnost
  • 21. Základní m š lenky řeč í technologie y • Inversion Of Control • Aspektově orientované programování (AOP) • OOP p ístup ř − programování rozhraním • Open-Closed princip − otevřený pro rozš íření − uzavřený pro modifikace • POJO (Plain Old Java Objects) p ístup ř
  • 23. Modulárnost • Použ ij co potřebuješ • JAR distribuce − kompletní (2,5 MB) − po modulech •Malá závislost na knihovnách třetích stran • Rů zné scénáře použ ití modulů
  • 25. Integrace s w fram orky eb ew
  • 27. Subprojekty kolem Springu • Spring W Flow eb • Spring Security • Spring Dynam M ic odules • Spring W Services eb • Spring Batch • Spring Integration • Spring IDE • Spring SpringSource dm Server
  • 30. Typický kód public class ReservationService{ private BookService bookService; public ReservationService() { init(); } private void init () { //create concrete instance of BookService implementation LocalBookStore localBookStore = new LocalBookStore(); localBookStore.setPath("/usr/home/data.xml"); //setup bookService = localBookStore; } public boolean reserveBook(long bookId, Date from,Date to,User u) { Book book = bookService.getBook(bookId); //reservation code omitted return true; } }
  • 31. Typický kód - problémy • Tě sné vazby mezi objekty − Volba konkrétní implementace − Odpově dnost za inicializaci private void init () { //create concrete instance of BookService implementation LocalBookStore localBookStore = new LocalBookStore(); localBookStore.setPath("/home/dagi/data.xml"); //setup bookService = localBookStore; }
  • 32. Inversion Of Control • M Fow (2004) návrhový vzor . ler • Proč − Tě sné vazby m objekty ezi − Vytváření a skládání objektů podle jejich vazeb • Jak − Obrácená kontrola − Odpově dnost na ně kom třetím • IoC kontejner • Chce to mentální kotrmelec ;-)
  • 34. Objekty (POJOs) public class ReservationService { private BookService bookService; public boolean reserveBook(long bookId, Date from, Date to, User user) { Book book = bookService.getBook(bookId); //reservation code omitted return true; } } public class LocalBookStore implements BookService { private String path; public Book getBook(long bookId) {; //accessing code omitted } } }
  • 35. Metadata @Component public class ReservationService { @Autowired private BookService bookService; ... } @Component public class LocalBookStore implements BookService { @Autowired @Qualifier("file.path") private String path; .... } <beans> <context:annotation-config/> <context:component-scan base-package="cz.sweb.pichlik"/> <bean id="file.path" class="java.lang.String"> <constructor-arg value="/home/dagi.data.xml"></constructor-arg> </bean> </beans>
  • 36. Kontejner ApplicationContext container = new ClassPathXmlApplicationContext("applicationContext.xml"); ReservationService reservationService = (ReservationService) container.getBean(ResrvationService.class);
  • 37. Test @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"applicationContext.xml"}) public class ReservationServiceTest { @Autowired private ReservationService reservationService; @Test public void testReserveBook() { reservationService.reserveBook ... } }
  • 38. Spring IoC kontejner • Základní a nejdů lež itě jš í komponenta •Metadata − XM Anotace, Konfigurač ní kód atd. L, • Snadná inicializace − Testy, W EJB, program ě eb, ov • Atributy − Hierarchie, Události, Dependency injection − Scopes, Placeholders, vysoká customizovatelnost − ...
  • 39. Spring kontejner vs. EJB kontejner Spring IoC EJB 3.0 IoC definice závislosti XML descriptor, anotace, properties, anotace, XML descriptor konfigurační java kód aplikovatelnost bez omezení Servlet, listener classes, web services end-point, JAX-RPC handlers, DataSource, JMS, Mail, EJB, Environment entries, EntityManager, UserTransaction, EJB Beans, interceptors, web services end-point, DataSource, JMS, Mail, Environment entries, EntityManager, EJB Context, nepřímé závislosti ano ne způsob nastavení setter, anotace proměnné, setter, anotace proměnné závislosti konstruktor extension pointy AOP, BeanPostProcessor, Factory, interceptory, lifecycle rozhrani lifecycle rozhrani, typová konverze autowiring typem, jménem ne
  • 40. Autowiring –beans collecting  Loosely coupled extensibility  Sbě r objektů urč itého typu @Component @Component("serviceA") public class ServiceRegistry { public class BusinessServiceA implements BusinessService { @Autowired private List<BusinessService> services; } @Service("serviceB") } public class BusinessServiceB implements BusinessService { }
  • 41. Aspect Oriented Program ing m (AOP)
  • 42. AOP • M š lenka y „V kaž dé aplikaci máme kous ky kódu, kte ré s e nám prolínají v š e mi v rs tv ami naš í aplikace , ale do ž ádné ne patří konkré tn ě . Tě mto kous ků m kódu m ů ž e me říkat as pe kty . AOP nabíz í mož nos t ty to as pe kty prolínat s táv ajícím kóde m aniž by chom te nto kód mus e li modifikov at.“
  • 43. AOP • Nový p ístup pro ře ení ř š tradič ních oblastí − implementač ní overhead • Aspekt − Ucelený kus kódu − Java třída − Typy • Produkč ní • Vývojové
  • 44. Základní pojmy • Join Point − Definuje stavy, ve kterých se m e nacházet vykonávání ůž kódu např. volání m etody, volání konstruktoru, statická inicializace atd. • Pointcut − Definuje jazyk, pom kterého se lze na jednotlivé Join ocí Ponty zavě sit • Advice − Um žň uje nadefinovat vlastní kód, který se vykoná v o závislosti na zavě š ení pointcatu. V podstatě když nastane tohle, udě lám toto. •Weaving − zač leně ní aspectu do kódu aplikace • Target object − cílový objekt, který je obohacen o aspekt
  • 45. Aspect • Aspect = Advice + Pointcut
  • 46. Jednoduchý aspect (AspectJ) anotace označ ující třídu jako aspect @Aspect public class ProfilingAspect { pointcut definice @Around("execution(* cz.sweb.pichlik.springaop.dao.UserStorageDao.*(..))") public Object tracingMethod(ProceedingJoinPoint call) throws Throwable{ long start = System.nanoTime(); try{ return call.proceed(); volání metody target objektu }finally{ long time = System.nanoTime() - start; System.out.println("Invocation time:"+ time + "ns"); } } } anotace označ ující advice
  • 47. Spring AOP • Integrace AspectJ − ne vš echny vlastnosti (ořezaný pointcut language) • Anotace, XML • Runtim w e eaving (proxy)
  • 48. AOP netradič ní případy už ití • Synchronizace − Kontrola zámků • Překlad výjimek • Cacheování výsledků volání metod • Introduction
  • 50. Problém jménem JDBC  Využ ití JDBC se skládá z tě chto č inností  Získání databázového připojení  Vytvoření statementu  Nastavení parametru a exekuce SQL  Procházení resultsetu a zpracování dat  Uzavření resultsetu, statementu a datab. připojení  Oš etření java.sql.SQLException  Typický kód pak vypadá následovně
  • 51. JDBC klasika Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try{ con = getConnection();//ziskej databazove pripojeni String sql = "select count(*) from user"; ps = con.prepareStatement(sql); //vytvor statement rs = ps.executeQuery(); //vykonej while(rs.next()){ //zpracuj hodnoty } }finally{ //a prosimte nezapomen vse uvolnit... rs.close(); ps.close(); con.close(); }
  • 52. • DP „ Najdi a vlep“ − Starat se o uzavírání zdrojů − Oš etření SQLException Connection con = null; • Co je š patně PreparedStatement ps = dností −M íchání odpově null; ResultSet rs = null; − Č asto se opakující kód • Vykonání try{ • Zpracování výsledků • DP „ Najdi a vlep“ con = getConnection(); String sql = "select count(*)from user";Starat se o uzavírání zdrojů − ps = con.prepareStatement(sql); − Oš etření SQLException rs = ps.executeQuery(); while(rs.next()){ −Míchání odpově dností //zpracuj hodnoty • Vykonání } • Zpracování výsledků }finally{ rs.close(); ps.close(); con.close(); }
  • 53. Ř eš ení • spole ný kód je nadefinován v p edkovi č ř − potom přepisuje pouze to co potřebuje ek • obvykle zpracování řádku ResultSetu • Spring definuje pro JDBC úč ely třídu − org.springframework.jdbc.core.JdbcTemplate
  • 54. JdbcTemplate –příklady už ití int rowCount = jdbcTemplate.queryForInt("select count(*) from user"); Actor actor = (Actor) jdbcTemplate.queryForObject( "select first_name, surname from t_actor where id = ?", new Object[]{new Long(1212)}, new RowMapper() { public Object mapRow(ResultSet rs, int rn) throws SQLException { Actor actor = new Actor(); actor.setFirstName(rs.getString("first_name")); actor.setSurname(rs.getString("surname")); return actor; } });
  • 55. Spring DAO • Abstrakce − Usnadň uje použ ití • JDBC, Hibernate, JPA, iBatis − Překlad SQLException na vlastní hierarchie výjimek • Napojení na datasource • Transakce − Programově − Deklarativně (XM anotace) L,
  • 57. Proč dynamické jazyky • Proto e jsou dynam ž ické oproti Jave − Deployment −MOP − Pestřejš í syntaxe (DSL) • č itelně jš í API − use-case orientované − XM filesystem L, • Vhodné pro urč ité typy úkolů − Testy, Frontend, Customizace, Prototypy...
  • 58. Spring integrace • Groovy, JRuby, BeanShell <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:lang="http://www.springframework.org/schema/lang" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.5.xsd"> <!-- this is the bean definition for the Groovy-backed Messenger implementation --> <lang:groovy id="messenger" script-source="classpath:Messenger.groovy"> <lang:property name="message" value="I Can Do The Frug" /> </lang:groovy> <!-- an otherwise normal bean that will be injected by the Groovy-backed Messenger --> <bean id="bookingService" class="x.y.DefaultBookingService"> <property name="messenger" ref="messenger" /> </bean> </beans>
  • 59. Spring a vliv na J2EE • J2EE 5 • EJB 3.1 • J2EE 6 − Profily − SPI • Budoucnost − OSGi
  • 60. SpringSource dm Server • Spring + Apache + OSGi