Neue Features der Java EE 6
-
Upload
gfu-cyrus-ag -
Category
Technology
-
view
4.526 -
download
7
description
Transcript of 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
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
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
IT-Systeme und Prozesse
Beratung, Schulung, Entwicklung
100+ Mitarbeiter
www.involva-gruppe.de
Die Leichtigkeit der Softwareentwicklung
Stärken und Schwächen der neuen Spezifikation Java EE 6
Enterprise Java Team, GEDOPLAN GmbH
2009-06-09
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
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
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>…
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)
{…
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";
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>
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;}
...
JSF 2.0: Konfiguration mit Annotationen
Annotation auch für:
Managed Properties
Converter
Validatoren
Renderer
Lifecycle
13
@ManagedProperty(value=”#{barBean}”)private BarBean barBean;
JSF 2.0: faces-config.xml
ist optional
überschreibt Annotationen
weiterhin für
Anwendungsparameter wie Lokalisierung, Phase Listeners etc.
Navigationsregeln
14
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);…
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;…
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
EJB 3.1: Singletons
Genau eine Bean-Instanz pro JVM.
Neue Annotation für Session Beans: @Singleton .
18
@Singleton public class SomeBean{
…
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 { … }
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
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 { ... }
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
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
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
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) {
… } }
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")
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
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();
}
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;
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;
…
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;
…
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
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;…
Fazit
Trend zur Vereinfachung setzt sich fort
Annotationen statt XML
Configuration by Exception
Viele nützliche Erweiterungen
Singletons
Asnchrone Methoden
Timer
Lohnt sich!
34
Danke für Ihre Aufmerksamkeit!
Haben Sie Fragen?