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
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ů
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>
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 {
}
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
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ě
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