Anwendungsentwicklung mit Spring

Ähnliche Dokumente
Der lokale und verteilte Fall

Application Frameworks

Einführung in die Programmierung

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Testen mit JUnit. Motivation

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, Java Forum Stuttgart 2007

Java: Vererbung. Teil 3: super()

Spring Dynamic Modules for OSGi Service Platforms

Objektorientierte Programmierung

Java Enterprise Architekturen Willkommen in der Realität

WebService in Java SE und EE

Innere Klassen in Java

Zählen von Objekten einer bestimmten Klasse

Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch

Kapitel 4 Die Datenbank Kuchenbestellung Seite 1

Version smarter mobile(zu finden unter Einstellungen, Siehe Bild) : Gerät/Typ(z.B. Panasonic Toughbook, Ipad Air, Handy Samsung S1):

Große Übung Praktische Informatik 1

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Einführung in die Java- Programmierung

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Arbeiten mit UMLed und Delphi

Algorithmen und Datenstrukturen

Typumwandlungen bei Referenztypen

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Gebundene Typparameter

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen.

Software- und Druckerzuweisung Selbstlernmaterialien

Struts 2 Das Imperium schlägt zurück?

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

Anleitung über den Umgang mit Schildern

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein: - Ein Bootimage ab Version Optional einen DHCP Server.

Unsere Webapplikation erweitern

Objektorientierte Programmierung

Objektorientierte Programmierung. Kapitel 12: Interfaces

Spring Dynamic Modules for OSGi Service Platforms

Themen. Web Service - Clients. Kommunikation zw. Web Services

MSXFORUM - Exchange Server 2003 > SMTP Konfiguration von Exchange 2003

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Reporting Services und SharePoint 2010 Teil 1

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version September

Orientierungshilfen für SAP PI (Visualisierungen)

Java Einführung Abstrakte Klassen und Interfaces

Wiederholung: Beginn

Downloadfehler in DEHSt-VPSMail. Workaround zum Umgang mit einem Downloadfehler

Enigmail Konfiguration

Applet Firewall und Freigabe der Objekte

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Installation OMNIKEY 3121 USB

Titel. App-V 5 Single Server Anleitung zur Installation

Step by Step Softwareverteilung unter Novell. von Christian Bartl

Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.2

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Rene Schneider GEBIT Solutions GmbH. Integrity - ein innovatives Tool zur Acceptance-Test-Automatisierung

Inhalt. Fragestellungen. ...we make the invisible visible... Analysen und deren Anwendung Erfahrungen

Festigkeit von FDM-3D-Druckteilen

Scala kann auch faul sein

3. Stored Procedures und PL/SQL

Informationsblatt Induktionsbeweis

Speicher in der Cloud

Übungen zu Softwaretechnik

OP-LOG

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

4. AuD Tafelübung T-C3

Erfahrungen mit Hartz IV- Empfängern

Eignet sich Eclipse RCP als Enterprise Plattform? 2. Mai 2006 Lars Stucki & Edwin Steiner

