Your SlideShare is downloading. ×
Neue Features der Java EE 6
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Neue Features der Java EE 6

3,087

Published on

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. …

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

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
3,087
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
28
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. g GFU Cyrus AG Ihr Partner für IT Schulung "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
  • 2. Entwicklung von Informationssystemen 29 Jahre am Markt ~35 Mitarbeiter Beratung und Entwicklung Konventionelle und GEDOPLAN neue Technologien Maßgeschneiderte Lösungen Objektorientierte Softwareentwicklung Standardsoftware SAP® SOA Java .NET
  • 3. Seit 1998 im Bereich Java: 50+ Beratungs- und Entwicklungsprojekte Konzeption und Entwicklung 30+ Seminartitel GEDOPLAN Java / Java EE Diverse App.-Server Objektorientierte Softwareentwicklung Glassfish IBM WebSphere JBoss SAP® Oracle WebLogic SOA Java .NET SAP NetWeaver
  • 4. IT-Systeme und Prozesse Beratung, Schulung, Entwicklung 100+ Mitarbeiter www.involva-gruppe.de
  • 5. Die Leichtigkeit der Softwareentwicklung Stärken und Schwächen der neuen Spezifikation Java EE 6 Enterprise Java Team, GEDOPLAN GmbH 2009-06-09
  • 6. Java Enterprise Edition technische Basis Komfort J2EE1.0 J2EE 1.2 J2EE 1.3 J2EE 1.4 JEE 5 JEE 6 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 Produktivstand 6
  • 7. 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
  • 8. Servlet 3.0: Konfiguration mit Annotationen Bisher Registrierung in web.xml 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</servlet-class> </servlet> <servlet-mapping> <servlet-name>SimpleServlet</servlet-name> <url-pattern>/demo/SimpleServlet</url-pattern> </servlet-mapping> … 8
  • 9. Servlet 3.0: Konfiguration mit Annotationen Registrierung per Annotation @WebServlet(name="SimpleServlet", urlPatterns={"/demo/SimpleServlet"}) public class SimpleServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) { … Auch für: Init-Parameter Servlet Filter Context Listener 9
  • 10. Aber: Servlets sind keine POJOs! Servlet-Klasse implementiert HttpServlet Alternative Jersey/JAX-RS @Path("/demo/SimpleServlet"}) public class SimpleServlet { @Get @Produces("text/plain") public String getMessage() { return "Hello, world"; 10
  • 11. JSF 2.0: Konfiguration mit Annotationen Bisher Deklaration von Managed Beans in faces-config.xml 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</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean> </faces-config> 11
  • 12. JSF 2.0: Konfiguration mit Annotationen Deklaration von Managed Beans per Annotation @ManagedBean(name = "demoBean") @RequestScoped public class DemoBean { private double steuerSatz = 0.19; public double getSteuerSatz() { return steuerSatz; } ... 12
  • 13. JSF 2.0: Konfiguration mit Annotationen Annotation auch für: Managed Properties @ManagedProperty(value=”#{barBean}”) private BarBean barBean; Converter Validatoren Renderer Lifecycle 13
  • 14. JSF 2.0: faces-config.xml ist optional überschreibt Annotationen weiterhin für Anwendungsparameter wie Lokalisierung, Phase Listeners etc. Navigationsregeln 14
  • 15. EJB 3.1: No Interface Beans Bis EJB 3.0: Obligatorisches Local oder Remote Interface @Stateless public class ArbeitsplatzDaoBean implements ArbeitsplatzDao { public void insert(Arbeitsplatz entity) { … } public void update(Arbeitsplatz entity) { … } … @Local public interface ArbeitsplatzDao { public void insert(Arbeitsplatz entity); public void update(Arbeitsplatz entity); … Für rein interne Nutzung (Local!) lästig 15
  • 16. 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. @Stateless public class ArbeitsplatzDaoBean { @Stateless public void insert(Arbeitsplatz entity) { … } class SomeOtherBean public public void update(Arbeitsplatz entity) { … } { … @EJB private ArbeitsplatzDaoBean dao; … 16
  • 17. 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
  • 18. EJB 3.1: Singletons Genau eine Bean-Instanz pro JVM. Neue Annotation für Session Beans: @Singleton. @Singleton public class SomeBean { … 18
  • 19. EJB 3.1: Singletons Lebenszyklus wird durch den Container gesteuert. @Startup erzwingt @Singleton Instanziierung beim @Startup Applikationsstart. public class A { … } @DependsOn definiert @Singleton public class B { … } Abhängigkeiten für die Instanziierung. @Singleton @DependsOn("B") public class C { … } @Singleton @Startup @DependsOn({"A", "B"}) public class E { … } 19
  • 20. EJB 3.1: Singletons Unterstützt nebenläufigen Zugriff (Concurrent Access). CMC (Container Managed Concurrency, Default) Container kontrolliert und regelt den Zugriff. Steuerung durch @READ und @WRITE (Default). @AccessTimeout für Limitierung der Blockade. BMC (Bean Managed Concurrency) Entwickler muss synchronized, volatile etc. einsetzen. 20
  • 21. EJB 3.1: Singletons Concurrency Strategy: Beispiele @Singleton @ConcurrencyManagement(CONTAINER) public class A { ... } @Singleton @Lock(READ) @Singleton public class D @Lock(WRITE) { public class B { ... } ... @Singleton @Lock(WRITE) @Lock(READ) public String sayBye() { ... } public class C { ... } ... } @Singleton @AccessTimeout(10000) public class E { ... } 21
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. EJB 3.1: Timer @Schedule steuert Erzeugung und Intervalle. @Schedule wird auf Timeout-Callback-Methoden angewandt. @Stateless public class TimerEJB { @Schedule(dayOfWeek="Mon") public void itIsMonday(Timer timer) { … } @Schedule(dayOfMonth="Last") public void itIsEndOfMonth(Timer timer) { … } } 25
  • 26. EJB 3.1: Timer Eine Methode kann auch mit mehreren Timern ausgestattet werden Umfangreiche Erweiterung der Schedule-Terminologie // 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") 26
  • 27. 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
  • 28. EJB 3.1: Asynchrone Session-Bean-Methoden Asynchrone Methoden werden durch die @Asynchronous gekennzeichnet. Sowohl Klassen, als auch Methoden können annotiert werden. Rückgabe-Typ asynchroner Methoden: void @Stateless public class C implements CLocal { … } Future<V> @Local public interface CLocal { @Asynchronous public void flushBye(); } 28
  • 29. JPA 2.0: Weitere Mapping-Optionen Abbildung von Collections (ohne explizite Relation) Neue Annotation dafür: @ElementCollection. @Entity public class Person { @ElementCollection private Set<String> hobbies; Auch nutzbar für einbettbare Elemente (@Embeddable). Realisierung wie Relation mit Primärschlüssel-Join. 29
  • 30. JPA 2.0: Weitere Mapping-Optionen @Entity public class Vehicle Relationen auf einge- { @Id bettete Objekte int vehicleId; @Embedded PurchaseInfo purchaseInfo; @Embeddable public class PurchaseInfo … { int price; @Temporal(DATE) @Entity @Column(name=”PUR_DATE”) public class Dealer Date purchaseDate; { @Id @ManyToOne int dealerId; Dealer dealer; @OneToMany(mappedBy=”purchaseInfo.dealer”) … Collection<Vehicle> vehiclesSold; … 30
  • 31. JPA 2.0: Weitere Mapping-Optionen Unidirectional One-to-Many mit einem Foreign Key @Entity public class Vehicle { @Id private int vehicleId; @OneToMany private Set<Part> parts; … 31
  • 32. 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
  • 33. JPA 2.0: Relationsfelder im Primärschlüssel Beispiel: public class ProjectId { @Entity String name; @IdClass(ProjectId.class) int dept; public class Project … { } @Id String name; @Id @ManyToOne @JoinColumn(name=”D_ID”) Department dept; … @Entity public class Department { @Id int id; … 33
  • 34. Fazit Trend zur Vereinfachung setzt sich fort Annotationen statt XML Configuration by Exception Viele nützliche Erweiterungen Singletons Asnchrone Methoden Timer Lohnt sich! 34
  • 35. Danke für Ihre Aufmerksamkeit! Haben Sie Fragen?

×