Java EE 6 - LINEAS Informationstechnik GmbH

Werbung
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 () {
...
}
}
Herunterladen