Transcript
Page 1: Wir müssen migrieren! Was nun?

Wir müssen migrieren! Was nun?

Jens Schumann open knowledge GmbH

Page 2: Wir müssen migrieren! Was nun?

CMP / BMP!

Struts und Verwandte!Swing!

Stateless/Stateful EJB 2.x!J2EE Pattern!

YOUR-APP-Framework!YOUR-DB-Framework!

JSF 1.x!

Unsere Landschaft

Page 3: Wir müssen migrieren! Was nun?

Wir müssen migrieren!

Page 4: Wir müssen migrieren! Was nun?

Warum? •  Plattform-Support •  Entwicklungsperformance

•  Know-How •  Funktionsumfang

•  Komplexität, Performance, Integration, ...

•  Sex Appeal

Page 5: Wir müssen migrieren! Was nun?

Wohin? •  Java Server-Side –  Java EE Stack –  Spring Framework

•  Java Client-Side –  Java FX –  Web

Page 6: Wir müssen migrieren! Was nun?

Wohin? •  Beispiel: Java EE Stack

JSF 2.x CDI 1.x

CDI 1.x EJB 3.x

JPA 2.x

Page 7: Wir müssen migrieren! Was nun?

Wohin? •  Beispiel: Java EE Stack

JAX-WS CDI 1.x

CDI 1.x EJB 3.x

JAX-WS

Page 8: Wir müssen migrieren! Was nun?

Wohin? •  Beispiel: Java EE Stack

JAX-RS CDI 1.x

CDI 1.x EJB 3.x

JAX-RS

Page 9: Wir müssen migrieren! Was nun?

Ja aber!

•  Lines of Code •  Complexity

•  Changes

•  Team Staffing •  Development Process

•  Testing

Page 10: Wir müssen migrieren! Was nun?

Migrations Ansätze

•  Vollständig –  All-or-nothing

•  Schichtenorientiert –  Layer-by-layer –  Layer-only

•  Modulorientiert

–  Domain or technical

Page 11: Wir müssen migrieren! Was nun?

•  Manuell –  Rewrite by hand

•  Vollautomatisiert –  Refactoring

•  Teilautomatisiert –  Refactoring & Cleanup

Migrations Ansätze

Page 12: Wir müssen migrieren! Was nun?

•  Das Toolset ist vorhanden –  Eclipse JDT

–  IntelliJ Idea PSI

–  NetBeans Refactoring API Auto

matisierung

Page 13: Wir müssen migrieren! Was nun?

•  Das Toolset ist vorhanden –  Rewrite Code –  Rewrite Invocations –  Rewrite Failure Handling

–  Introduce Code –  Move Code –  Remove Code

–  Move Config

Auto matisierung

Page 14: Wir müssen migrieren! Was nun?

•  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

Page 15: Wir müssen migrieren! Was nun?

•  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

Page 16: Wir müssen migrieren! Was nun?

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()); } … } } }

Page 17: Wir müssen migrieren! Was nun?

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; } }

Page 18: Wir müssen migrieren! Was nun?

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(); } ... }

Page 19: Wir müssen migrieren! Was nun?

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()); } … } } }

Page 20: Wir müssen migrieren! Was nun?

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(); } ... }

Page 21: Wir müssen migrieren! Was nun?

•  Beispiel

–  Swing UI Layout Migration nach JSF 2.x

–  Migrationspfad •  Swing -> XMLEncoder ->

XSLT -> XHTML Auto matisierung

Page 22: Wir müssen migrieren! Was nun?

Swing Layout Migration (1/3) <java version=“..." class="java.beans.XMLDecoder"> ... <object class=“javax.swing.JPanel"> <void method="add"> ... continued ... </void> <object> </java>

Page 23: Wir müssen migrieren! Was nun?

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>

Page 24: Wir müssen migrieren! Was nun?

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>

Page 25: Wir müssen migrieren! Was nun?

Was? •  Bestandaufnahme –  (Veraltete) Technologien –  (Veraltete) Muster –  Unnötige Infrastruktur –  Fehlende Abstraktionen –  Over-engineering –  Architektonische Fehler –  Assets

•  Domain •  Data Access •  Business Logik •  UI

Page 26: Wir müssen migrieren! Was nun?

•  Achtung –  Manuelle Bestands-

aufnahme fehleranfällig

•  Daher –  Toolsupport nutzen

–  Beispiel •  JBoss Windup

Was?

Page 27: Wir müssen migrieren! Was nun?

JBoss Windup •  High Level Architektur

Analyse –  „Problem Spots“

•  Focus –  Technologien –  Muster –  Konfigurationen

–  JBoss Migrationen

Page 28: Wir müssen migrieren! Was nun?

JBoss Windup •  Core Features

–  Java Klassifikation –  XML Klassifikation

–  JBoss Migration Rules –  Rule Extension

–  Reporting

Page 29: Wir müssen migrieren! Was nun?

Wie?

•  Discover problem spots •  Design alternatives •  Implement

–  New core features –  Refactorings –  Transformations

•  Automate migration •  Test and improve •  Freeze and Test •  Rollout

Page 30: Wir müssen migrieren! Was nun?

Wie?

•  Java2Java –  Refactoring

•  Web2Web –  (Begrenzt) XSLT

•  SwingToXXX –  Layout und „Binding“ via

XMLDecoder und XSLT –  Refactoring

•  Java2XXX –  Refactoring & Code

Generierung

Page 31: Wir müssen migrieren! Was nun?

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

Page 32: Wir müssen migrieren! Was nun?

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

Page 33: Wir müssen migrieren! Was nun?

Vielen Dank für Ihre Zeit. Kontakt: open knowledge GmbH Bismarckstr. 13 26122 Oldenburg

Q&A

Page 34: Wir müssen migrieren! Was nun?

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

Page 35: Wir müssen migrieren! Was nun?

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


Recommended