Enterprise java evolució, avagy java ee (

Post on 18-Aug-2015

26 views 3 download

Transcript of Enterprise java evolució, avagy java ee (

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

1.0 2.0 2.5

SPRING FRAMEWORK EVOLÚCIÓ

Dependecy InjectionPOJO oriented developmentDeclarative AOP & transactionsMVC Framework

Proble Specific XMLExtensible ConfigurationBean ScopingGroovy, JRuby and BeanShell JSP tag libraryJava 5 autoboxing and generics

Annotation driving wiring Automatic bean configurationNew annotation driven MVC framework JUnit 4-based integration testing

JSR 300 “at inject”New Spring Expression LanguageFirst-class REST support Java based configuration Several new Spring MVC featuresSupport for JSR 303 declarative validationScheduled Jobs

A new “C” namespaceConfiguration profilesUnified property resolutionJava configuration featuresServlet 3.0 supportDeclarative cachingSpring MVC enhancements

3.0 3.1 3.2

Mobile featuresModern WebData AccessSocialSecurityCloud 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

651.2 1.3 1.4 7

J2EE(JAVA EE) EVOLÚCIÓ

May’98 Dec’99 Sep’01 Nov’03 May’06 Dec’09

EJB 1.0Servlet 2.1

EJB 1.1Servlet 1.1JSP 1.1JMS 1.0.2JDBC 2.0JNDI 1.2JAF 1.0JTA 1.0JTS 0.95JavaMail 1.1

Apr’13

ProjectJPE

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.2JDBC 2.1JCA 1.0JAAS 1.0JAXP 1.0

EJB 2.1Servlet 2.4JSP 2.0Web ServicesJMXJ2EE DeployJACCJAASJAX-RPCJAXRJSTL

EJB 3.0JPA 1.0JSF 1.2Servlets 2.5JSP 2.1(Common EL)JAXB, SAAJ, WebServiceInjection

PrunningExtensibilityCDIJAX-RSServlet 3.0EJB 3.1 Lite

JMS 2.0BatchCachingTX InterceptorWebSocketJSONJAX-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 SPRINGArquillian 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