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) • Missende functionaliteit: SOAP stack, UI webframework, Dependency Injection Spring • Maak applicatiecode schoon o o o Alles runtime excepties! Plain Old Java Objecten! Dependency Injection! • Ongewenst gevolg: heterogene ontwikkel API’s en frameworks o 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 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. 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… Na de lente volgt de zomer • Sun (ja okee nu Oracle) is geen log schip; ze hebben in JEE5/6 nagenoeg alle Spring oplossingen ingebouwd o o o o o o o CDI is zelfs uitgebreider dan Spring’s Dependency Injection Validation Beans (business layer -> web layer integratie) Persistency en transaction: JPA en JTA JSF 2 (samen met primefaces ;-) SOAP: JAX-WS, JAXB RESTful webservices: JAX-RS sort of outjection (SEAM) 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 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 JEE 6 voorbeelden • Een paar voorbeelden van annotaties waarmee je een POJO om kan zetten in een JEE object: o EJB: @stateless of @singleton o EJB aanroep: @EJB o SOAP endpoint @WebService o JMS endpoint @MessageDriven JEE 6 voorbeelden (2) CDI @Stateful @SessionScoped public 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() { ... } } JEE 6 voorbeelden (3) CDI @Target( { TYPE, METHOD, PARAMETER, FIELD }) @Retention(RUNTIME) @Documented @Qualifier public @interface LoggedIn {...} ----------------------------------------- @Model public 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; } } 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-full149950.pdfhttp://wikis.sun.com/display/GlassFish/Java+EE+6+Annotation+Referenc e