Document

advertisement
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
Download