Neue Features der Java EE 6

35
Ihr Partner für IT Schulung g GFU Cyrus AG "Semicolon" Vortragsreihe bei der GFU Vortrag am Dienstag, 09. Juni 2009 Thema Die Leichtigkeit der Softwareentwicklung Stärken und Schwächen der neuen Spezifikation Java EE 6 Einführung Peter Hecker, GFU Cyrus AG Vortrag Dirk Weil, GEDOPLAN GmbH

description

Die Version 6 der Java Enterprise Edition steht kurz vor der Verabschiedung. Viele Stimmen sagen, dass die darin enthaltenen Technologien nunmehr nahezu ausgereift und alle Erwartungen erfüllt seien. Es werden die neuen Features insbesondere in den Bereichen Enterprise JavaBeans, Webanwendungen, Java Persistence und Webservices beleuchtet. Die anschließende Diskussion kann zeigen, ob die anfangs angesprochenen Vorschusslorbeeren gerechtfertigt sind und ob die Wunschliste tatsächlich vollständig abgearbeitet wurde. EJB 3.1 - Session Beans ohne local Interface - Singletons, Timer - Session Bean Methoden asynchron Servlet 3.0 - Ease of Development JSF 2.0 - Ohne faces-config.xml? JPA 2.0 - Weitere Mapping-Optionen - Relationsfelder im Primärschlüssel

Transcript of Neue Features der Java EE 6

Page 1: Neue Features der Java EE 6

Ihr Partner für IT Schulung

g GFU Cyrus AG

"Semicolon" Vortragsreihe bei der GFU

Vortrag am Dienstag, 09. Juni 2009

Thema

Die Leichtigkeit der SoftwareentwicklungStärken und Schwächen der neuen Spezifikation Java EE 6

Einführung

Peter Hecker, GFU Cyrus AG

Vortrag

Dirk Weil, GEDOPLAN GmbH

Page 2: Neue Features der Java EE 6

Entwicklung von Informationssystemen

29 Jahre am Markt

~35 Mitarbeiter

Beratung und Entwicklung

Konventionelle undneue Technologien

Maßgeschneiderte Lösungen

Standardsoftware

SOA Java .NET

SAP®

GEDOPLANGEDOPLANGEDOPLANGEDOPLAN

Objektorientierte Softwareentwicklung

Page 3: Neue Features der Java EE 6

Seit 1998 im Bereich Java:

50+ Beratungs- und Entwicklungsprojekte

Konzeption und Entwicklung

30+ Seminartitel

Java / Java EE

Diverse App.-ServerGlassfish

IBM WebSphere

JBoss

Oracle WebLogic

SAP NetWeaverSOA .NET

SAP®

GEDOPLANGEDOPLANGEDOPLANGEDOPLAN

Objektorientierte Softwareentwicklung

Java

Page 4: Neue Features der Java EE 6

IT-Systeme und Prozesse

Beratung, Schulung, Entwicklung

100+ Mitarbeiter

www.involva-gruppe.de

Page 5: Neue Features der Java EE 6

Die Leichtigkeit der Softwareentwicklung

Stärken und Schwächen der neuen Spezifikation Java EE 6

Enterprise Java Team, GEDOPLAN GmbH

2009-06-09

Page 6: Neue Features der Java EE 6

Java Enterprise Edition

6

1998 1999 2000 2001 2002 2003 2004 2005 2006

J2EE1.0 J2EE 1.2 J2EE 1.3 J2EE 1.4 JEE 5

2007 2008 2009

JEE 6

technische Basis Komfort

Produktivstand

Page 7: Neue Features der Java EE 6

Java Enterprise Edition

J2EE 1.4

schwergewichtig

viele XML-Descriptoren

Java EE 5

POJOs, IoC / DI

Configuration by Exception

Java-5-Annotationen statt XML

Java EE 6

Fortsetzung des Trends zur Einfachheit

Diverse "Wunscherfüllungen"

