Spring as legacy

12
in samenwerking met HowITsDone Spring as legacy Hoe innovatie legacy kan worden

description

Spring as legacy. Hoe innovatie legacy kan worden. in samenwerking met HowITsDone. Geschiedenis JEE. J2EE: container managed security en persistence, global transaction management API’s niet schoon; container managed functionaliteit lekt door in de applicatiecode (bijv. EJB1 en 2) - PowerPoint PPT Presentation

Transcript of Spring as legacy

Page 1: Spring as legacy

in samenwerking met HowITsDone

Spring as legacyHoe innovatie legacy kan worden

Page 2: Spring as legacy

Geschiedenis JEE

• J2EE: container managed security en persistence, global transaction management

• API’s niet schoon; container managed functionaliteit lekt door in de applicatiecode (bijv. EJB1 en 2)

• Missende functionaliteit: SOAP stack, UI webframework, Dependency Injection

Page 3: Spring as legacy

Spring

• Maak applicatiecode schoono Alles runtime excepties!o Plain Old Java Objecten!o Dependency Injection!

• Ongewenst gevolg: heterogene ontwikkel API’s en frameworkso Voorbeelden:

DUO Java 5 straat: Spring + Axis + JEE JAXB + JEE Message Driven Beans + JEE Servlet/ JSF + JEE JPA

Rotterdam IOO: Spring + Spring WS + JEE Servlet + Wicket + Hibernate

Page 4: Spring as legacy

Filosofisch uitstapje

• Is dit soort framework heterogeniteit bij software ontwikkeling een pluspunt, minpunt of noodzakelijk kwaad?

• Roept U maar…

• In mijn visie is het bijna altijd een minpunt. Wel af en toe handig om een log schip van koers te laten veranderen. Maar geen doel op zich. We hebben sowieso al dotNet, PHP en dan ook nog meerdere Java benaderingen? Nee dank u.

Page 5: Spring as legacy

Eeuwige lente?

Voor degenen die het met mij eens zijn:• Hadden we gewoon Spring moeten gebruiken

voor alles?• Roept U maar…

• In mijn visie alleen als Sun geen JEE5 en 6 had gespecificeerd; overigens gebruikt Spring wel JEE servlet…

Page 6: Spring as legacy

Na de lente volgt de zomer

• Sun (ja okee nu Oracle) is geen log schip; ze hebben in JEE5/6 nagenoeg alle Spring oplossingen ingebouwdo CDI is zelfs uitgebreider dan Spring’s Dependency Injectiono Validation Beans (business layer -> web layer integratie)o Persistency en transaction: JPA en JTAo JSF 2 (samen met primefaces ;-)o SOAP: JAX-WS, JAXBo RESTful webservices: JAX-RSo sort of outjection (SEAM)

Page 7: Spring as legacy

EJB-lite

• Stateless, stateful, and singleton session beans• Local EJB interfaces or no interfaces• Interceptors• Container-managed and bean-managed transactions• Declarative and programmatic security• Embeddable API

Page 8: Spring as legacy

Web profile

• EJB-lite• Servlet 3.0, JSF 2.0, JSP 2.2, EL 1.2, JSTL 1.2• CDI 1.0• JPA 2.0, JTA 1.1• Bean Validation 1.0

Dus niet:• JMS, JAX-WS, JAXB, JAX-RS• JavaMail 

Page 9: Spring as legacy

JEE 6 voorbeelden

• Een paar voorbeelden van annotaties waarmee je een POJO om kan zetten in een JEE object:o EJB: @stateless of @singletono EJB aanroep: @EJBo SOAP endpoint @WebServiceo JMS endpoint @MessageDriven

Page 10: Spring as legacy

JEE 6 voorbeelden (2)  CDI

@Stateful @SessionScopedpublic class Login {     @Inject Credentials credentials;     @Inject EntityManager userDatabase;     private User user; 

    @TransactionAttribute(REQUIRES_NEW) @RolesAllowed("guest")    public void login() { ... } 

    public void logout() {         user = null; }         public boolean isLoggedIn() {         return user!=null; }         @RolesAllowed("user") @Produces @LoggedIn     User getCurrentUser() { ... } }

Page 11: Spring as legacy

JEE 6 voorbeelden (3)  CDI @Target( { TYPE, METHOD, PARAMETER, FIELD }) @Retention(RUNTIME) @Documented @Qualifier      public @interface LoggedIn {...}-----------------------------------------@Modelpublic class Credentials {      private String username;      private String password;      public String getUsername() { return username; }      public void setUsername(String username) { this.username = username; }      public String getPassword() { return password; }      public void setPassword(String password) { this.password = password; }}

Page 12: Spring as legacy

Innovatie of conservatief

• EJB’s bah?• Dat is oud nieuws. Ga met je tijd mee aub. • Je hebt nu zelfs de optie EJB lite; EJB’s die

draaien in een WAR zonder aparte EJB container (Tomcat, Jetty)

• Conclusie: een paar jaar stilstaan en je bent legacy in Java land ;-)

http://www.oracle.com/technetwork/articles/javaee/javaee6overview-full-149950.pdf

http://wikis.sun.com/display/GlassFish/Java+EE+6+Annotation+Reference