The Spring framework – J2EE s lidskou tváří
Opravdu s lidskou tváří?
Trochu o mě

• Roman    Pichlík
• 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...
J2EE intro

• Nadstavba     standardní Javy
  −Enterprise oblast
    • Misssion critical aplikace
      − Webové aplikace?...
Jak bylo J2EE myšleno

• 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é...
Co lidé opravdu chtějí

• Jednoduchost

  −Testovatelnost
  −Vývoj
  −Nasazení

• Agilnost

  −myšlenky
  −technologie
  −...
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 frameworku

• 2002

 − Rod Johnson, J2EE Design and Development
     • Návod jak dobře a úspěšně používat ...
Úhel pohledu

• Komplexní   řešení
 −Web, Enterprise, Desktop

• Poskytovatel   služeb
 −transakce, AOP, konfigurace, remo...
Co možná o Springu uslyšíte

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

• Spring   se nehodí pro Enterprise aplikace
 −10 velkých bankovních institucí používá Spring
 −Weblogic, W...
Základní myšlenky

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

• Neinvazivnost

• Zaměření   na archite...
Základní myšlenky řečí technologie

• Inversion   Of Control
• Aspektově    orientované programování (AOP)
• OOP    přístu...
Stavební kameny
Modulárnost

• Použij   co potřebuješ
• JAR   distribuce
  −kompletní (2,5 MB)
  −po modulech

• Malá   závislost na kniho...
Všechny moduly
Integrace s web frameworky
Remoting
Subprojekty kolem Springu

