JSR 303 BEAN VALIDATION Simon Martinelli – [email protected]

Click here to load reader

  • date post

    05-Apr-2015
  • Category

    Documents

  • view

    114
  • download

    4

Embed Size (px)

Transcript of JSR 303 BEAN VALIDATION Simon Martinelli – [email protected]

  • Folie 1
  • JSR 303 BEAN VALIDATION Simon Martinelli [email protected]
  • Folie 2
  • Agenda JSR 303 Bean Validation - Simon Martinelli 2009 2 Was sind Bedingungen? Lsung heute Probleme heute JSR 303 Bedingungen deklarieren Bedingungen prfen Bedingungen abfragen Demo Ausblick
  • Folie 3
  • Was sind Bedingungen? 3 JSR 303 Bean Validation - Simon Martinelli 2009
  • Folie 4
  • Was sind Bedingungen? JSR 303 Bean Validation - Simon Martinelli 2009 4 Anforderungen Restriktionen an Bean, Feld oder Property z.B. Not Null, 0 - 10, gltige E-Mail-Adresse etc. Nutzen User ber Fehler informieren Sicherstellen, dass eine Komponente richtig funktioniert Ungltige Daten in der Datenbank verhindern
  • Folie 5
  • Bedingungen in Java JSR 303 Bean Validation - Simon Martinelli 2009 5 Wo mssen diese angewendet werden?
  • Folie 6
  • Ziel JSR 303 Bean Validation - Simon Martinelli 2009 6 Weniger Code Ein Framework Auf allen Schichten anwendbar
  • Folie 7
  • Wo sind diese deklariert? JSR 303 Bean Validation - Simon Martinelli 2009 7 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); }
  • Folie 8
  • Wo sind diese deklariert? JSR 303 Bean Validation - Simon Martinelli 2009 8 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
  • Folie 9
  • Probleme JSR 303 Bean Validation - Simon Martinelli 2009 9 Duplizierung Mehrfache Deklaration der selben Bedingung Doppelter Code Risiko der Inkonsistenz berprfung zur Laufzeit Nicht alle Bedingungen knnen berall geprft werden Unterschiedliche Semantik
  • Folie 10
  • Die Lsung JSR 303 Bean Validation - Simon Martinelli 2009 10 Einheitliche Form Eine Sprache fr alle Basierend auf dem Domain Modell (JavaBeans) Einheitliche Validierung Ein Framework Eine Implementierung Brcke zu anderen Technologien API um auf Bedingungen zuzugreifen
  • Folie 11
  • Deklaration in JavaDoc JSR 303 Bean Validation - Simon Martinelli 2009 11 public class Address { /** * cannot be null * and must be lower than 30 chars */ private String street1; Problem: wird nicht gelesen!
  • Folie 12 30) throw new IllegalStateException( "street1 must not be longer than 30 characters"); }...">
  • Deklaration im Code JSR 303 Bean Validation - Simon Martinelli 2009 12 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"); }...
  • Folie 13
  • Deklaration in XML JSR 303 Bean Validation - Simon Martinelli 2009 13 30 street1 longer than 30 characters...
  • Folie 14
  • Folie 15
  • JSR 303 15 JSR 303 Bean Validation - Simon Martinelli 2009
  • Folie 16
  • JSR 303 JSR 303 Bean Validation - Simon Martinelli 2009 16 Standardisierte Deklaration Annotations (und XML) Eigene Bedingungen Standartisiertes Validation API Layer unabhngig I18n Extension points Standardisierte Metadaten API Integrationspunkt fr andere JSRs und Frameworks Kann auch ausserhalb von Java verwendet werden
  • Folie 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
  • Folie 18
  • Annotations JSR 303 Bean Validation - Simon Martinelli 2009 18 Deklaratation Auf Ebene Bean, Feld oder Getter Eigenschaften Message Groups Spezifische Parameter Deklarationen werden vererbt Klasse Interface
  • Folie 19
  • Beispiel JSR 303 Bean Validation - Simon Martinelli 2009 19 public class Employee { @NotNull private String name; @Max(value = 500000) private long salary;... }
  • Folie 20
  • Kaskadierung JSR 303 Bean Validation - Simon Martinelli 2009 20 @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;... }
  • Folie 21
  • Eigene Bedingung definieren JSR 303 Bean Validation - Simon Martinelli 2009 21 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 { public void initialize(Length annotation) {... } public boolean isValid(Object value) {... } }
  • Folie 22
  • Mgliche Bedingungen JSR 303 Bean Validation - Simon Martinelli 2009 22 Vordefinierte @Null / @NotNull @AssertTrue / @AssertFalse @Min / @Max / @Size / @Digits @Past / @Future @Patterns / @Pattern Eigene, z.B. @Email @CreditCard @Zugnummer...
  • Folie 23
  • Objekt(graph) validieren JSR 303 Bean Validation - Simon Martinelli 2009 23 Bean validieren Set errors = addressValidator.validate(address); InvalidConstraint enthlt Der ungltige Wert Eine internationalisierte Meldung Das ungltige Bean Pfad zum Property welches den ungltigen Wert enthlt
  • Folie 24
  • (Fehler)meldungen JSR 303 Bean Validation - Simon Martinelli 2009 24 Knnen ausgelagert werden I18n Parameter knnen in Meldung integriert werden Wert muss kleiner sein als {min} Eigener MessageResolver Kann in Frameworks verwendet werden Kann kontextsensitive Daten ausgeben
  • Folie 25
  • Groups JSR 303 Bean Validation - Simon Martinelli 2009 25 Interface Subset von Bedingungen Erlaubt partielle Validierung z.B. nur Bedingungen eines spezifischen UseCases Reihenfolge der Validierung kann bestimmt werden Abhngikeiten zu anderen Bedingungen Resourcen- oder zeitintensive Validierungen zu letzt @GroupSequence(name = Default.class, sequence = {First.class, Second.class, Last.class})
  • Folie 26
  • Constraint Metatdata Request API JSR 303 Bean Validation - Simon Martinelli 2009 26 Bietet Zugriff die Metadaten Z.B. Liste aller Bedingungen einer Ntzlich fr Schnittstellen zu anderen Technologien Persistence (DDL) Presentation layer (Javascript programming language) Tools
  • Folie 27
  • Wer verwendet JSR 303? JSR 303 Bean Validation - Simon Martinelli 2009 27 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
  • Folie 28
  • JPA 2.0 und JSR 303 JSR 303 Bean Validation - Simon Martinelli 2009 28 @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 fr Collections und Arrays
  • Folie 29
  • XML JSR 303 Bean Validation - Simon Martinelli 2009 29 META-INF/validation.xml Inhalt Definition der Bedingungen Deklaration der Bedingungen XML ergnzt UND berschreibt Annotations! Vorteil Keine Neukompilation bei nderung der Bedingungen Trennung Code und Bedingungen
  • Folie 30
  • Demo 30 JSR 303 Bean Validation - Simon Martinelli 2009
  • Folie 31
  • Ausblick 31 JSR 303 Bean Validation - Simon Martinelli 2009
  • Folie 32
  • Endziel JSR 303 Bean Validation - Simon Martinelli 2009 32 Gemeinsame Deklaration von Bedingungen Keine Duplizierung Nahe am Code, nahe am Model Wiederverwendbar ber Layer Frameworks Andere JSRs Deklarativ Erweiterbar
  • Folie 33
  • Was fehlt noch? JSR 303 Bean Validation - Simon Martinelli 2009 33 Erweiterung um Methoden Parameter zu validieren public @NotNull String saveItem (@Valid @NotNull Item item, @Max(23) BigDecimal price)
  • Folie 34
  • Weiter Infos JSR 303 Bean Validation - Simon Martinelli 2009 34 JSR 303 http://jcp.org/en/jsr/detail?id=303 http://forum.hibernate.org/viewforum.php?f=26 Referenz Implementation Hibernate Validator http://validator.hibernate.org/
  • Folie 35
  • Fragen? 35 JSR 303 Bean Validation - Simon Martinelli 2009