SlideShare a Scribd company logo
1 of 39
Balogh-Biró Attila
2015.04.15
Schönherz Bázis – IT és villamosmérnök meetup
ENTERPRISE JAVA EVOLÚCIÓ, AVAGY
JAVA EE (VS) SPRING FRAMEWORK
CÉLKITŰZÉS
• Mi a célja ennek a mai beszélgetésnek?
• Historikus áttekintés
• A Spring framework evolúciója
• Java EE evolúció
• Technológiai összehasonlítás, konfiguráció
• Migráció
• Kapcsolódási pontok
MI A CÉLJA ENNEK A MAI BESZÉLGETÉSNEK?
• Egy fair összehasolítás
• Bemutatni a főbb szolgáltatásait a két versenyzőnknek
• Mérlegelni egy lehetséges, jó megközelitést nagyvállalati rendszerek feljlesztéséhez
• Nem célom a beszélgetés végén „győztest” hirdetni
HISTORIKUS ÁTTEKINTÉS
• 90-es évek vége
• Nehézkes, komplex és drága a nagyvállalati rendszerek fejlesztése
• Nincs iparági sztenderd
• A J2EE specifikáció nagy ígértetekkel érkezett anno (1998 JPE)
• A fejlesztők, az 1998-ban megjelent EJB specifikációt, kvázi szent Grálnak hitték
HISTORIKUS ÁTTEKINTÉS
• És amit kaptak…
HISTORIKUS ÁTTEKINTÉS
• 2003 a Spring megjelenésének éve
• Célja a fejlesztés egyszerűsítése a J2EE-hez képest
• POJO programing model
• IOC konténer
• Alkalmazás-szerver független
SPRING FRAMEWORK EVOLÚCIÓ
Dependecy
Injection
POJO oriented
development
Declarative
AOP &
transactions
MVC
Framework
Proble Specific XML
Extensible
Configuration
Bean Scoping
Groovy, JRuby and
BeanShell
JSP tag library
Java 5 autoboxing
and generics
Annotation driving
wiring
Automatic bean
configuration
New annotation
driven MVC
framework
JUnit 4-based
integration testing
JSR 300 “at inject”
New Spring
Expression Language
First-class REST
support
Java based
configuration
Several new Spring
MVC features
Support for JSR 303
declarative validation
Scheduled Jobs
A new “C” namespace
Configuration profiles
Unified property
resolution
Java configuration
features
Servlet 3.0 support
Declarative caching
Spring MVC
enhancements
Mobile features
Modern Web
Data Access
Social
Security
Cloud Ready
SPRING FRAMEWORK EVOLÚCIÓ
• Jelenlegi verzió a 4.0.5
• Java 8 támogatás
• Java EE 7 támogatás
• Generikus típusok használata DI során Qualifier-ként
• WebSocket támogatás
J2EE(JAVA EE) EVOLÚCIÓ
May’98 Dec’99 Sep’01 Nov’03 May’06 Dec’09
EJB 1.0
Servlet 2.1
EJB 1.1
Servlet 1.1
JSP 1.1
JMS 1.0.2
JDBC 2.0
JNDI 1.2
JAF 1.0
JTA 1.0
JTS 0.95
JavaMail 1.1
Apr’13
Project
JPE
J2EE 1.2 J2EE 1.3 J2EE 1.4 Java EE 5 Java EE 6 Java EE 7
10 specs 13 specs 20 specs 24 specs 28 specs 32 specs
EJB 2.0
(CMP, MDB,
local EJB)
Servlets 2.3
(Event, Filters)
JSP 1.2
JDBC 2.1
JCA 1.0
JAAS 1.0
JAXP 1.0
EJB 2.1
Servlet 2.4
JSP 2.0
Web Services
JMX
J2EE Deploy
JACC
JAAS
JAX-RPC
JAXR
JSTL
EJB 3.0
JPA 1.0
JSF 1.2
Servlets 2.5
JSP 2.1
(Common EL)
JAXB, SAAJ,
WebService
Injection
Prunning
Extensibility
CDI
JAX-RS
Servlet 3.0
EJB 3.1 Lite
JMS 2.0
Batch
Caching
TX Interceptor
WebSocket
JSON
JAX-RS 2.0
TECHNOLÓGIAI ÖSSZEHASONLÍTÁS,
KONFIGURÁCIÓ
• A Java EE és a Spring egyaránt ad middleware szolgáltatásokat
• A funkcionalitások sok esetben nagyon hasonlóak, sokszor azonban elértő
megközelítést alkalmazva
• Vanilla alkalmazások esetében, a kódok szinte teljesen megegyeznek
TECHNOLÓGIAI ÖSSZEHASONLÍTÁS,
KONFIGURÁCIÓ
TECHNOLÓGIAI ÖSSZEHASONLÍTÁS,
KONFIGURÁCIÓ
• Spring
• XML, Class, Annotáció alapú konfiguráció
• Java EE 7
• Minimális konfiguráció
• beans.xml nem szükséges többé
• web.xml nem szükséges Servlet 3.0 óta
SPRING MVC (WEB.XML) KONFIGURÁCIÓ XML
ALAPON
SPRING MVC(SERVLET-XML) KONFIGURÁCIÓ
XML ALAPON
SPRING MVC 100 KONFIGURÁCIÓ KÓD ALAPON
SPRING MVC 100 KONFIGURÁCIÓ KÓD ALAPON
ANNOTÁCIÓK
Java EE 7 Spring
@Named @Component
@Inject,@EJB,@Resource @Autowired
@Alternative @Primary
@PostConstruct,@Predestroy @PostConstruct,@PreDestroy
@Request
@ConversationScoped
@SessionScoped
@ApplicationScoped
@Scope(“request”)
N/A (w/ Spring WebFlow)
@Scope(“session”)
@Scope(BeanDefinition.SCOPE_SINGLETON
)
@Produces @Configuration + @Bean
TERVEZÉSI MINTÁK
Java EE 7 Minta Spring
@Singleton Singleton Alapértelmezetten minden
bean singleton
@Observes Observer Spring esemény-kezelés
@Produces Factory @Configuration + @Bean
@Decorator + XML (for order) Decorator N/A, github: spring-decorator
@Interceptor AOP @Aspect, @Around, @After,
@AfterReturning,
@AfterThrowing, @Before,
@Pointcut
@Inject DI @Autowired
@Asynchronous, Servlet 3.0+,
Websockets
Asynchronous programming @Async
@Schedule Timer @Scheduled
TESZTELHETŐSÉG
Java EE 7 SPRING
Arquillian konténer teszt Rugalmas teszt környezet, konténer nélküli
tesztelhetőség (Spring Test Framework)
Beágyazott Glassfish konténer Servlet API mock objektumok
(MockHttpServletRequest)
Bean profiling, a különbőző környezetekhez
Könnyű tesztelhetőség a REST-es API
esetében is a builder API segitségével
SPRING TEST(REST, MVC)
MIGRÁCIÓ
• Milyen esetben érdemes példálul Spring alapokról JEE-re migrálni?
• Legacy alkalmazással van dolgunk (Korábbi Spring verzióban iródott)?
• Milyen okokból érdemes váltani?
• Gyorsabb lesz a rendszer?
• Biztonságosabb?
• Jobban menedzselhető?
• Milyen technikai szempontokat kell figyelembe vennünk?
MIGRÁCIÓ, NÉHÁNY MEGVÁLASZOLANDÓ
KÉRDÉS
• Hogyan migráljuk az annotáció alapű DI működést?
• Hogyan migráljuk az XML alapú DI és factory bean máködést?
• Támogatott-e a property placeholder mechanizmus?
• Hogyan migráljuk az Aspektus orientált osztályainkat?
• Megoldott-e a programozott bean lookup?
• A Java EE támogatja a profilok használatát?
• Hogyan migráljuk a megirt Spring alapú teszt eseteinket?
• Felmerület számos egyéb kérdés...
HOGYAN MIGRÁLJUK AZ ANNOTÁCIÓ ALAPÚ DI
MŰKÖDÉST?
• A bean szkópokat korábban megvizsgáltuk
• Amire figyelnünk kell, hogy a CDI-nak és a Spring-nek eltérőek az alapértelmezett bean
szkópja
• Vigyázzunk a FINAL minősitéssel, a CDI a java assist API-t használja a PROXY
objektumok elkészitéséhez
HOGYAN MIGRÁLJUK AZ ANNOTÁCIÓ ALAPÚ DI
MŰKÖDÉST (@QUALIFIER)?
HOGYAN MIGRÁLJUK AZ XML ALAPÚ DI ÉS
FACTORY BEAN MŰKÖDÉST?
HOGYAN MIGRÁLJUK AZ XML ALAPÚ DI ÉS
FACTORY BEAN MŰKÖDÉST (FACTORY
METHOD)?
TÁMOGATOTT-E A PROPERTY PLACEHOLDER
MECHANIZMUS?
TÁMOGATOTT-E A PROPERTY PLACEHOLDER
MECHANIZMUS?
• Alapértelmezésben nem
• Használható kulső library (Apache DeltaSpike)
• Irható saját CDI kiterjesztés
HOGYAN MIGRÁLJUK AZ ASPEKTUS ORIENTÁLT
OSZTÁLYAINKAT?
HOGYAN MIGRÁLJUK AZ ASPEKTUS ORIENTÁLT
OSZTÁLYAINKAT?
MEGOLDOTT-E A PROGRAMOZOTT BEAN
LOOKUP?
• A BeanManager nagyjából ekvivalens az ApplicationContext objektummal (Inkább a
BeanFactory-val)
A JAVA EE TÁMOGATJA A PROFILOK
HASZNÁLATÁT?
• A válasz majdnem
• Használható a @Alternative annotáció, azonban ennek működéséhez szükséges az XML-
ben történő konfiguráció
• Nincs dinamikus környezet specifikus aktiválás
• Globális megoldás lehet egy CDI extension irása?
ÉRVEK ÉS ELLENÉRVEK(SPRING)
• Gyakran felmerülnek érvek az egyik, vagy másik technológia mögött
• A Spring framework jóval rugalmasabb, jobban használható, például az AOP
esetében
• A Spring esetében gyorsabbak a releasek, mivel nem iparági sztenderd és egy
gyártóval számolhatunk
• A JEE alkalmazás-szerverek lassúak, robosztusak, például egy Tomcat-hez képest
ÉRVEK ÉS ELLENÉRVEK
• Mivel a Java EE csak egy halmaza sztenderd specifikációknak, igy gyártó független, több
implementáció közül választhatunk
• Mivel nagy iparági szereplők állnak a JEE mögött, igy a folyamatos fejlesztés,
fenntarthatóság biztositott
• Nagyjából minden olyan feature-rel rendelkezik, mint a Spring, könnyen használhatóak
külső osztálykönytárak
ÉRVEK ÉS ELLENÉRVEK
• Mivel a Java EE csak egy halmaza sztenderd specifikációknak, igy gyártó független, több
implementáció közül választhatunk
• Mivel nagy iparági szereplők állnak a JEE mögött, igy a folyamatos fejlesztés,
fenntarthatóság biztositott
• Nagyjából minden olyan feature-rel rendelkezik, mint a Spring, könnyen használhatóak
külső osztálykönytárak
MINDENKÉPPEN VÁLASZTANUNK KELL?
BÉKÉS EGYÜTTÉLÉS
• Spring bean-ek injektálhatókak JSF menedzselt beanekbe
• Nativ Java EE támogatás a Spring oldaláról
• A Spring képes alapértelmezetten kezelni a különféle JPA implementációkat
• A Spring támogatja az alkalmazás-szervereket (jee névtér)
KONKLÚZIÓ
• Nincs olyan praktikus érv ami miatt választanunk kellene a kettő között, adott use
case-től függ
• Egyfajta kiegyensúlyozott verseny egyaránt jó a fejlesztőknek és az eszköz
gyártóknak
• Adottak az integrációs lehetőségek
• Azonban felmerülnek mindkét oldalról érvek, ellen érvek
Köszönöm a figyelmet!
attila.balogh86@gmail.com

