Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

JSR 303 BEAN VALIDATION Simon Martinelli –

Ähnliche Präsentationen


Präsentation zum Thema: "JSR 303 BEAN VALIDATION Simon Martinelli –"—  Präsentation transkript:

1 JSR 303 BEAN VALIDATION Simon Martinelli –

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

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

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

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

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

7 Wo sind diese deklariert? JSR 303 Bean Validation - Simon Martinelli 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); }

8 Wo sind diese deklariert? JSR 303 Bean Validation - Simon Martinelli 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

9 Probleme JSR 303 Bean Validation - Simon Martinelli Duplizierung 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

10 Die Lösung JSR 303 Bean Validation - Simon Martinelli Einheitliche Form 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

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

12 Deklaration im Code JSR 303 Bean Validation - Simon Martinelli 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"); }...

13 Deklaration in XML JSR 303 Bean Validation - Simon Martinelli street1 longer than 30 characters...

14 Deklaration mit Annotations JSR 303 Bean Validation - Simon Martinelli public class message="longer than {max} characters) private String street1; private String street2;... }

15 JSR JSR 303 Bean Validation - Simon Martinelli 2009

16 JSR 303 JSR 303 Bean Validation - Simon Martinelli Standardisierte Deklaration 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

17 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 17 JSR 303 Bean Validation - Simon Martinelli 2009

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

19 Beispiel JSR 303 Bean Validation - Simon Martinelli public class Employee private String = ) private long salary;... }

20 Kaskadierung JSR 303 Bean Validation - Simon Martinelli 2009 public class message="longer than {max} characters) private private Country country; } public class private String name;... }

21 Eigene Bedingung definieren JSR 303 Bean Validation - Simon Martinelli Eine 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 { public void initialize(Length annotation) {... } public boolean isValid(Object value) {... } }

22 Mögliche Bedingungen JSR 303 Bean Validation - Simon Martinelli / / / / @Zugnummer...

23 Objekt(graph) validieren JSR 303 Bean Validation - Simon Martinelli Bean validieren Set 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

24 (Fehler)meldungen JSR 303 Bean Validation - Simon Martinelli 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

25 Groups JSR 303 Bean Validation - Simon Martinelli 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 = Default.class, sequence = {First.class, Second.class, Last.class})

26 Constraint Metatdata Request API JSR 303 Bean Validation - Simon Martinelli 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

27 Wer verwendet JSR 303? JSR 303 Bean Validation - Simon Martinelli Java Persistence API 2.0 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…

28 JPA 2.0 und JSR 303 JSR 303 Bean Validation - Simon Martinelli 2009 statt statt statt bei numerischen bei für Collections und Arrays

29 XML JSR 303 Bean Validation - Simon Martinelli 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

30 Demo 30 JSR 303 Bean Validation - Simon Martinelli 2009

31 Ausblick 31 JSR 303 Bean Validation - Simon Martinelli 2009

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

33 Was fehlt noch? JSR 303 Bean Validation - Simon Martinelli Erweiterung um Methoden Parameter zu validieren String Item BigDecimal price) …

34 Weiter Infos JSR 303 Bean Validation - Simon Martinelli JSR Referenz Implementation Hibernate Validator

35 Fragen? 35 JSR 303 Bean Validation - Simon Martinelli 2009


Herunterladen ppt "JSR 303 BEAN VALIDATION Simon Martinelli –"

Ähnliche Präsentationen


Google-Anzeigen