Java EE 6 Java EE 6 — Ein Überblick — Bernd Müller Fakultät Informatik Ostfalia — Hochschule Braunschweig/Wolfenbüttel GI-Regionalgruppe Braunschweig, 16.2.2012 Bernd Müller, Fakultät Informatik, Ostfalia , 16.2.2012 1/31 Java EE 6 Vorstellung Referent I Studium Informatik, Uni Stuttgart I Promotion in Informatik, Uni Oldenburg I IBM, HIS I Professor für Wirtschaftsinformatik, HS Harz I Professor für Software-Technik, Fakultät Informatik, Ostfalia I Buchautor (JSF, JPA, Seam, ...) I Mitglied EG JSF 2.2, JPA 2.1 I GF PMST GmbH I ... Bernd Müller, Fakultät Informatik, Ostfalia , 16.2.2012 2/31 Java EE 6 Überblick Überblick Bernd Müller, Fakultät Informatik, Ostfalia , 16.2.2012 3/31 Java EE 6 Überblick Java EE 6: Definition und Ziele I Definition I I I I I Eine Umbrella-Spezifikation (28 einz.) im JCP: JSR 316 Released Dezember 2009 Breite Unterstützung durch Hersteller Mittlerweile in der Praxis angekommen Ziele I I I I I Erweiterbarkeit Profile Pruning Technologische Verbesserungen ... Bernd Müller, Fakultät Informatik, Ostfalia , 16.2.2012 4/31 Java EE 6 Neuerungen Neuerungen Bernd Müller, Fakultät Informatik, Ostfalia , 16.2.2012 5/31 Java EE 6 Neuerungen Neu hinzugekommen I Context and Dependency Injection (JSR 299) I Bean Validation (JSR 303) I RESTful Web Services (JSR 311) Bernd Müller, Fakultät Informatik, Ostfalia , 16.2.2012 6/31 Java EE 6 Neuerungen Runderneuert I Servlet 3.0 I JSF 2.0 I JPA 2.0 I EJB 3.1 Bernd Müller, Fakultät Informatik, Ostfalia , 16.2.2012 7/31 Java EE 6 JSF 2.0 JSF 2.0 Bernd Müller, Fakultät Informatik, Ostfalia , 16.2.2012 8/31 Java EE 6 JSF 2.0 JSF 2.0 I Ajax I Annotationen I Facelets I faces-config.xml optional I Navigationsregeln ohne XML I Templating I System-Events I Bookmarks I Automatische Bibliothekserkennung I ... Bernd Müller, Fakultät Informatik, Ostfalia , 16.2.2012 9/31 Java EE 6 JPA 2.0 JPA 2.0 Bernd Müller, Fakultät Informatik, Ostfalia , 16.2.2012 10/31 Java EE 6 JPA 2.0 JPA 2.0 I Verbessertes OR-Mapping I Typesafe Criteria API I Erweiterte Abfragesprache I Second Level Cache I Neue Lock-Modi I ... Bernd Müller, Fakultät Informatik, Ostfalia , 16.2.2012 11/31 Java EE 6 EJB 3.1 EJB 3.1 Bernd Müller, Fakultät Informatik, Ostfalia , 16.2.2012 12/31 Java EE 6 EJB 3.1 EJB 3.1 I No-interface views I War Deployment I Einfache, deklarative Timer (Cron-Syntax) I Singletons I Asynchrone Session-Bean-Methoden I Embeddable Container (main(), Unit-Tests) I Portables JNDI I ... Bernd Müller, Fakultät Informatik, Ostfalia , 16.2.2012 13/31 Java EE 6 CDI 1.0 CDI 1.0 Bernd Müller, Fakultät Informatik, Ostfalia , 16.2.2012 14/31 Java EE 6 CDI 1.0 CDI 1.0 I Übergeordnetes Thema: Strong Typing, loose Coupling I Type-safe Dependency Injection I Qualifier I Scopes I Alternatives I EL-Namen I Interceptoren und Dekoratoren I Portable Erweiterungen (SPI) I ... Bernd Müller, Fakultät Informatik, Ostfalia , 16.2.2012 15/31 Java EE 6 Bean Validation 1.0 Bean Validation 1.0 Bernd Müller, Fakultät Informatik, Ostfalia , 16.2.2012 16/31 Java EE 6 Bean Validation 1.0 Bean Validation 1.0 I Tier-unabhängige Validierung (DRY) I Integration mit JSF und JPA I Einfacher Satz von Constraints I Erweiterbar I ... Bernd Müller, Fakultät Informatik, Ostfalia , 16.2.2012 17/31 Java EE 6 Jax-RS 1.1 JAX-RS 1.1 Bernd Müller, Fakultät Informatik, Ostfalia , 16.2.2012 18/31 Java EE 6 Jax-RS 1.1 JAX-RS 1.1 I Der neue Stern am SOA-Himmel I RESTful Web-Services I POJO-basiert I Annotationen I HTTP zentriert (GET, POST, PUT, DELETE) I ... Bernd Müller, Fakultät Informatik, Ostfalia , 16.2.2012 19/31 Java EE 6 Fragen Fragen und Anmerkungen Bernd Müller, Fakultät Informatik, Ostfalia , 16.2.2012 20/31 Java EE 6 Der Code Der Code Bernd Müller, Fakultät Informatik, Ostfalia , 16.2.2012 22/31 Kundeneingabe mit JSF < h:form > < h:panelGrid columns = " 2 " > Vorname: < h:inputText value = " #{ kundeView . kunde . vorname } " / > Nachname: < h:inputText value = " #{ kundeView . kunde . nachname } " / > Geburtsdatum: < h:inputText value = " #{ kundeView . kunde . geburtsdatum } " > < f:c onvert DateTime pattern = " dd . MM . yyyy " / > </ h:inputText > </ h:panelGrid > < h:commandButton action = " #{ kundeView . speichern } " value = " Speichern " / > </ h:form > JSF Managed Bean für Kundeneingabe @Named @RequestScoped public class KundeView { private Kunde kunde ; @Inject KundeService kundeService ; public KundeView () { kunde = new Kunde (); } public String speichern () { kundeService . speichern ( kunde ); return null ; } ... } EJB KundenService @Stateless public class KundeService { @Per s i st e n ce C o nt e x t EntityManager em ; public void speichern ( Kunde kunde ) { em . persist ( kunde ); } } JPA Entity @Entity public class Kunde { @Id @GeneratedValue private Integer id ; @Column ( length = 30) @NotNull @Size ( min = 3 , max = 30) private String vorname ; ... @Temporal ( TemporalType . DATE ) @Past private Date geburtsdatum ; public Kunde () { } ... REST @Path ( " kunden " ) @Stateless public class KundeService { // Erweiterung : alle Kunden als XML @GET @Produces ( MediaType . TEXT_XML ) public List < Kunde > kunden () { return em . createQuery ( " select k from Kunde k " , Kunde . class ) . getResultList (); } } Java EE 6 Der Code Dazu noch Entity erweitern @XmlRootElement // JAXB ist Standard SE seit Java 5 @Entity public class Kunde { ... } Bernd Müller, Fakultät Informatik, Ostfalia , 16.2.2012 28/31 Java EE 6 Der Code Asynchrone Verarbeitung @Stateless public class SecondService { @Asynchronous public Future < String > async () { ... return new AsyncResult < String >(...); } } Bernd Müller, Fakultät Informatik, Ostfalia , 16.2.2012 29/31 Java EE 6 Der Code Asynchrone Verarbeitung (Client) @Stateless public class FirstService { @Inject SecondService secondService ; public String test () { ... Future < String > result = secondService . async (); ... // blockiert , Alternative ueber CDI - Events String result = result . get (); ... } } Bernd Müller, Fakultät Informatik, Ostfalia , 16.2.2012 30/31 Timer @Stateless public class Timed { // jede Minute : @Schedule ( minute = " */1 " , hour = " * " ) // jede Sekunde : @Schedule ( second = " */1 " , minute = " * " , hour = " * " ) // Mo - Fr , alle 20 Min : @Schedule ( dayOfWeek = " 1 -5 " , hour = " 0/1 " , minute = " 0/20 " ) public void doSomething () { ... } }