Ist Ihre Enterprise-Java-Anwendung auch schon zehn Jahre alt? Oder planen Sie, Ihre neu realisierte Anwendung mindestens so lange einzusetzen? Ja? Dann ist diese Session ein Muss. Mithilfe von typischen Mustern und Codebeispielen widmet sich diese Session den „Gefahren“ für Enterprise-Java-Anwendungen, die durch den kontinuierlichen konzeptionellen und technologischen Fortschritt entstehen. Dabei zeigen die Erfahrungen aus Projekten, dass Enterprise-Java zwar das Handwerkszeug für robuste, wartbare und zukunftsfähige Anwendungen bilden kann, aber durch die Art des Einsatzes selten bildet. Getreu dem Motto „Was heute neu ist, ist morgen veraltet“ identifiziert diese Session die Ursachen für architektonische und technologische Schwachstellen, die erst im Laufe der Lebenszeit einer Enterprise-Java-Anwendung sichtbar werden. Hierzu werden sowohl Symptome und Indizien für zukünftige Sackgassen herausgearbeitet als auch Lösungen bzw. Ansätze vorgestellt, mit denen die Konsequenzen abgeschwächt oder vermieden werden können.
12. (Schon wieder) Legacy - und nun?
Wir müssen damit leben, dass
kommen und gehen.
(Und manchmal schneller „Old-School“ sind als man glaubt)
(Und oftmals schneller gehen als man glaubt)
Technologien, Frameworks und IT-Konzepte
13. (Schon wieder) Legacy - und nun?
Wir müssen auch damit leben, dass
die Umsetzung von wartbarer Software ermöglichen
moderne Technologien, Frameworks und IT-Konzepte
mit Altlasten a.k.a. Legacy kämpfen.
und wir, die Entwicklung, regelmäßig in „kurzer Zeit“
(Die wir oft selbst zu verantworten haben)
25. (Schon wieder) Legacy - und nun?
304 //Component initialization
305 private void jbInit() {
... btnCustReviewPrev.setText("<< " + res.getString("..."));
btnCustReviewPrev.setMargin(new Insets(2, 0, 2, 0));
btnCustReviewPrev.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// ... business code
}
});
btnCustReviewNext.setText(res.getString("...") + " >>");
...
1053 setTabOrder();
1054 }
This is not just 199x!
26. (Schon wieder) Legacy - und nun?
// As seen in JSF / Primefaces
public void changeListener(TabChangeEvent e) {
// do something...
RequestContext
.getCurrentInstance()
.execute("PF('speicherdialog')
.show()");
}
This is not just 199x!
27. (Schon wieder) Legacy - und nun?
// As seen in Wicket
Button b = new Button("Calculate");
b.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
BigDecimal amount = ...;
BigDecimal itemPrice = ...;
BigDecimal price = amount.multiply(itemPrice);
}
});
This is not just 199x!
28. (Schon wieder) Legacy - und nun?
// As seen in (former) EJB / non-OR Applications – not a „remote“ API
@Entity
public class CustomerEntity { ... }
public class Customer { ... }
public class CustomerService {
@Inject private CustomerRepository repo;
public Customer find(...) {
CustomerEntity cus = repo.find(...);
Customer ret = new Customer();
ret.setFirstName(cus.getFirstName());
...
return ret;
}
}
This is not just 199x!
29. (Schon wieder) Legacy - und nun?
// As seen in JPA Repositories
public List<Order> findNewOrders() {
return em.createQuery("select order from Order order " +
"join fetch order.customer c " +
"join fetch c.adresses a " +
"where ... “
.resultList();
}
This is not just 199x!
32. Managing Legacy
• Technologiebewertung
• in Bezug auf Aktualität und Veränderung
• Anwendungsbewertung
• in Bezug auf Relevanz und Changes
• in Bezug auf „Assets“
• Architektur- und Code-Bewertung
• in Bezug auf Abhängigkeiten und Qualität
• in Bezug auf Adaptionsgeschwindigkeit
• in Bezug auf „Assets“
(Schon wieder) Legacy - und nun?