Simon Martinelli – simon@martinelli.ch JSR 303 Bean validation Simon Martinelli – simon@martinelli.ch.

Slides:



Advertisements
Ähnliche Präsentationen
Persistente Domänenmodelle mit JPA 2.0 und Bean Validation
Advertisements

Persistente Domänenmodelle mit JPA 2.0 und Bean Validation
Objektrelationales Mapping mit JPA Advanced Topics Jonas Bandi Simon Martinelli.
Einführung in die Informatik: Programmierung und Software-Entwicklung
Anwendungen des OODM auf die ADB / NDB
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
MySQL.
Verteilte Software - Java - Prozedurale Programmierung 1
Design by Contract with JML - Teil 2
Objektrelationales Mapping mit JPA Advanced Mapping Jonas Bandi Simon Martinelli.
Objektrelationales Mapping mit JPA Entity Mapping Jonas Bandi Simon Martinelli.
Objektrelationales Mapping mit JPA Getting Started Jonas Bandi Simon Martinelli.
Zusammenfassung / Ausblick Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
Objektrelationales Mapping mit JPA Ausblick Jonas Bandi Simon Martinelli.
Stefanie Selzer - Pascal Busch - Michael Kropiwoda
Binäre Bäume Richard Göbel.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Java: Grundlagen der Sprache
Welcome DTD. Document Type Definition Graphic Services/Everything you already know about presentations Was ist eine DTD? DTD ist eine Schemasprache.
M a r c – o l i v e r p a h l Die ObjektOrientierte Mühle Das Beispiel soll noch einmal das Konzept der Objektorientiertheit erläutern. Dabei werden außerdem.
IS: Datenbanken, © Till Hänisch 2000 CREATE TABLE Syntax: CREATE TABLE name ( coldef [, coldef] [, tableconstraints] ) coldef := name type [länge], [[NOT]NULL],
3.1.4 Leser/Schreiber-Ausschluß (reader/writer exclusion)
Objektorientierte Programmierung JDK-Klassenbibliothek
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
Proxy Pattern Vorlesung Design Patterns Sieglinde Heinrich
F açade P attern By Nicolas Lanquetin. Façade Pattern Structural Pattern Bietet ein gemeinsames Interface, anstatt vieler Interfaces eines Subsystems.
Modulare Programmierung
2.2 Definition eines Datenbankschemas (SQL-DDL)
Hänchen & Partner GmbH 1 Web-Anwendungen mit dem Jakarta Struts Framework 3.Juli 2003 Martin Burkhardt.
Ralf KüstersDagstuhl 2008/11/30 2 Ralf KüstersDagstuhl 2008/11/30 3.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Bild 1.1 Copyright © Alfred Mertins | Signaltheorie, 2. Auflage Vieweg+Teubner PLUS Zusatzmaterialien Vieweg+Teubner Verlag | Wiesbaden.
Persistente Domänenmodelle mit JPA 2.0 und Bean Validation
OO implementieren Teil IV Objekte erzeugen. © René ProbstModul 226IV - 2 Von der Klasse zum Objekt Plan Bau Objekt Klasse Instanzierung Objekt Das Objekt.
Java Performance Tuning Performance Tuning is similar to playing a strategy game but happily you usually get paid for it.
Einführung / Geschichte Einführung / Geschichte Motivation Motivation Beispiel Beispiel Architektur / Komponenten Architektur / Komponenten Konfiguration.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Projekt Alcatraz Java RMI / Spread - Gruppe A4.
© All rights reserved. Zend Technologies, Inc. Jan Burkl System Engineer, Zend Technologies Zend Server im Cluster.
Bean Validation JSR-303 Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
Architecture Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
Entity Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
Advanced Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
MVVM in Windows 8 und Windows Phone 8
Auslegung eines Vorschubantriebes
Parallel Programming Thread Synchronization. Heute 1. Lösung zu Assignment 2 2. Erstellen und Starten von Threads in Java 3. Das synchronized Schlüsselwort.
Kap 4-1OHO Kap. 4.2 Das Orbix CORBA-System Kurzer überblick zu der CORBA-Implementierung Orbix •Unser Fahrplan: •IDL Verwendungsbeispiel •Zoom-In: CORBA.
Getting Started Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
Algorithmen und Datenstrukturen Übungsmodul 6
© Bibliothek und Archiv der Österreichischen Akademie der Wissenschaften Katalogisierung in RAK / MAB2 Beispiele 1. Teil Lösungen Verbund für Bildung und.
Equals, Hashcode und CompareTo Micha Kessler
HORIZONT 1 XINFO ® Das IT - Informationssystem PL/1 Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
Template v5 October 12, Copyright © Infor. All Rights Reserved.
Projekt Systemintegration Datler, Kroiß, Sachs Systemintegration ILV, FL / MIC- 2 (SS2014)
JavaServer Faces Urs Frei. Inhalt JSF Funktionsweise Rückblick JSP Bestandteile von JSF So einfach ist die Anwendung (Beispiel) Eclipse im Einsatz (Entwicklungsumgebung)
PFH-Technologie-Forum TECHNOLOGIE - FORUM 28. März 2008.
2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2, XSP 7.2Struts, Turbine, Velocity 14.2Testat / Evaluation.
Torque in Turbine Team 3 Alexander Mittermair Michael Wesinger.
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
Analyseprodukte numerischer Modelle
2014 Januar 2014 So Mo Di Mi Do Fr Sa So
Jakarta Struts Quasi-Standard für JSP-basierte Entwicklung: Jakarta Struts Key Features von Struts: Implementierung des Action-Command-Pattern („Model.
 Präsentation transkript:

Simon Martinelli – simon@martinelli.ch JSR 303 Bean validation Simon Martinelli – simon@martinelli.ch

Agenda Was sind Bedingungen? JSR 303 Demo Ausblick Lösung heute Probleme heute JSR 303 Bedingungen deklarieren Bedingungen prüfen Bedingungen abfragen Demo Ausblick JSR 303 Bean Validation - Simon Martinelli 2009

Was sind Bedingungen? JSR 303 Bean Validation - Simon Martinelli 2009

Was sind Bedingungen? Anforderungen Nutzen Restriktionen an Bean, Feld oder Property z.B. Not Null, 0 - 10, gültige E-Mail-Adresse etc. Nutzen User über Fehler informieren Sicherstellen, dass eine Komponente richtig funktioniert Ungültige Daten in der Datenbank verhindern JSR 303 Bean Validation - Simon Martinelli 2009

Bedingungen in Java Wo müssen diese angewendet werden? JSR 303 Bean Validation - Simon Martinelli 2009

Ziel Weniger Code Ein Framework Auf allen Schichten anwendbar JSR 303 Bean Validation - Simon Martinelli 2009

Wo sind diese deklariert? Database Schema create table Document ( id bigint not null primary key, title varchar(30) not null, summary varchar(255), content varchar(255) ) Business Code if (document.getTitle() == null || document.getTitle().length() > 30) { throw new BusinessException( “Document title invalid”); } JSR 303 Bean Validation - Simon Martinelli 2009

Wo sind diese deklariert? Presentation level if (documentForm.getTitle() == null || documentForm.getTitle().length() > 30) { throw new BusinessException(“Document title invalid”); } Oder in XML des Web Frameworks Client side JavaScript JSF Struts Spring MVC JSR 303 Bean Validation - Simon Martinelli 2009

Probleme Duplizierung Überprüfung zur Laufzeit Mehrfache Deklaration der selben Bedingung Doppelter Code Risiko der Inkonsistenz Überprüfung zur Laufzeit Nicht alle Bedingungen können überall geprüft werden Unterschiedliche Semantik JSR 303 Bean Validation - Simon Martinelli 2009

Die Lösung Einheitliche Form Einheitliche Validierung Eine Sprache für alle Basierend auf dem Domain Modell (JavaBeans) Einheitliche Validierung Ein Framework Eine Implementierung Brücke zu anderen Technologien API um auf Bedingungen zuzugreifen JSR 303 Bean Validation - Simon Martinelli 2009

Deklaration in JavaDoc public class Address { /** * cannot be null * and must be lower than 30 chars */ private String street1; Problem: wird nicht gelesen! JSR 303 Bean Validation - Simon Martinelli 2009

Deklaration im Code public class Address { private String street1; private String street2; ... public void invariant() { if (street1 == null) throw new IllegalStateException( "street1 cannot be null"); if (street1.length() > 30) throw new IllegalStateException( "street1 must not be longer than 30 characters"); } ... JSR 303 Bean Validation - Simon Martinelli 2009

Deklaration in XML <constraints> <bean name="com.jboss.example.jsr303.Address"> <field name="street1"> <constraint class="org.jboss.constraints.NotNull"/> <constraint class="org.jboss.constraints.Length„> <param name="max">30</param> <param name="message"> street1 longer than 30 characters </param> </constraint> </field> ... </bean> </constraints> JSR 303 Bean Validation - Simon Martinelli 2009

Deklaration mit Annotations public class Address { @NotNull @Length(max=30, message="longer than {max} characters“) private String street1; private String street2; ... } JSR 303 Bean Validation - Simon Martinelli 2009

JSR 303 JSR 303 Bean Validation - Simon Martinelli 2009

JSR 303 Standardisierte Deklaration Standartisiertes Validation API Annotations (und XML) Eigene Bedingungen Standartisiertes Validation API Layer unabhängig I18n Extension points Standardisierte Metadaten API Integrationspunkt für andere JSRs und Frameworks Kann auch ausserhalb von Java verwendet werden JSR 303 Bean Validation - Simon Martinelli 2009

JSR 303 Mitglieder Apache Commons Validator Hibernate Validator JavaServer Faces (JSF) Oracle® ADF RIFE Spring Bean Validation Stripes XWork Validation Google Oracle Red Hat Sun andere JSR 303 Bean Validation - Simon Martinelli 2009

Annotations Deklaratation Eigenschaften Deklarationen werden vererbt Auf Ebene Bean, Feld oder Getter Eigenschaften Message Groups Spezifische Parameter Deklarationen werden vererbt Klasse Interface JSR 303 Bean Validation - Simon Martinelli 2009

Beispiel public class Employee { @NotNull private String name; @Max(value = 500000) private long salary; ... } JSR 303 Bean Validation - Simon Martinelli 2009

Kaskadierung @Valid public class Address { @NotNull @Length(max=30, message="longer than {max} characters“) private String street1; ... @NotNull @Valid private Country country; } public class Country { @NotNull @Length(max=30) private String name; ... } JSR 303 Bean Validation - Simon Martinelli 2009

Eigene Bedingung definieren Eine Annotation @ConstraintValidator(LengthConstraint.class) public @interface Length { String message() default "{beanckeck.length}"; String[] groups() default {}; int min() default 0; int max() default Integer.MAX_VALUE; } Eine Implementation public class LengthConstraint implements Constraint<Length> { public void initialize(Length annotation) { ... } public boolean isValid(Object value) { ... } } JSR 303 Bean Validation - Simon Martinelli 2009

Mögliche Bedingungen Vordefinierte Eigene, z.B. @Null / @NotNull @AssertTrue / @AssertFalse @Min / @Max / @Size / @Digits @Past / @Future @Patterns / @Pattern Eigene, z.B. @Email @CreditCard @Zugnummer ... JSR 303 Bean Validation - Simon Martinelli 2009

Objekt(graph) validieren Bean validieren Set<InvalidConstraint> errors = addressValidator.validate(address); InvalidConstraint enthält Der ungültige Wert Eine internationalisierte Meldung Das ungültige Bean Pfad zum Property welches den ungültigen Wert enthält JSR 303 Bean Validation - Simon Martinelli 2009

(Fehler)meldungen Können ausgelagert werden I18n Parameter können in Meldung integriert werden Wert muss kleiner sein als {min} Eigener MessageResolver Kann in Frameworks verwendet werden Kann kontextsensitive Daten ausgeben JSR 303 Bean Validation - Simon Martinelli 2009

Groups Interface Subset von Bedingungen Erlaubt partielle Validierung z.B. nur Bedingungen eines spezifischen UseCases Reihenfolge der Validierung kann bestimmt werden Abhängikeiten zu anderen Bedingungen Resourcen- oder zeitintensive Validierungen zu letzt @GroupSequence(name = Default.class, sequence = {First.class, Second.class, Last.class}) JSR 303 Bean Validation - Simon Martinelli 2009

Constraint Metatdata Request API Bietet Zugriff die Metadaten Z.B. Liste aller Bedingungen einer Nützlich für Schnittstellen zu anderen Technologien Persistence (DDL) Presentation layer (Javascript™ programming language) Tools JSR 303 Bean Validation - Simon Martinelli 2009

Wer verwendet JSR 303? Java Persistence API 2.0 Web Beans (JBoss Seam) Schema Generierung Neue Entity Validierung Web Beans (JBoss Seam) Presentation (deklarativ) Business (deklarativ) JSF 2.0 und AJAX Libraries RichFaces Ihr eigener Code! Und viele mehr… JSR 303 Bean Validation - Simon Martinelli 2009

JPA 2.0 und JSR 303 @NotNull statt @Column(nullable=false) @Size.max statt @Column.length @Digits statt @Column.precision/.scale @Min / @Max bei numerischen Columns @Future / @Past bei Datumstypen @Size für Collections und Arrays JSR 303 Bean Validation - Simon Martinelli 2009

XML META-INF/validation.xml Inhalt Definition der Bedingungen Deklaration der Bedingungen XML ergänzt UND überschreibt Annotations! Vorteil Keine Neukompilation bei Änderung der Bedingungen Trennung Code und Bedingungen JSR 303 Bean Validation - Simon Martinelli 2009

Demo JSR 303 Bean Validation - Simon Martinelli 2009

Ausblick JSR 303 Bean Validation - Simon Martinelli 2009

Endziel Gemeinsame Deklaration von Bedingungen Wiederverwendbar Keine Duplizierung Nahe am Code, nahe am Model Wiederverwendbar Über Layer Frameworks Andere JSRs Deklarativ Erweiterbar JSR 303 Bean Validation - Simon Martinelli 2009

Was fehlt noch? Erweiterung um Methoden Parameter zu validieren … public @NotNull String saveItem (@Valid @NotNull Item item, @Max(23) BigDecimal price) … JSR 303 Bean Validation - Simon Martinelli 2009

Weiter Infos JSR 303 Referenz Implementation http://jcp.org/en/jsr/detail?id=303 http://forum.hibernate.org/viewforum.php?f=26 Referenz Implementation Hibernate Validator http://validator.hibernate.org/ JSR 303 Bean Validation - Simon Martinelli 2009

Fragen? JSR 303 Bean Validation - Simon Martinelli 2009