Transcript
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?


Recommended