Upload
open-knowledge-gmbh
View
360
Download
1
Embed Size (px)
DESCRIPTION
Speaker: Jens Schumann 5. November 2013 | JAX Mainz Viele ältere Java- und Java-EE-Anwendungen haben mittlerweile ihre Halbwertszeit überschritten: Neben den klassischen Problemfeldern Wartbarkeit, Entwicklungsgeschwindigkeit oder verfügbarer Support sprechen aktuelle Java- und Java-EE-Plattformentscheidungen für eine Migration bestehender Anwendungen hin zu einem neueren Technologie-Stack. Doch was bei einer kleinen Anwendung mithilfe von etwas Fleißarbeit erledigt werden kann, entpuppt sich bei großen, über viele Jahre gewachsenen Anwendungen schnell als unlösbare Aufgabe. Glücklicherweise bietet die Java-Community einige Tools und Ideen, mit deren Hilfe Technologiemigrationen vorab besser bewertet und teilweise bis vollständig automatisch realisiert werden können. Diese Session schildert Erfahrungen mit diesen Ansätzen und Tools und zeigt auf, wie serverseitige Migrationen (Komponentenmodell, Datenzugriff ...), aber auch GUI-Migrationen, beispielsweise von Swing zu JavaFX oder Webtechnologien, gemeistert werden können.
Citation preview
Wir müssen migrieren! Was nun?
Jens Schumann open knowledge GmbH
CMP / BMP!
Struts und Verwandte!Swing!
Stateless/Stateful EJB 2.x!J2EE Pattern!
YOUR-APP-Framework!YOUR-DB-Framework!
JSF 1.x!
Unsere Landschaft
Wir müssen migrieren!
Warum? • Plattform-Support • Entwicklungsperformance
• Know-How • Funktionsumfang
• Komplexität, Performance, Integration, ...
• Sex Appeal
Wohin? • Java Server-Side – Java EE Stack – Spring Framework
• Java Client-Side – Java FX – Web
Wohin? • Beispiel: Java EE Stack
JSF 2.x CDI 1.x
CDI 1.x EJB 3.x
JPA 2.x
Wohin? • Beispiel: Java EE Stack
JAX-WS CDI 1.x
CDI 1.x EJB 3.x
JAX-WS
Wohin? • Beispiel: Java EE Stack
JAX-RS CDI 1.x
CDI 1.x EJB 3.x
JAX-RS
Ja aber!
• Lines of Code • Complexity
• Changes
• Team Staffing • Development Process
• Testing
Migrations Ansätze
• Vollständig – All-or-nothing
• Schichtenorientiert – Layer-by-layer – Layer-only
• Modulorientiert
– Domain or technical
• Manuell – Rewrite by hand
• Vollautomatisiert – Refactoring
• Teilautomatisiert – Refactoring & Cleanup
Migrations Ansätze
• Das Toolset ist vorhanden – Eclipse JDT
– IntelliJ Idea PSI
– NetBeans Refactoring API Auto
matisierung
• Das Toolset ist vorhanden – Rewrite Code – Rewrite Invocations – Rewrite Failure Handling
– Introduce Code – Move Code – Remove Code
– Move Config
Auto matisierung
• Beispiel JDT Refactoring – Zugriff auf Abstract Syntax Tree – Programmiermodell entspricht
GUI Verhalten: 2 Phasen • Änderungen aufzeichnen
o.e.j.c.d.r.ASTRewrite o.e.j.c.d.r.ImportRewrite o.e.j.c.d.AST (Factory)
• Änderungen anwenden o.e.j.t.Document o.e.t.e.TextEdit o.e.j.c.IBuffer (falls „auto-commit“)
Auto matisierung
• Beispiel
– Migration von EJB 2.x Stateless/Stateful Beans und Pattern zu Java EE 6/7 (CDI, EJB 3.x)
– Beispiel: PetStore 1.3.2 Auto matisierung
EJB Transformation (1/5) public class CartEJBAction extends EJBActionSupport { public EventResponse perform(Event e) throws …{ CartEvent ce = (CartEvent)e; ShoppingClientFacadeLocal scf = (SCFL)machine.getAttribute(…); ShoppingCartLocal cart = scf.getShoppingCart(); switch (ce.getActionType()) { case CartEvent.ADD_ITEM : { cart.addItem(ce.getItemId()); } … } } }
EJB Transformation (2/5) public class ShoppingClientFacadeLocalEJB implements SessionBean { public ShoppingCartLocal getShoppingCart() { if (cart == null) { try { ServiceLocator sl = new ServiceLocator(); ShoppingCartLocalHome home =(SCLH)sl.getLocalHome(...); cart = home.create(); } catch (javax.ejb.CreateException cx) { ... } catch (ServiceLocatorException slx) { ...} } return cart; } }
EJB Transformation (3/5) public class ShoppingCartLocalEJB implements SessionBean { private HashMap cart; // default to the US English private Locale locale = Locale.US; public ShoppingCartLocalEJB() { cart = new HashMap(); } ... }
EJB Transformation (4/5) @Named @SessionScoped public class CartAction extends ActionSupport { @Inject privat ShoppingCart cart; public EventResponse perform(Event e) throws …{ CartEvent ce = (CartEvent)e; switch (ce.getActionType()) { case CartEvent.ADD_ITEM : { cart.addItem(ce.getItemId()); } … } } }
EJB Transformation (5/5) @Stateful public class ShoppingCart { private HashMap cart; // default to the US English private Locale locale = Locale.US; public ShoppingCart() { cart = new HashMap(); } ... }
• Beispiel
– Swing UI Layout Migration nach JSF 2.x
– Migrationspfad • Swing -> XMLEncoder ->
XSLT -> XHTML Auto matisierung
Swing Layout Migration (1/3) <java version=“..." class="java.beans.XMLDecoder"> ... <object class=“javax.swing.JPanel"> <void method="add"> ... continued ... </void> <object> </java>
Swing Layout Migration (1/3) <object class=“c.j.m.FormComponent"> <string>javax.swing.JComboBox</string> <void method="setProperty"> <string>name</string> <string>Kunde</string> </void> <void method="setProperty"> <string>nextFocusableComponent</string> <object class=„xxxx.FormReference"> <string>Profil</string> </object> </void> <void property="name"> <string>Kunde</string> </void> </object>
Swing Layout Migration (3/3) <!DOCTYPE html PUBLIC ...> <html xmlns="http://www.w3.org/1999/xhtml" ...> <h:body> <ui:composition template="/templates/master.xhtml"> <div> <h:outputLabel for="Kunde" value="Kunde" /> <h:selectOneMenu id="Kunde" value="#{backingBean.name}" /> .... </div> </ui:composition> </h:body> </html>
Was? • Bestandaufnahme – (Veraltete) Technologien – (Veraltete) Muster – Unnötige Infrastruktur – Fehlende Abstraktionen – Over-engineering – Architektonische Fehler – Assets
• Domain • Data Access • Business Logik • UI
• Achtung – Manuelle Bestands-
aufnahme fehleranfällig
• Daher – Toolsupport nutzen
– Beispiel • JBoss Windup
Was?
JBoss Windup • High Level Architektur
Analyse – „Problem Spots“
• Focus – Technologien – Muster – Konfigurationen
– JBoss Migrationen
JBoss Windup • Core Features
– Java Klassifikation – XML Klassifikation
– JBoss Migration Rules – Rule Extension
– Reporting
Wie?
• Discover problem spots • Design alternatives • Implement
– New core features – Refactorings – Transformations
• Automate migration • Test and improve • Freeze and Test • Rollout
Wie?
• Java2Java – Refactoring
• Web2Web – (Begrenzt) XSLT
• SwingToXXX – Layout und „Binding“ via
XMLDecoder und XSLT – Refactoring
• Java2XXX – Refactoring & Code
Generierung
Problem Bereiche
• Fehlendes Domain Modell
• Fehlende Muster
• DB Layer/ OR-Mapping – Fehlende JPA Features – Lebenszyklus – Stateful Handling
• (UI)-Framework pollution – Domain und UI Code
• View Logik
• Upgrade EJB 2.x – EJB 3.x, CDI oder Spring
• Remove J2EE Pattern – Injection
• Remove/Simplify YOUR Framework
• Re-use CMP – Nur Basis für weiter-
führende Arbeiten • Swing2JavaFX • Swing2JSF
Was geht?
Vielen Dank für Ihre Zeit. Kontakt: open knowledge GmbH Bismarckstr. 13 26122 Oldenburg
Q&A
openknowledge@WJAX2013
Dienstag: Java EE Day 12:00 – 13:00 New School Enterprise Architecture 17:45 – 18:45 Wir müssen migrieren! Was nun?
Donnerstag: 08:45 – 09:45 Android goes asynchronous 10:15 – 11:15 JS-Components in JSF-Anwendungen
Freitag: Java EE Experts Day 13:30 – 15:00 JPA: Pitfalls, Patterns und Performance 15:30 – 17:00 Real-Life-Chaos und Best Practices
Links • http://www.vogella.com/articles/EclipseJDT/article.html • http://www.eclipse.org/articles/article.php?file=Article-Unleashing-the-
Power-of-Refactoring/index.html • http://www.eclipse.org/articles/article.php?file=Article-
JavaCodeManipulation_AST/index.html • http://publib.boulder.ibm.com/infocenter/rtnlhelp/v6r0m0/index.jsp?
topic=%2Forg.eclipse.jdt.doc.isv%2Fguide%2Fjdt_api_manip.htm