7

Page 8: Neue Features der Java EE 6

Servlet 3.0: Konfiguration mit Annotationen

Bisher Registrierung in web.xml

8

public class SimpleServlet extends HttpServlet{

protected void doGet(HttpServletRequest request,HttpServletResponse response)

{…

<web-app><servlet>

<servlet-name>SimpleServlet</servlet-name><servlet-class>de.gedoplan.demo.SimpleServlet</serv let-class>

</servlet><servlet-mapping>

<servlet-name>SimpleServlet</servlet-name><url-pattern>/demo/SimpleServlet</url-pattern>

</servlet-mapping>…

Page 9: Neue Features der Java EE 6

Servlet 3.0: Konfiguration mit Annotationen

Registrierung per Annotation

Auch für:

Init-Parameter

Servlet Filter

Context Listener

9

@WebServlet(name="SimpleServlet", urlPatterns={"/demo/SimpleServlet"})public class SimpleServlet extends HttpServlet{

protected void doGet(HttpServletRequest request,HttpServletResponse response)

{…

Page 10: Neue Features der Java EE 6

Aber: Servlets sind keine POJOs!

Servlet-Klasse implementiert HttpServlet

Alternative Jersey/JAX-RS

10

@Path("/demo/SimpleServlet"})public class SimpleServlet{

@Get@Produces("text/plain")public String getMessage(){

return "Hello, world";

Page 11: Neue Features der Java EE 6

JSF 2.0: Konfiguration mit Annotationen

Bisher Deklaration von Managed Beans in faces-config.xml

11

public class DemoBean{

private double steuerSatz = 0.19;

public double getSteuerSatz(){

return steuerSatz;}

...

<faces-config><managed-bean>

<description>DemoBean</description><managed-bean-name>demoBean</managed-bean-name><managed-bean-class>de.gedoplan.demo.DemoBean</mana ged-bean-class><managed-bean-scope>request</managed-bean-scope>

</managed-bean></faces-config>

Page 12: Neue Features der Java EE 6

JSF 2.0: Konfiguration mit Annotationen

Deklaration von Managed Beans per Annotation

12

@ManagedBean(name = " demoBean")@RequestScopedpublic class DemoBean{

private double steuerSatz = 0.19;

public double getSteuerSatz(){

return steuerSatz;}

...

Page 13: Neue Features der Java EE 6

JSF 2.0: Konfiguration mit Annotationen

Annotation auch für:

Managed Properties

Converter

Validatoren

Renderer

Lifecycle

13

@ManagedProperty(value=”#{barBean}”)private BarBean barBean;

Page 14: Neue Features der Java EE 6

JSF 2.0: faces-config.xml

ist optional

überschreibt Annotationen

weiterhin für

Anwendungsparameter wie Lokalisierung, Phase Listeners etc.

Navigationsregeln

14

Page 15: Neue Features der Java EE 6

EJB 3.1: No Interface Beans

Bis EJB 3.0: Obligatorisches Local oder Remote Interface

Für rein interne Nutzung (Local!) lästig

15

@Statelesspublic class ArbeitsplatzDaoBean implements Arbeitsp latzDao{

public void insert(Arbeitsplatz entity) { … }public void update(Arbeitsplatz entity) { … }…

@Localpublic interface ArbeitsplatzDao{

public void insert(Arbeitsplatz entity);public void update(Arbeitsplatz entity);…

Page 16: Neue Features der Java EE 6

EJB 3.1: No Interface Beans

Interfaces sind nun optional.

Wenn kein Interface deklariert:Container stellt Referenz-Objekt (Proxy) zur Verfügung

Proxy enthält alle öffentlichen Methoden der Bean.

Proxy ist von der Bean-Klasse abgeleitet.

Nutzung (z.B.) aus anderen EJBs über den Typ der Bean-Klasse.

16

@Statelesspublic class ArbeitsplatzDaoBean{

public void insert(Arbeitsplatz entity) { … }public void update(Arbeitsplatz entity) { … }…

@Statelesspublic class SomeOtherBean{

@EJBprivate ArbeitsplatzDaoBean dao;…

Page 17: Neue Features der Java EE 6

EJB 3.1: No Interface Beans

Erstellung des No-Interface-Referenzobjekts auch zusätzlich mit @LocalBean

Achtung: Alle öffentlichen Methoden sind zugreifbar!

Aufruf nicht-öffentlicher Methoden wirft Exception.

17

Page 18: Neue Features der Java EE 6

EJB 3.1: Singletons

Genau eine Bean-Instanz pro JVM.

Neue Annotation für Session Beans: @Singleton .

18

@Singleton public class SomeBean{

Page 19: Neue Features der Java EE 6

EJB 3.1: Singletons

Lebenszyklus wird durch den Container gesteuert.

@Startup erzwingt

Instanziierung beimApplikationsstart.

@DependsOndefiniertAbhängigkeiten für dieInstanziierung.

19

@Singleton@Startuppublic class A { … }

@Singleton public class B { … }

@Singleton @DependsOn("B")public class C { … }

@Singleton @Startup@DependsOn({"A", "B"})public class E { … }

Page 20: Neue Features der Java EE 6

EJB 3.1: Singletons

Unterstützt nebenläufigen Zugriff (Concurrent Access).

CMC (Container Managed Concurrency, Default)

Container kontrolliert und regelt den Zugriff.

Steuerung durch @READund @WRITE(Default).

@AccessTimeout für Limitierung der Blockade.

BMC (Bean Managed Concurrency)

Entwickler muss synchronized , volatile etc. einsetzen.

20

Page 21: Neue Features der Java EE 6

EJB 3.1: Singletons

Concurrency Strategy: Beispiele

21

@Singleton @ConcurrencyManagement(CONTAINER) public class A { ... }

@Singleton @Lock(WRITE) public class B { ... }

@Singleton @Lock(READ) public class C { ... }

@Singleton @Lock(READ) public class D { ...

@Lock(WRITE) public String sayBye() { ... }

...}

@Singleton @AccessTimeout(10000) public class E { ... }

Page 22: Neue Features der Java EE 6

EJB 3.1: Singletons

Singletons sind statusbehaftet.

Status besteht bis zum Applikationsende (Shutdown/Undeploy).

Im Clusterbetrieb gibt es pro JVM eine Singleton-Instanz.

System Exceptions führen nicht zur Zerstörung.

22

Page 23: Neue Features der Java EE 6

EJB 3.1: Timer

Timer Service wurde von EJB 2.1 mit beschränkter Funktionalität eingeführt:

Alle Timer müssen programmatisch erzeugt werden.

Unflexibles Scheduling der Timer.

Kein Cluster-Support.

23

Page 24: Neue Features der Java EE 6

EJB 3.1: Timer

Programmatische Instanziierung durch erweitertes Interface TimerService .

Deklarative Instanziierung durch Annotationen.

Timer können persistent gehalten werden.

Timer sind nun cluster-fähig.

Nicht-persistente Timer 1 x pro JVM.

Persistente Timer 1 x pro Cluster.

24

Page 25: Neue Features der Java EE 6

EJB 3.1: Timer

@Schedule steuert Erzeugung und Intervalle.

@Schedule wird auf Timeout-Callback-Methoden angewandt.

25

@Stateless public class TimerEJB{

@Schedule(dayOfWeek="Mon")public void itIsMonday(Timer timer) { … }

@Schedule(dayOfMonth="Last")public void itIsEndOfMonth(Timer timer) {

… } }

Page 26: Neue Features der Java EE 6

EJB 3.1: Timer

Eine Methode kann auch mit mehreren Timern ausgestattet werden

Umfangreiche Erweiterung der Schedule-Terminologie

26

// Every Tuesday at 7.30am @Schedule(hour = "7", minute = "30", dayOfWeek = "Tue")

// From Monday to Friday, at 7, 15 and 20 @Schedule(hour = "7, 15, 20", dayOfWeek = "Mon-Fri")

// Every hour on Sundays @Schedule(hour = "*", dayOfWeek = "0")

// Last Friday of December, at 12 @Schedule(hour = "12", dayOfMonth = "Last Fri", month="Dec")

// Three days before the last day of the month, for every month of 2009, at 8pm @Schedule(hour = "20", dayOfMonth = "-3", year="2009")

// Every 5 minutes of every hour, starting at 3pm @Schedule(minute = "*/5", hour = "15/1")

Page 27: Neue Features der Java EE 6

EJB 3.1: Asynchrone Session-Bean-Methoden

Session Beans unterstützen asynchronen Methodenaufruf.

Kontrolle wird dem Client zurückgegeben werden, bevor der Container den Aufruf an die Bean-Instanz weiterleitet.

Es können vom Client parallele (nebenläufige) Prozesse angestoßen werden.

27

Page 28: Neue Features der Java EE 6

EJB 3.1: Asynchrone Session-Bean-Methoden

Asynchrone Methoden werden durch die @Asynchronousgekennzeichnet.

Sowohl Klassen, als auch Methoden können annotiert werden.

Rückgabe-Typ asynchroner Methoden:

void

Future<V>

28

@Stateless public class C implements CLocal { … }

@Local public interface CLocal{

@Asynchronouspublic void flushBye();

}

Page 29: Neue Features der Java EE 6

JPA 2.0: Weitere Mapping-Optionen

Abbildung von Collections (ohne explizite Relation)

Neue Annotation dafür: @ElementCollection .

Auch nutzbar für einbettbare Elemente (@Embeddable).

Realisierung wie Relation mit Primärschlüssel-Join.

29

@Entity public class Person{

@ElementCollectionprivate Set<String> hobbies;

Page 30: Neue Features der Java EE 6

Relationen auf einge-bettete Objekte

JPA 2.0: Weitere Mapping-Optionen

30

@Embeddable public class PurchaseInfo{

int price;

@Temporal(DATE) @Column(name=”PUR_DATE”) Date purchaseDate;

@ManyToOneDealer dealer;

@Entity public class Vehicle{

@Id int vehicleId;

@Embedded PurchaseInfo purchaseInfo;

@Entity public class Dealer{

@Id int dealerId;

@OneToMany(mappedBy=”purchaseInfo.dealer”) Collection<Vehicle> vehiclesSold;

Page 31: Neue Features der Java EE 6

JPA 2.0: Weitere Mapping-Optionen

Unidirectional One-to-Many mit einem Foreign Key

31

@Entitypublic class Vehicle{

@Idprivate int vehicleId;

@OneToManyprivate Set<Part> parts;

Page 32: Neue Features der Java EE 6

JPA 2.0: Relationsfelder im Primärschlüssel

In manchen Fällen, insbesondere bei der Integration von Alt-Systemen (lagacy databases) ist es notwendig, Primärschlüssel mit Fremdschlüssel einer anderen Tabelle zu realisieren…

32

Page 33: Neue Features der Java EE 6

JPA 2.0: Relationsfelder im Primärschlüssel

Beispiel:

33

@Entity@IdClass(ProjectId.class)public class Project {

@Id String name;

@Id @ManyToOne@JoinColumn(name=”D_ID”)Department dept;

public class ProjectId{

String name;int dept;…

}

@Entitypublic class Department{

@Id int id;…

Page 34: Neue Features der Java EE 6

Fazit

Trend zur Vereinfachung setzt sich fort

Annotationen statt XML

Configuration by Exception

Viele nützliche Erweiterungen

Singletons

Asnchrone Methoden

Timer

Lohnt sich!

34

Page 35: Neue Features der Java EE 6

Danke für Ihre Aufmerksamkeit!

Haben Sie Fragen?