• Spring   Web Flow
• Spring   Security
• Spring   Dynamic Modules
• Spring   Web Services
• Sp...
Inversion Of Control
Příklad

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


    public ReservationService() {
    ...
Typický kód - problémy

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

  priva...
Inversion Of Control

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

  −Těsné vazby mezi objekty
  −Vytváření a skládání obje...
IoC kontejner
Objekty (POJOs)
public class ReservationService {
    private BookService bookService;

    public boolean reserveBook(lon...
Metadata
@Component
public class ReservationService {
    @Autowired
    private BookService bookService;
    ...
}
@Compo...
Kontejner

ApplicationContext container =

         new ClassPathXmlApplicationContext("applicationContext.xml");

Reserva...
Test
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"applicationContext.xml"})
public class Rese...
Spring IoC kontejner

• Základní    a nejdůležitější komponenta
• Metadata

  −XML, Anotace, Konfigurační kód atd.

• Snad...
Spring kontejner vs. EJB kontejner
                      Spring IoC                           EJB 3.0 IoC
definice závislo...
Autowiring – beans collecting

    Loosely coupled extensibility

    Sběr objektů určitého typu


@Component           ...
Aspect Oriented
 Programming
    (AOP)
AOP

• Myšlenka
  „V každé aplikaci máme kousky kódu, které se nám
  prolínají všemi vrstvami naší aplikace, ale do žádné
...
AOP
• Nový přístup pro řešení
 tradičních oblastí
 −implementační overhead

• Aspekt

 −Ucelený kus kódu
 −Java třída
 −Ty...
Základní pojmy
• Join   Point
  −Definuje stavy, ve kterých se může nacházet
   vykonávání kódu např. volání metody, volán...
Aspect

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

@Aspect
public class Profili...
Spring AOP

• Integrace   AspectJ
 −ne všechny vlastnosti (ořezaný pointcut
  language)
• Anotace,   XML
• Runtime    weav...
AOP netradiční případy užití

• Synchronizace

 −Kontrola zámků

• Překlad   výjimek
• Cacheování     výsledků volání meto...
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í
    
    ...
JDBC klasika
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
try{
    con = getConnection();//zis...
−Starat se o uzavírání zdrojů
    −Ošetření SQLException
Connection con = null;                  • Co   je špatně
   −Mích...
Řešení

• společný   kód je nadefinován v předkovi
 −potomek přepisuje pouze to co potřebuje
    • obvykle zpracování řádk...
JdbcTemplate – příklady užití
int rowCount = jdbcTemplate.queryForInt("select count(*) from user");

Actor actor = (Actor)...
Spring DAO

• Abstrakce

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

 −Překlad SQLException na vlastní hierarch...
Integrace dynamické jazyky
Proč dynamické jazyky

• Protože   jsou dynamické oproti Jave
  −Deployment
  −MOP
  −Pestřejší syntaxe (DSL)

• čitelnějš...
Spring integrace

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

<beans xmlns="http://www....
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
Upcoming SlideShare
Loading in …5
×

Spring framework - J2EE S Lidskou Tvari

3,834 views

Published on

Predstaveni Spring frameworku.

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,834
On SlideShare
0
From Embeds
0
Number of Embeds
16
Actions
Shares
0
Downloads
49
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Spring framework - J2EE S Lidskou Tvari

  1. 1. The Spring framework – J2EE s lidskou tváří
  2. 2. Opravdu s lidskou tváří?
  3. 3. Trochu o mě • Roman Pichlík • HP Software • Blog http://sweb.cz/pichlik • Czech Java User Group • CZ Podcast
  4. 4. Agenda • J2EE • Proč je tu Spring • Spring IOC • Spring AOP • Spring DAO • Dynamické jazyky • Spring a vliv na J2EE 15. listopad 4 2007
  5. 5. J2EE intro • Nadstavba standardní Javy −Enterprise oblast • Misssion critical aplikace − Webové aplikace? • Sada specifikací a API −Java Community Process −Middleware dodavatelé • Klíčové technologie −EJB, JTA, Servlety a JSP, JSF, JNDI, JCA a další...
  6. 6. Jak bylo J2EE myšleno • Robustnost • Interoperabilita • Bezpečnost • Cluster-aware • SOA • Buzzwords...
  7. 7. Jak to dopadlo • One size fits all −80/20 −Webové aplikace • Velká komplexnost −Jednoduché věci složitě a složité nemožně −Příliš mnoho k učení • Standardy vs Standardizace −Pomalá adopce −Rychlé zastarávání
  8. 8. Co lidé opravdu chtějí • Jednoduchost −Testovatelnost −Vývoj −Nasazení • Agilnost −myšlenky −technologie −postupy
  9. 9. Nabídka se nestřetla s poptávkou
  10. 10. ? Přichází náš rytíř ?
  11. 11. Přichází náš rytíř
  12. 12. ? Přichází náš rytíř ?
  13. 13. Přichází náš rytíř
  14. 14. ? Přichází náš rytíř ?
  15. 15. Přichází náš rytíř
  16. 16. Historie Spring frameworku • 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://springframework.org/ − http://www.springframework.org/documentation
  17. 17. Úhel pohledu • Komplexní řešení −Web, Enterprise, Desktop • Poskytovatel služeb −transakce, AOP, konfigurace, remoting... • Rozhraní aplikace/prostředí −aplikační server, webový kontejner, testy • Rozhraní aplikace/technologie −Hibernate, JMS, JSF, JPA, JDBC, EJB...
  18. 18. Co možná o Springu uslyšíte • Náhrada J2EE a především EJB • Sada modulů pro různé použití • Továrna na továrny • Webový framework • Sada pomocných API pro Hibernate • Přežitek v době EJB 3.0 • Výstřelek zhýralých vývojářů
  19. 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. 20. Základní myšlenky • Zjednodušení komplexnosti −Nejenom J2EE −API Abstrakce • Neinvazivnost • Zaměření na architekturu aplikace • Jednoduchá testovatelnost a použití • Modulárnost
  21. 21. Základní myšlenky řečí technologie • 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
  22. 22. Stavební kameny
  23. 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ů
  24. 24. Všechny moduly
  25. 25. Integrace s web frameworky
  26. 26. Remoting
  27. 27. Subprojekty kolem Springu • Spring Web Flow • Spring Security • Spring Dynamic Modules • Spring Web Services • Spring Batch • Spring Integration • Spring IDE • Spring SpringSource dm Server
  28. 28. Inversion Of Control
  29. 29. Příklad • Rezervace knih
  30. 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. 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. 32. Inversion Of Control • M. Fowler (2004) návrhový vzor • Proč −Těsné vazby mezi objekty −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 ;-)
  33. 33. IoC kontejner
  34. 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. 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. 36. Kontejner ApplicationContext container = new ClassPathXmlApplicationContext("applicationContext.xml"); ReservationService reservationService = (ReservationService) container.getBean(ResrvationService.class);
  37. 37. Test @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"applicationContext.xml"}) public class ReservationServiceTest { @Autowired private ReservationService reservationService; @Test public void testReserveBook() { reservationService.reserveBook ... } }
  38. 38. Spring IoC kontejner • Základní a nejdůležitější komponenta • Metadata −XML, Anotace, Konfigurační kód atd. • Snadná inicializace −Testy, Web, EJB, programově • Atributy −Hierarchie, Události, Dependency injection −Scopes, Placeholders, vysoká customizovatelnost −...
  39. 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. 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. 41. Aspect Oriented Programming (AOP)
  42. 42. AOP • Myšlenka „V každé aplikaci máme kousky kódu, které se nám prolínají všemi vrstvami naší aplikace, ale do žádné nepatří konkrétně. Těmto kouskům kódu můžeme říkat aspekty. AOP nabízí možnost tyto aspekty prolínat stávajícím kódem aniž bychom tento kód museli modifikovat.“
  43. 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. 44. Základní pojmy • Join Point −Definuje stavy, ve kterých se může nacházet vykonávání kódu např. volání metody, volání konstruktoru, statická inicializace atd. • Pointcut −Definuje jazyk, pomocí kterého se lze na jednotlivé Join Ponty zavěsit • Advice −Umožňuje nadefinovat vlastní kód, který se vykoná v 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. 45. Aspect • Aspect = Advice + Pointcut
  46. 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. 47. Spring AOP • Integrace AspectJ −ne všechny vlastnosti (ořezaný pointcut language) • Anotace, XML • Runtime weaving (proxy)
  48. 48. AOP netradiční případy užití • Synchronizace −Kontrola zámků • Překlad výjimek • Cacheování výsledků volání metod • Introduction
  49. 49. Přístup do databáze
  50. 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. 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. 52. −Starat se o uzavírání zdrojů −Ošetření SQLException Connection con = null; • Co je špatně −Míchání odpovědností PreparedStatement ps = null; ResultSet rs = null; −Často se opakující kód • Vykonání try{ • DP „Najdi a vlep“ • Zpracování výsledků con = getConnection(); −Starat se o uzavírání String sql = "select count(*)from user"; ps = con.prepareStatement(sql); zdrojů rs = ps.executeQuery(); −Ošetření SQLException while(rs.next()){ //zpracuj hodnoty −Míchání odpovědností } • Vykonání }finally{ • Zpracování výsledků rs.close(); ps.close(); con.close(); }
  53. 53. Řešení • společný kód je nadefinován v předkovi −potomek přepisuje pouze to co potřebuje • obvykle zpracování řádku ResultSetu • Spring definuje pro JDBC účely třídu −org.springframework.jdbc.core.JdbcTemplate
  54. 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. 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ě (XML, anotace)
  56. 56. Integrace dynamické jazyky
  57. 57. Proč dynamické jazyky • Protože jsou dynamické oproti Jave −Deployment −MOP −Pestřejší syntaxe (DSL) • čitelnější API −use-case orientované −XML, filesystem • Vhodné pro určité typy úkolů −Testy, Frontend, Customizace, Prototypy...
  58. 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. 59. Spring a vliv na J2EE • J2EE 5 • EJB 3.1 • J2EE 6 −Profily −SPI • Budoucnost −OSGi
  60. 60. SpringSource dm Server • Spring + Apache + OSGi
  61. 61. Díky za pozornost Q&A

×