Source Code Konverter Online: (VB.net <-> C#) Kommerzielle Produkte (VB, C#, C++, Java) Code Nachbearbeitung in der Praxis...

Titel. System Center Configuration Manager 2012 R2 Anleitung Installation Softwareupdatepunkt und WSUS Integration

Datenmanagement in Android-Apps. 16. Mai 2013

Dokumentation Schedulingverfahren

SEP 114. Design by Contract

Monatstreff für Menschen ab 50 Temporäre Dateien / Browserverlauf löschen / Cookies

Menü auf zwei Module verteilt (Joomla 3.4.0)

Was ist das Budget für Arbeit?

Design Patterns 2. Model-View-Controller in der Praxis

Internet Explorer Version 6

Thermoguard. Thermoguard CIM Custom Integration Module Version 2.70

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Java Entwicklung für Embedded Devices Best & Worst Practices!

Mein Name ist Legion

Protect 7 Anti-Malware Service. Dokumentation

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank

WLAN Konfiguration. Michael Bukreus Seite 1

NetMan Desktop Manager Vorbereitung und Konfiguration des Terminalservers

Info zum Zusammenhang von Auflösung und Genauigkeit

WPF Steuerelemente Listbox, ComboBox, ListView,

Die Entwicklung eines Glossars (oder eines kontrollierten Vokabulars) für ein Unternehmen geht üblicherweise in 3 Schritten vor sich:

LDAP Konfiguration nach einem Update auf Version 6.3 Version 1.2 Stand: 23. Januar 2012 Copyright MATESO GmbH

WinVetpro im Betriebsmodus Laptop

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016

Dokumentation, Analyse, Optimierung,

ecaros2 Installer procar informatik AG 1 Stand: FS 09/2012 Eschenweg Weiterstadt

ecaros-update 8.2 Update 8.2 procar informatik AG 1 Stand: DP 02/2014 Eschenweg Weiterstadt

Was meinen die Leute eigentlich mit: Grexit?

OSGi-basierte Webapplikationen Ein Erfahrungsbericht

Transkript:

Anwendungsentwicklung mit Spring Eberhard Wolff Managing Director Interface21 GmbH Interface21 - Spring from the Source Interface21 Produkte u.a. Spring Framework Spring from the Source Consulting, Training, Support Kürzlich: 10 Mio $ Venture Capital von Benchmark (MySQL, JBoss, Red Hat) 1

Über mich Managing Director Interface21 Deutschland Java Champion Fokus: Java EE, Spring... Autor (z.b. Java Magazin, 3 Bücher...) Z.B. Spring (Neu: 2. Auflage) http://www.spring-buch.de/ Blog: http://jandiandme.blogspot.com/ Überblick Zwei Worte über Spring Typische Spring Architekturen Layering Ist das eine objektorientierte Architektur? Fazit 2

Zwei Worte über Spring Was Spring einmalig macht... Zusammenstecken der Anwendung Dependency Injection Simple Object Cross Cutting Concerns (z.b. Security, Transactions) AOP Portable Service Abstractions Vereinfachung der Java-APIs 3

Dependency Injection public class OrderService implements IOrderService { private ICustomercDAO customerdao; public void setcustomerdao(icustomercdao customerdao) { this.customerdao = customerdao; <bean id="orderservice" class="order.service.orderservice"> <property name="customerdao" ref="customerdao " /> </bean> <bean id="customerdao" class="customer.dao.customerdao" /> Aber... 4

Das ist ja XML! Aber das ist ja XML Einfaches XML Lesbar und leicht editierbar Mit Tool-Support Aber: Man kann auch stattdessen Java & Annotationen verwenden Neues Projekt: Spring JavaConfig 5

Spring JavaConfig @Configuration public class SpringConfiguration { @Bean Ein Singleton... public ICustomerDAO customerdao() { return new CustomerDAO(dataSource()); @Bean public IOrderService orderservice() { return new OrderService(customerDAO());...und Spring 2.1 hat auch einiges... Spring 2.1: Frisch vom Entwickler Neu in Spring 2.1: DI mit Annotationen @Repository public class StubAccountRepository implements AccountRepository { public class ConstructorAutowiredTransferService{ @Autowired public ConstructorAutowiredTransferService( AccountRepository accountrepository) { this.accountrepository = accountrepository; 6

Warum Dependency Injection? Klassen sind unabhängig von der Umgebung Im Gegensatz zum Beispiel zu JNDI...oder der Benutzung von Factories Leichter testbar Mocks statt eigentlichen Klassen zuweisbar Leichter wiederverwenbar Klare Abhängigkeiten Konfiguration von Objektnetzen Verbessert z.b. Nutzung des Strategy-Patterns Was einem Spring also an die Hand gibt... Möglichkeit zur Strukturierung der Anwendung Elemente sind normale Java Klassen Keine Abhängigkeiten von Spring Konstruktor- oder Setter-Dependency Injection Integration von Factories usw. möglich Integration anderer Bibliotheken möglich Migration vorhandener Anwendungen möglich Feingranularer als eine Architektur Wie sieht darauf aufbauend eine Anwendung aus? 7

Typische Spring Architekturen Typische Spring Architektur Service objects / Business Facades Transactional boundaries boundaries Domain objects DAO interfaces DAO implementations Spring web-tier context Independent of persistence API Use Spring DAO templates JDBC RDBMS ORM tool 8

DAO: Von Spring unterstützte Persistenz Technologien Objekt- Orientierung Relationale Datenbank / SQL Technologie O/R Mapper z.b. JPA, Hibernate ibatis Spring JDBC Szenario Komplexe objektorientierte Logik Komplexe relationale Schemata Relationale Probleme Stored Procedures Wenige relationale Anfragen Optimierungen auf JDCB Ebene Warum DAOs? Ziel nicht so sehr die mögliche Migration der Persistenz-Technologie......sondern Mocking für Tests (DAO-Interfaces) Mit Spring kann man mehrere Technologien in der DAO-Schicht nutzen (90% O/R Mapper + 10% JDBC) Dabei notwendig: Durch Spring vereinheitlichten Exceptions und einheitliches Transaktionshandling 9

Service Objects / Business Facades Bieten fachliche motivierte Services an Steuern Transaktionen (z.b. über Annotationen) Auch Sicherheit kann hier ansetzen Technologie-unabhängig Domänen-Objekte Modellieren fachliche Konzepte Damit enthalten sie Daten...und Logik? Können Layer-übergreifend genutzt werden Werden nicht von Spring erzeugt 10

Layering Layering: Ein Beispiel als Power Point Architektur GUI Service Customer Service Order DAO Customer DAO Order 11

Wie werden Layer zu Software- Artefakten? Spring hat scheinbar nur Klassen als Komponenten Zu feingranular Also: Spring Konfigurationen Entweder durch mehrere Konfigurations-Dateien oder ApplicationContext-Hierarchien Macht Konfiguration auch übersichtlicher Layer mit Spring-Konfiguration: <import> <beans> <import resource="dao-customer.xml" /> <import resource="dao-order.xml" /> <import resource="services-customer.xml" /> <import resource="services-order.xml" /> <import resource="gui.xml" /> </beans> Allerdings können alle Spring-Beans alle anderen Spring- Beans sehen und das Layering verletzen. 12

Oder: Spring-OSGi OSGi definiert ein Komponentenmodell (Bundles) Bundles bieten Services an Können individuell gestartet und geupdatet werden Ziel des Spring-OSGi Projekts: OSGi als grobgranulare Komponenten-Infrastruktur über Spring Bundles können gestartet, gestoppt und geupdated werden...und damit auch individuelle Updates und Wartungen dieser grobgranularen Komponenten möglich Zur Zeit in 1.0M1 http://groups.google.com/group/spring-osgi http://www.springframework.org/osgi Nur Spring-Beans - Was ist mit dem Code? 13

Code: Service package order.service; public interface IOrderService { void order(shoppingcart shoppingcart) throws OrderException; Zwei Worte über Pointcuts Ausführung eine bestimmten Methode: execution(void Klasse.methode()) Mit Wildcards execution(* *.*()) Mit beliebigen Parametern execution(* *.*(..)) 14

Man kann Layer als Spring 2.0 AOP Pointcuts definieren... Pointcuts definieren, wo Code durch Aspekte erweitert werden soll @Pointcut("execution(* order.service.*.*(..))") public void orderservicelayer() { @Pointcut("execution(* order.dao.*.*(..))") public void orderdaolayer() { @Pointcut("execution(* *.service.*.*(..))") public void servicelayer() { @Pointcut("execution(* *.dao.*.*(..))") public void daolayer() { Power Point Architektur Runtime Exceptions werden im Service Layer gefangen und geloggt. 15

...und Software-Artefakte @Aspect public class ExceptionHandling { @AfterThrowing(throwing="ex", pointcut="systemarchitektur.servicelayer()") public void logruntimeexception(runtimeexception ex) { System.out.println("Something bad happend: "+ex); Power Point Architektur Die Benutzung von JDBC ist nur im DAO Layer erlaubt. Exceptions müssen geloggt werden. Aufrufe von printstacktrace() sind nicht zulässig. 16

...und Software Artefakt (AspectJ) @DeclareError(" (call(* java.sql.*.*(..)) && " + "!within(*.dao.*) ) ") public static final String JdbcOnlyInDAOs = "JDBC only in DAOs!"; @DeclareError("call(void " + "java.lang.throwable+.printstacktrace())") public static final String NoPrintStackTrace = "Please log exception!"; Das werden Compiler Fehler! 17

Nochmal: Schichtungen, Services... Service objects / Business Facades Transactional boundaries Domain objects DAO interfaces Spring web-tier context Independent of persistence API DAO implementations Use Spring DAO templates Domänen-Objekte enthalten Daten (und einige Logik) Services arbeiten auf den Domänen- Objekte RDBMS JDBC ORM tool Ein Beispiel... private IOrderService order; public void setorder(iorderservice order) { this.order = order; public void dosomething() { ShoppingCart shoppingcart = new ShoppingCart();... order.order(shoppingcart); 18

Ist das objekt-orientiert? Objekt-Orientierung Ein Objekt hat einen internen Zustand (aka Daten)...den es nicht nach außen veröffentlicht (Information Hiding) Der Zustand kann intern anders dargestellt werden Wichtiger als die Daten sind die Umgangsformen (Methoden) Z.B. das Bestellen eines ShoppingCarts 19

Wie es also eigentlich sein sollte... public void dosomething() { ShoppingCart shoppingcart = new ShoppingCart();... shoppingcart.order(); Services und Domänen-Objekte Domänen-Objekte enthalten vor allem Daten Services die Logik Zumindest Instanz-Übergreifende Logik ist da gut aufgehoben Aber Domänen-Modelle neigen dazu, keine Logik zu enthalten ( blutleer ) Anaemic Domain Model 20

Spring 2.0 hilft @Configurable: Dependency Injection bei Klassen, die per new erzeugt werden (z.b. Domänen-Objekte) @Configurable public class OrderableShoppingCart { private IOrderService orderservice; public void setorderservice(iorderservice o) { this.orderservice = o; public void order() throws OrderException { orderservice.order(this); Hilft das? Eine objektorientierte Facade für eine Service- Architektur Es sieht also nur anders aus Aber ist das ganze überhaupt ein Problem? Objekt-Orientierung ist kein Wert an sich...sondern nur ein Technik 21

Problem Normalerweise kann man von ShoppingCart erben...beispielsweise einen RebatedShoppingCart...der bei order() noch einen Rabatt abzieht Das kann man mit den Services nicht so elegant modellieren! Code für den RebatableShoppingCard mit Services public class OrderService implements IOrderService { public void order(orderableshoppingcart cart) throws OrderException { if (cart instanceof RebatedShoppingCart) { // Logik für den Rabatt instanceof ist ein Code-Smell 22

Objekt-orientierter Code für den RebatedShoppingCart package demo; public class RebatedShoppingCart extends ShoppingCart { public void order() throws OrderException { // Logik für den Rabatt super.order(); Aber......man kann die Service Schicht sehr einfach an Clients im Netz exportieren Wenn die Domänen-Objekte reine Datencontainer sind, können sie als Data Transfer Objects (DTOs) zum Client geschickt werden...der dann kein Java-Client sein muss...da er keine Logik aufrufen können muss Die Architektur ist leicht verteilbar Mit Spring ist die technische Implementierung trivial 23

Grafisch Exporter Service objects / Business Facades Transactional boundaries Domain objects DAO interfaces Spring web-tier context Independent of persistence API DAO implementations Use Spring DAO templates JDBC RDBMS ORM tool Reine Konfiguration <bean name="/orderservice" class=".httpinvokerserviceexporter"> <property name="service" ref="orderservice" /> <property name="serviceinterface" value="order.service.iorderservice" /> </bean> 24

Sind Domänen-Objekte DTOs? Domänen-Objekte sind die interne Datenrepräsentation...die man allen anderen zeigt Exhibitionismus statt Information Hiding... Clients müssen bei Änderungen der internen Datenstrukturen nachgezogen werden...oder die Datenmodellierung der Clients zieht sich in den Server Unschön Und überhaupt... Man sollte eigentlich Contract-First arbeiten Schnittstelle zwischen Client und Server definieren......bevor man die Implementierung des Clients und Servers vornimmt Eigentlich triviale Einsicht: Erst Schnittstelle definieren Man kann die Schnittstelle plattformneutral (z.b. WSDL) definieren Oder mit XML Schema (Spring Web Services) Dann braucht man aber eine Adapter-Schicht 25

Also: Das Anaemic Domain Model ist nicht objektorientiert......was aber an sich kein Problem ist. Es kann in verteilten Anwendungen als Data Transfer Objects dienen......was aber zu Exhibitionismus führt. No Silver Bullet. Nochmal grafisch 26

Fazit Fazit Spring bietet durch Dependency Injection ein feingranulares Komponentenmodell Darauf aufbauend entstehen Layer (Service, DAO) Auch Layer können mit Dependency Injection Software Artefakte werden Layer können mit AOP Semantik bekommen Das Vorgehen ist nicht zwangsläufig objektorientiert...aber auch nicht objektorientierte Entwürfe haben Vorteile 27

Interface21 Spring From the Source 28