SlideShare a Scribd company logo
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

PPTX
TNPW2-2012-05
PPTX
TNPW2-2013-03
PPT
Jdbc slide for beginers
PPT
Jdbc (database in java)
PPT
Jdbc ppt
PDF
Frameworks J2EE
PDF
Spring introduction
PPT
2007 Technologie Pro Tvorbu Java Enterprise Aplikací
TNPW2-2012-05
TNPW2-2013-03
Jdbc slide for beginers
Jdbc (database in java)
Jdbc ppt
Frameworks J2EE
Spring introduction
2007 Technologie Pro Tvorbu Java Enterprise Aplikací

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

PPTX
Dependency Injection Frameworky
PDF
Výběr vhodných technologii pro startup v prostředí cloudu
PDF
Spring ioc
PDF
App Engine Kick Start
PDF
Čtvrtkon #71 - Jan Kaštánek - Java & Docker & Microsevices
PPTX
Dependency injection v .Net Frameworku
PPT
2009 JEE Overview
PDF
Spring dao
PPT
2009 X33EJA Moderní Technologie Pro Vývoj JEE
PDF
MoroSystems na ostravském CZJUGu o Apache Wicket
PDF
Spring Web Services
ODP
20101124 Aplikované nástroje SW inženýra
PDF
Google App Engine
PDF
20110511 Vývoj software - produktivně, efektivně, kvalitně
PDF
node.js: zápisky z fronty (Battle guide to node.js)
PPT
2011 X33EJA Výkonové Aspekty JEE Monitoring a optimalizace
PPTX
TNPW2-2012-02
ODP
20091202 Aplikované nástroje SW inženýra
PDF
Seminar Nastroje Jednotk Testovani
PPT
Czjug Zari 2008
Dependency Injection Frameworky
Výběr vhodných technologii pro startup v prostředí cloudu
Spring ioc
App Engine Kick Start
Čtvrtkon #71 - Jan Kaštánek - Java & Docker & Microsevices
Dependency injection v .Net Frameworku
2009 JEE Overview
Spring dao
2009 X33EJA Moderní Technologie Pro Vývoj JEE
MoroSystems na ostravském CZJUGu o Apache Wicket
Spring Web Services
20101124 Aplikované nástroje SW inženýra
Google App Engine
20110511 Vývoj software - produktivně, efektivně, kvalitně
node.js: zápisky z fronty (Battle guide to node.js)
2011 X33EJA Výkonové Aspekty JEE Monitoring a optimalizace
TNPW2-2012-02
20091202 Aplikované nástroje SW inženýra
Seminar Nastroje Jednotk Testovani
Czjug Zari 2008
Ad

More from Roman Pichlík (11)

PDF
Cynycal software
PDF
App Design Architecture
PDF
Spring MVC
PDF
Spring Transactions
PDF
Spring Testing
PDF
Spring J2EE
PDF
Spring ioc-advanced
PDF
Spring integration
PDF
Spring aop
PDF
MongoDB for Java Developers
PDF
Nosql from java developer pov
Cynycal software
App Design Architecture
Spring MVC
Spring Transactions
Spring Testing
Spring J2EE
Spring ioc-advanced
Spring integration
Spring aop
MongoDB for Java Developers
Nosql from java developer pov
Ad

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