Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Bean Validation JSR-303 Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.

Ähnliche Präsentationen


Präsentation zum Thema: "Bean Validation JSR-303 Persistente Domänenmodelle mit JPA 2.0 und Bean Validation."—  Präsentation transkript:

1 Bean Validation JSR-303 Persistente Domänenmodelle mit JPA 2.0 und Bean Validation

2 Was sind Bedingungen? 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 2

3 Bedingungen in Java Wo müssen diese angewendet werden? 3

4 Ziel Weniger Code Ein Framework Auf allen Schichten anwendbar 4

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

6 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 6

7 Probleme 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 7

8 Die Lösung 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 8

9 Deklaration in JavaDoc public class Address { /** * cannot be null * and must be lower than 30 chars */ private String street1; Problem: wird nicht gelesen! 9

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

11 Deklaration in XML 30 street1 longer than 30 characters... 11

12 Deklaration mit Annotations public class message="longer than {max} characters") private String street1; private String street2;... } 12

13 13 JSR 303

14 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 14

15 15 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

16 16 Annotations Deklaratation Auf Ebene Bean, Feld oder Getter Eigenschaften Message Groups Spezifische Parameter Deklarationen werden vererbt Klasse Interface

17 Beispiel public class Employee private String = ) private long salary;... } 17

18 Kaskadierung public class message="longer than {max} characters") private private Country country; } public class private String name;... } 18

19 Eigene Bedingung definieren (1) Eine Anotation package jpa.validator; import java.lang.annotation.*; import javax.validation.Constraint; @Constraint(validatedBy = SalaryValidator.class) Salary { String message() default "Salary nicht erlaubt"; Class[] groups() default {}; Class [] payload() default {}; } 19

20 Eigende Bedingung definierien (2) Eine Implementation public class SalaryValidator implements ConstraintValidator public void initialize(Salary constraintAnnotation) { //no initialization needed public boolean isValid(Employee emp, ConstraintValidatorContext context) { if (emp == null) { return true; } if (!emp.getName().startsWith("Julius") && emp.getSalary() > ) { return false; } else { return true; } 20

21 Mögliche Bedingungen / / / / @Zugnummer... 21

22 Objekt(graph) validieren Bean validieren Set > cvs = validator.validate(car); ConstraintViolation enthält Der ungültige Wert Eine internationalisierte Meldung Das ungültige Bean Pfad zum Property welches den ungültigen Wert enthält 22

23 23 (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

24 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 = Default.class, sequence = {First.class, Second.class, Last.class}) 24

25 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 25

26 Wer verwendet JSR 303? 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… 26

27 JPA 2.0 und JSR statt statt statt bei numerischen bei für Collections und Arrays 27

28 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 28

29 29 Demo

30 30 Ausblick

31 Endziel Gemeinsame Deklaration von Bedingungen Keine Duplizierung Nahe am Code, nahe am Model Wiederverwendbar Über Layer Frameworks Andere JSRs Deklarativ Erweiterbar 31

32 Was fehlt noch? Erweiterung um Methoden Parameter zu validieren Item BigDecimal price)... 32

33 Weiter Infos JSR Referenz Implementation Hibernate Validator 33


Herunterladen ppt "Bean Validation JSR-303 Persistente Domänenmodelle mit JPA 2.0 und Bean Validation."

Ähnliche Präsentationen


Google-Anzeigen