Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Simon Martinelli – simon@martinelli.ch JSR 303 Bean validation Simon Martinelli – simon@martinelli.ch."—  Präsentation transkript:

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

2 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

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

4 Was sind Bedingungen? Anforderungen Nutzen
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 JSR 303 Bean Validation - Simon Martinelli 2009

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

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

7 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

8 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

9 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

10 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

11 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

12 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

13 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

14 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

15 JSR 303 JSR 303 Bean Validation - Simon Martinelli 2009

16 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

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

18 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

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

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

21 Eigene Bedingung definieren
Eine Annotation @ConstraintValidator(LengthConstraint.class) 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

22 Mögliche Bedingungen Vordefinierte Eigene, z.B. @Null / @NotNull
@AssertTrue @Min @Past @Patterns Eigene, z.B. @ @CreditCard @Zugnummer ... JSR 303 Bean Validation - Simon Martinelli 2009

23 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

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

25 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

26 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

27 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

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

29 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

30 Demo JSR 303 Bean Validation - Simon Martinelli 2009

31 Ausblick JSR 303 Bean Validation - Simon Martinelli 2009

32 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

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

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

35 Fragen? JSR 303 Bean Validation - Simon Martinelli 2009


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

Ähnliche Präsentationen


Google-Anzeigen