More Related Content

Similar to Enterprise java evolució, avagy java ee (

Szerver oldali fejlesztés korszerű módszerekkel C# nyelven
Szerver oldali fejlesztés korszerű módszerekkel C# nyelvenSzerver oldali fejlesztés korszerű módszerekkel C# nyelven
Szerver oldali fejlesztés korszerű módszerekkel C# nyelvenKrisztián Gyula Tóth
 
Life and Death of Apache Maven (HU)
Life and Death of Apache Maven (HU)Life and Death of Apache Maven (HU)
Life and Death of Apache Maven (HU)Tamas Cservenak
 
Fejlesztési kihívások a pénzügyi szektorban
Fejlesztési kihívások a pénzügyi szektorbanFejlesztési kihívások a pénzügyi szektorban
Fejlesztési kihívások a pénzügyi szektorbanPal Vojacsek
 
Webalkalmazások teljesítményoptimalizálása
Webalkalmazások teljesítményoptimalizálásaWebalkalmazások teljesítményoptimalizálása
Webalkalmazások teljesítményoptimalizálásaFerenc Kovács
 
Mágikus Magento - Bevezetés a Magento világába
Mágikus Magento - Bevezetés a Magento világábaMágikus Magento - Bevezetés a Magento világába
Mágikus Magento - Bevezetés a Magento világábaJános Ács
 
Nagyméretű forráskódtárak inkrementális statikus analízise
Nagyméretű forráskódtárak inkrementális statikus analíziseNagyméretű forráskódtárak inkrementális statikus analízise
Nagyméretű forráskódtárak inkrementális statikus analíziseDániel Stein
 
Virtualizáció az EGISben
Virtualizáció az EGISbenVirtualizáció az EGISben
Virtualizáció az EGISbengazdagf
 
Átállás joomla 2.5 joomla 3.3
Átállás joomla 2.5   joomla 3.3Átállás joomla 2.5   joomla 3.3
Átállás joomla 2.5 joomla 3.3Tamas Rigo
 
Többszálú javascript
Többszálú javascriptTöbbszálú javascript
Többszálú javascriptMáté Farkas
 
Új vizeken - Virtualizált szerver megoldások a Cisco-tól
Új vizeken - Virtualizált szerver megoldások a Cisco-tólÚj vizeken - Virtualizált szerver megoldások a Cisco-tól
Új vizeken - Virtualizált szerver megoldások a Cisco-tólGloster telekom Kft.
 
Nagy Péter: Google App Engine. Programozzunk felhőt
Nagy Péter: Google App Engine. Programozzunk felhőtNagy Péter: Google App Engine. Programozzunk felhőt
Nagy Péter: Google App Engine. Programozzunk felhőtMeetOFF
 
Valos ideju megoldasok realtime ods és database in memory tapasztalatok
Valos ideju megoldasok realtime ods és database in memory tapasztalatokValos ideju megoldasok realtime ods és database in memory tapasztalatok
Valos ideju megoldasok realtime ods és database in memory tapasztalatokDaniel Sef
 
III. Elmélet - Az ERP rendszerek implementációja 1..pptx
III. Elmélet - Az ERP rendszerek implementációja 1..pptxIII. Elmélet - Az ERP rendszerek implementációja 1..pptx
III. Elmélet - Az ERP rendszerek implementációja 1..pptxSzabolcs Gulyás
 
POZITEAM Bővített Műhely Tudásbázison alapuló együttműködés Geoview szemszögből
POZITEAM Bővített Műhely Tudásbázison alapuló együttműködés Geoview szemszögbőlPOZITEAM Bővített Műhely Tudásbázison alapuló együttműködés Geoview szemszögből
POZITEAM Bővített Műhely Tudásbázison alapuló együttműködés Geoview szemszögbőlPOZITEAM
 

Similar to Enterprise java evolució, avagy java ee ( (20)

Webkonf 2013
Webkonf 2013Webkonf 2013
Webkonf 2013
 
Szerver oldali fejlesztés korszerű módszerekkel C# nyelven
Szerver oldali fejlesztés korszerű módszerekkel C# nyelvenSzerver oldali fejlesztés korszerű módszerekkel C# nyelven
Szerver oldali fejlesztés korszerű módszerekkel C# nyelven
 
APEX Nap 2b.pdf
APEX Nap 2b.pdfAPEX Nap 2b.pdf
APEX Nap 2b.pdf
 
Life and Death of Apache Maven (HU)
Life and Death of Apache Maven (HU)Life and Death of Apache Maven (HU)
Life and Death of Apache Maven (HU)
 
Szoftver tesztelés
Szoftver tesztelésSzoftver tesztelés
Szoftver tesztelés
 
Forum BPM
Forum BPMForum BPM
Forum BPM
 
Fejlesztési kihívások a pénzügyi szektorban
Fejlesztési kihívások a pénzügyi szektorbanFejlesztési kihívások a pénzügyi szektorban
Fejlesztési kihívások a pénzügyi szektorban
 
Webalkalmazások teljesítményoptimalizálása
Webalkalmazások teljesítményoptimalizálásaWebalkalmazások teljesítményoptimalizálása
Webalkalmazások teljesítményoptimalizálása
 
NETaudIT
NETaudITNETaudIT
NETaudIT
 
Mágikus Magento - Bevezetés a Magento világába
Mágikus Magento - Bevezetés a Magento világábaMágikus Magento - Bevezetés a Magento világába
Mágikus Magento - Bevezetés a Magento világába
 
Nagyméretű forráskódtárak inkrementális statikus analízise
Nagyméretű forráskódtárak inkrementális statikus analíziseNagyméretű forráskódtárak inkrementális statikus analízise
Nagyméretű forráskódtárak inkrementális statikus analízise
 
Virtualizáció az EGISben
Virtualizáció az EGISbenVirtualizáció az EGISben
Virtualizáció az EGISben
 
Átállás joomla 2.5 joomla 3.3
Átállás joomla 2.5   joomla 3.3Átállás joomla 2.5   joomla 3.3
Átállás joomla 2.5 joomla 3.3
 
Többszálú javascript
Többszálú javascriptTöbbszálú javascript
Többszálú javascript
 
Új vizeken - Virtualizált szerver megoldások a Cisco-tól
Új vizeken - Virtualizált szerver megoldások a Cisco-tólÚj vizeken - Virtualizált szerver megoldások a Cisco-tól
Új vizeken - Virtualizált szerver megoldások a Cisco-tól
 
Uj vizeken
Uj vizekenUj vizeken
Uj vizeken
 
Nagy Péter: Google App Engine. Programozzunk felhőt
Nagy Péter: Google App Engine. Programozzunk felhőtNagy Péter: Google App Engine. Programozzunk felhőt
Nagy Péter: Google App Engine. Programozzunk felhőt
 
Valos ideju megoldasok realtime ods és database in memory tapasztalatok
Valos ideju megoldasok realtime ods és database in memory tapasztalatokValos ideju megoldasok realtime ods és database in memory tapasztalatok
Valos ideju megoldasok realtime ods és database in memory tapasztalatok
 
III. Elmélet - Az ERP rendszerek implementációja 1..pptx
III. Elmélet - Az ERP rendszerek implementációja 1..pptxIII. Elmélet - Az ERP rendszerek implementációja 1..pptx
III. Elmélet - Az ERP rendszerek implementációja 1..pptx
 
POZITEAM Bővített Műhely Tudásbázison alapuló együttműködés Geoview szemszögből
POZITEAM Bővített Műhely Tudásbázison alapuló együttműködés Geoview szemszögbőlPOZITEAM Bővített Műhely Tudásbázison alapuló együttműködés Geoview szemszögből
POZITEAM Bővített Műhely Tudásbázison alapuló együttműködés Geoview szemszögből
 

Enterprise java evolució, avagy java ee (

  • 1. Balogh-Biró Attila 2015.04.15 Schönherz Bázis – IT és villamosmérnök meetup ENTERPRISE JAVA EVOLÚCIÓ, AVAGY JAVA EE (VS) SPRING FRAMEWORK
  • 2. CÉLKITŰZÉS • Mi a célja ennek a mai beszélgetésnek? • Historikus áttekintés • A Spring framework evolúciója • Java EE evolúció • Technológiai összehasonlítás, konfiguráció • Migráció • Kapcsolódási pontok
  • 3. MI A CÉLJA ENNEK A MAI BESZÉLGETÉSNEK? • Egy fair összehasolítás • Bemutatni a főbb szolgáltatásait a két versenyzőnknek • Mérlegelni egy lehetséges, jó megközelitést nagyvállalati rendszerek feljlesztéséhez • Nem célom a beszélgetés végén „győztest” hirdetni
  • 4. HISTORIKUS ÁTTEKINTÉS • 90-es évek vége • Nehézkes, komplex és drága a nagyvállalati rendszerek fejlesztése • Nincs iparági sztenderd • A J2EE specifikáció nagy ígértetekkel érkezett anno (1998 JPE) • A fejlesztők, az 1998-ban megjelent EJB specifikációt, kvázi szent Grálnak hitték
  • 6. HISTORIKUS ÁTTEKINTÉS • 2003 a Spring megjelenésének éve • Célja a fejlesztés egyszerűsítése a J2EE-hez képest • POJO programing model • IOC konténer • Alkalmazás-szerver független
  • 7. SPRING FRAMEWORK EVOLÚCIÓ Dependecy Injection POJO oriented development Declarative AOP & transactions MVC Framework Proble Specific XML Extensible Configuration Bean Scoping Groovy, JRuby and BeanShell JSP tag library Java 5 autoboxing and generics Annotation driving wiring Automatic bean configuration New annotation driven MVC framework JUnit 4-based integration testing JSR 300 “at inject” New Spring Expression Language First-class REST support Java based configuration Several new Spring MVC features Support for JSR 303 declarative validation Scheduled Jobs A new “C” namespace Configuration profiles Unified property resolution Java configuration features Servlet 3.0 support Declarative caching Spring MVC enhancements Mobile features Modern Web Data Access Social Security Cloud Ready
  • 8. SPRING FRAMEWORK EVOLÚCIÓ • Jelenlegi verzió a 4.0.5 • Java 8 támogatás • Java EE 7 támogatás • Generikus típusok használata DI során Qualifier-ként • WebSocket támogatás
  • 9. J2EE(JAVA EE) EVOLÚCIÓ May’98 Dec’99 Sep’01 Nov’03 May’06 Dec’09 EJB 1.0 Servlet 2.1 EJB 1.1 Servlet 1.1 JSP 1.1 JMS 1.0.2 JDBC 2.0 JNDI 1.2 JAF 1.0 JTA 1.0 JTS 0.95 JavaMail 1.1 Apr’13 Project JPE J2EE 1.2 J2EE 1.3 J2EE 1.4 Java EE 5 Java EE 6 Java EE 7 10 specs 13 specs 20 specs 24 specs 28 specs 32 specs EJB 2.0 (CMP, MDB, local EJB) Servlets 2.3 (Event, Filters) JSP 1.2 JDBC 2.1 JCA 1.0 JAAS 1.0 JAXP 1.0 EJB 2.1 Servlet 2.4 JSP 2.0 Web Services JMX J2EE Deploy JACC JAAS JAX-RPC JAXR JSTL EJB 3.0 JPA 1.0 JSF 1.2 Servlets 2.5 JSP 2.1 (Common EL) JAXB, SAAJ, WebService Injection Prunning Extensibility CDI JAX-RS Servlet 3.0 EJB 3.1 Lite JMS 2.0 Batch Caching TX Interceptor WebSocket JSON JAX-RS 2.0
  • 10. TECHNOLÓGIAI ÖSSZEHASONLÍTÁS, KONFIGURÁCIÓ • A Java EE és a Spring egyaránt ad middleware szolgáltatásokat • A funkcionalitások sok esetben nagyon hasonlóak, sokszor azonban elértő megközelítést alkalmazva • Vanilla alkalmazások esetében, a kódok szinte teljesen megegyeznek
  • 12. TECHNOLÓGIAI ÖSSZEHASONLÍTÁS, KONFIGURÁCIÓ • Spring • XML, Class, Annotáció alapú konfiguráció • Java EE 7 • Minimális konfiguráció • beans.xml nem szükséges többé • web.xml nem szükséges Servlet 3.0 óta
  • 13. SPRING MVC (WEB.XML) KONFIGURÁCIÓ XML ALAPON
  • 15. SPRING MVC 100 KONFIGURÁCIÓ KÓD ALAPON
  • 16. SPRING MVC 100 KONFIGURÁCIÓ KÓD ALAPON
  • 17. ANNOTÁCIÓK Java EE 7 Spring @Named @Component @Inject,@EJB,@Resource @Autowired @Alternative @Primary @PostConstruct,@Predestroy @PostConstruct,@PreDestroy @Request @ConversationScoped @SessionScoped @ApplicationScoped @Scope(“request”) N/A (w/ Spring WebFlow) @Scope(“session”) @Scope(BeanDefinition.SCOPE_SINGLETON ) @Produces @Configuration + @Bean
  • 18. TERVEZÉSI MINTÁK Java EE 7 Minta Spring @Singleton Singleton Alapértelmezetten minden bean singleton @Observes Observer Spring esemény-kezelés @Produces Factory @Configuration + @Bean @Decorator + XML (for order) Decorator N/A, github: spring-decorator @Interceptor AOP @Aspect, @Around, @After, @AfterReturning, @AfterThrowing, @Before, @Pointcut @Inject DI @Autowired @Asynchronous, Servlet 3.0+, Websockets Asynchronous programming @Async @Schedule Timer @Scheduled
  • 19. TESZTELHETŐSÉG Java EE 7 SPRING Arquillian konténer teszt Rugalmas teszt környezet, konténer nélküli tesztelhetőség (Spring Test Framework) Beágyazott Glassfish konténer Servlet API mock objektumok (MockHttpServletRequest) Bean profiling, a különbőző környezetekhez Könnyű tesztelhetőség a REST-es API esetében is a builder API segitségével
  • 21. MIGRÁCIÓ • Milyen esetben érdemes példálul Spring alapokról JEE-re migrálni? • Legacy alkalmazással van dolgunk (Korábbi Spring verzióban iródott)? • Milyen okokból érdemes váltani? • Gyorsabb lesz a rendszer? • Biztonságosabb? • Jobban menedzselhető? • Milyen technikai szempontokat kell figyelembe vennünk?
  • 22. MIGRÁCIÓ, NÉHÁNY MEGVÁLASZOLANDÓ KÉRDÉS • Hogyan migráljuk az annotáció alapű DI működést? • Hogyan migráljuk az XML alapú DI és factory bean máködést? • Támogatott-e a property placeholder mechanizmus? • Hogyan migráljuk az Aspektus orientált osztályainkat? • Megoldott-e a programozott bean lookup? • A Java EE támogatja a profilok használatát? • Hogyan migráljuk a megirt Spring alapú teszt eseteinket? • Felmerület számos egyéb kérdés...
  • 23. HOGYAN MIGRÁLJUK AZ ANNOTÁCIÓ ALAPÚ DI MŰKÖDÉST? • A bean szkópokat korábban megvizsgáltuk • Amire figyelnünk kell, hogy a CDI-nak és a Spring-nek eltérőek az alapértelmezett bean szkópja • Vigyázzunk a FINAL minősitéssel, a CDI a java assist API-t használja a PROXY objektumok elkészitéséhez
  • 24. HOGYAN MIGRÁLJUK AZ ANNOTÁCIÓ ALAPÚ DI MŰKÖDÉST (@QUALIFIER)?
  • 25. HOGYAN MIGRÁLJUK AZ XML ALAPÚ DI ÉS FACTORY BEAN MŰKÖDÉST?
  • 26. HOGYAN MIGRÁLJUK AZ XML ALAPÚ DI ÉS FACTORY BEAN MŰKÖDÉST (FACTORY METHOD)?
  • 27. TÁMOGATOTT-E A PROPERTY PLACEHOLDER MECHANIZMUS?
  • 28. TÁMOGATOTT-E A PROPERTY PLACEHOLDER MECHANIZMUS? • Alapértelmezésben nem • Használható kulső library (Apache DeltaSpike) • Irható saját CDI kiterjesztés
  • 29. HOGYAN MIGRÁLJUK AZ ASPEKTUS ORIENTÁLT OSZTÁLYAINKAT?
  • 30. HOGYAN MIGRÁLJUK AZ ASPEKTUS ORIENTÁLT OSZTÁLYAINKAT?
  • 31. MEGOLDOTT-E A PROGRAMOZOTT BEAN LOOKUP? • A BeanManager nagyjából ekvivalens az ApplicationContext objektummal (Inkább a BeanFactory-val)
  • 32. A JAVA EE TÁMOGATJA A PROFILOK HASZNÁLATÁT? • A válasz majdnem • Használható a @Alternative annotáció, azonban ennek működéséhez szükséges az XML- ben történő konfiguráció • Nincs dinamikus környezet specifikus aktiválás • Globális megoldás lehet egy CDI extension irása?
  • 33. ÉRVEK ÉS ELLENÉRVEK(SPRING) • Gyakran felmerülnek érvek az egyik, vagy másik technológia mögött • A Spring framework jóval rugalmasabb, jobban használható, például az AOP esetében • A Spring esetében gyorsabbak a releasek, mivel nem iparági sztenderd és egy gyártóval számolhatunk • A JEE alkalmazás-szerverek lassúak, robosztusak, például egy Tomcat-hez képest
  • 34. ÉRVEK ÉS ELLENÉRVEK • Mivel a Java EE csak egy halmaza sztenderd specifikációknak, igy gyártó független, több implementáció közül választhatunk • Mivel nagy iparági szereplők állnak a JEE mögött, igy a folyamatos fejlesztés, fenntarthatóság biztositott • Nagyjából minden olyan feature-rel rendelkezik, mint a Spring, könnyen használhatóak külső osztálykönytárak
  • 35. ÉRVEK ÉS ELLENÉRVEK • Mivel a Java EE csak egy halmaza sztenderd specifikációknak, igy gyártó független, több implementáció közül választhatunk • Mivel nagy iparági szereplők állnak a JEE mögött, igy a folyamatos fejlesztés, fenntarthatóság biztositott • Nagyjából minden olyan feature-rel rendelkezik, mint a Spring, könnyen használhatóak külső osztálykönytárak
  • 37. BÉKÉS EGYÜTTÉLÉS • Spring bean-ek injektálhatókak JSF menedzselt beanekbe • Nativ Java EE támogatás a Spring oldaláról • A Spring képes alapértelmezetten kezelni a különféle JPA implementációkat • A Spring támogatja az alkalmazás-szervereket (jee névtér)
  • 38. KONKLÚZIÓ • Nincs olyan praktikus érv ami miatt választanunk kellene a kettő között, adott use case-től függ • Egyfajta kiegyensúlyozott verseny egyaránt jó a fejlesztőknek és az eszköz gyártóknak • Adottak az integrációs lehetőségek • Azonban felmerülnek mindkét oldalról érvek, ellen érvek

Editor's Notes

  1. Kb úgy érdemes összehasonlítani a két versenyzőnket, mint almát a narancssal. Míg a JEE egy specifikáció, addíg a Spring egy technológiai framework Fontos az arany középút, megtalálni a lehető legjobb megközelítést Egy enterprise projekt fejlesztése során. Esetleg megemlíthető a polyglot programming.
  2. J2EE was horrible. So much XML configuration, so many interfaces, and so lame application servers. This is why the Spring framework was created. It solved many problems of J2EE. It was lightweight, easy to use, and applications could be deployed in a  web container (such as Tomcat) instead of a heavy J2EE application server. Deployment took seconds instead of 15 minutes. Unfortunately, JRebel did not exist at that time. The Spring framework is no standard as J2EE, nevertheless it became very widespread and an large community arose.
  3. Since Servlet 3.0+, the above registration for Spring’s dispatcher servlet can be done programmatically (code-based), thanks to the Servlet 3.0’s new feature called shared libraries/runtimes pluggability which scans jar files bundled in the WEB-INF\lib directory for implementations of the ServletContainerInitializer interface and invokes its onStartup() method which contains initialization/bootstrapping code, during servlet container/web application startup. In respond to this new feature, Spring 3.1+ provides its own implementation by the SpringServletContainerInitializer class which is bundled in configured in the spring-web-VERSION.jar file. The SpringServletContainerInitializer class is bootstrapped automatically by any Servlet 3.0-compliant container (e.g. Apache Tomcat 7), and it will look for an implementation of the WebApplicationInitializer interface and invoke its onStartup() method. Following is an example of a WebApplicationInitializer’s implementation that does the same thing as the XML-based approach above:
  4. Rugalmasság: All enterprise projects – of many different clients – which I have seen, are not that flexible. Enterprise applications do not change every month or year. If there is a project, where you can change your version very easily, Spring might be better than JEE under some circumstances. But in most enterprise projects, you cannot simply upgrade from Spring 2.5 to Spring 3.x or from JEE 5 to JEE 6. I wish this would be possible, but low flexibility and politics rule in large companies with thousands of employees.
  5. Rugalmasság: All enterprise projects – of many different clients – which I have seen, are not that flexible. Enterprise applications do not change every month or year. If there is a project, where you can change your version very easily, Spring might be better than JEE under some circumstances. But in most enterprise projects, you cannot simply upgrade from Spring 2.5 to Spring 3.x or from JEE 5 to JEE 6. I wish this would be possible, but low flexibility and politics rule in large companies with thousands of employees.
  6. Rugalmasság: All enterprise projects – of many different clients – which I have seen, are not that flexible. Enterprise applications do not change every month or year. If there is a project, where you can change your version very easily, Spring might be better than JEE under some circumstances. But in most enterprise projects, you cannot simply upgrade from Spring 2.5 to Spring 3.x or from JEE 5 to JEE 6. I wish this would be possible, but low flexibility and politics rule in large companies with thousands of employees.