SlideShare una empresa de Scribd logo
1 de 36
17.12.2009
Metadatenbasierte Validierung

             JSR 303 and more...




17.12.2009
DI (FH) Gerhard.Petracek @irian.at
• JCP-Member
  (Bean Validation Expert Group)
• Apache MyFaces
     • Committer
     • PMC Member
     • Project Lead (ExtVal)
• Schulungen zu JEE (v.a. JSF)
• Autor verschiedener Fachartikel
• Vorträge (Software und Web-Engineering)
17.12.2009
Bean-Validation Ökosystem - 1
• Spec.-Lead: Emmanuel Bernard
• EG-Members
      • Internationale Firmen wie
             •   Sun
             •   Oracle
             •   Google
             •   uvm.
      • Einige Project Leads erfolgreicher
        Validierungsframeworks
             • Von Irian Solutions: Gerhard Petracek

17.12.2009
Bean-Validation Ökosystem - 2
• Implementierungen
      • Hibernate-Validator v4+ (RI)
      • Agimatec-validation (bald bei Apache SF)
      • OVal
• JSF Support lt. Spec. für JSF 2+
• Adapter für JSF
      • MyFaces ExtVal BV-Integration-Module
        (für JSF 1.x und JSF 2+)



17.12.2009
Hello Bean-Validation
• Beispiel
     public class Customer {
        @NotNull
        private String firstName;

             public String getFirstName() {
                return firstName;
             }

             public void setFirstName(
               String firstName) {
                  this.firstName = firstName;
             }
     }
17.12.2009
Standard Constraints - Übersicht
•    @AssertFalse / @AssertTrue
•    @DecimalMax / @DecimalMin
•    @Digits
•    @Future / @Past
•    @Max / @Min
•    @NotNull / @Null
•    @Pattern
•    @Size




17.12.2009
Feature Tour




17.12.2009
Eigene Constraints Definieren
• Erforderliche Bestandteile:
      • @Constraint (1-n Constraint-Validator(en))
      • Target
             •   FIELD
             •   METHOD
             •   TYPE
             •   ANNOTATION_TYPE (für Constraint composition)
  • Und natürlich: Retention RUNTIME
• Verpflichtende Attribute
  • message
  • groups
  • payload
17.12.2009
Constraint-Validatoren
• Implementierung von
     javax.validation.ConstraintValidator
     • initialize
     • isValid
• Ist auf ein Constraint und einen
  Ziel-Typ beschränkt (via Generics)
• Ein Constraint kann für mehrere
  Ziel-Typen verwendet werden
      • Bsp.: @Size für String, Array, Map, …


17.12.2009
Error Messages
• Message-Interpolator transformiert
  Nachrichten automatisch
      • Keys
      • Hardcoded
• Beispiel:
     @Size(min = 1, max = 10,
       message = "{firstName.lengthMessage}")

     Resource-Bundle:
     firstName.lengthMessage =
         Name must be between {min} and {max}
17.12.2009
Group-Validation / Partial-Validation
• Default:
  Constraint ist der Default-Gruppe zugeordnet
  (javax.validation.groups.Default)
• Gruppen sind Interfaces und somit typesafe
• Ermöglicht Validierung impliziter Gruppen
• Beispiel:
  @NotNull
  entspricht
  @NotNull(groups = Default.class)




17.12.2009
Reihenfolge bei der Validierung
• Default: keine Reihenfolge
• @GroupSequence ermöglicht die Angabe
  der Reihenfolge
• Rechenintensive Gruppen sollen am Ende
  validiert werden
• Validierung einer Gruppe findet statt, wenn
  die vorherige Gruppe fehlerfrei validiert
  wurde



17.12.2009
Multiple-Constraints
• Via Annotation-Element
  (Array vom Constraint-Typ)
• Beispiel:
  Zuordnung von Constraints zu Rollen
  (via Group-Validation)
     @Size.List({
        @Size(groups = Default.class
           min = 10, max = 20),
        @Size(groups = AdminGroup.class
           min = 1, max = 30)
     })

17.12.2009
Validation-Payload
• Subset von Validation-Parameter
  (siehe MyFaces ExtVal >= 3. Release)
• javax.validation.Payload
• Für Validation-Clients wie MyFaces ExtVal
  nutzbar – bspw.: Severity.Warn.class
• Beispiel:
     public class Severity {
       public static class Warn
         implements Payload {}

             public static interface Error
               extends Payload {}
     }
17.12.2009
Graph-Validation
• Wird ein Objekt validiert, dann werden
  referenzierte Objekte mit-validiert, wenn
  @Valid verwendet wird
• Auch Inhalte von Collections und Arrays
• Keine Validierung erfolgt, wenn Lazy-
  Properties noch nicht geladen wurden




17.12.2009
Class-Level Validation
• Constraint für e. Klasse/Interface
• Wird vererbt aber nicht überschrieben
• Bei der Validierung liegt das aktuelle
  Objekt im gesamten vor
• In JSF nur mit MyFaces ExtVal




17.12.2009
Constraint-Composition
• Mit Constraints annotierte Constraints
• Wiederverwendung von Constraints
• Violation-Message(s)
      • Default: Messages der einzelnen Constraints
      • Mit @ReportAsSingleViolation wird die
        Error-Message des Haupt-Constraints
        angezeigt




17.12.2009
[DEMO] JSR 303 in Action




17.12.2009
JSR 303 in Web-Applikationen




17.12.2009
Bean-Validation und JSF
• Änderungen in JSF 2.0 für JSR 303
      •      Default Validator
      •      Geändertes Verhalten v. required-Attribut
      •      ValidatorException mit mehreren Messages
      •      Verschiedene Konfigurationsparameter
• Spezieller Tag (validiert Default-Gruppe):
     <f:validateBean/>
• Beispiele:
      • Validierung der Default Group
      • Group-Validation
             <f:validateBean validationGroups =
               "at.irian.demo.validation.groups.Order"/>
17.12.2009
MyFaces Extensions Validator
    Ermöglicht die einfache Umsetzung von
    fortschrittlichen Validierungskonzepten für
    JSF-Applikationen auf Basis von
                              dynamischen
                              Metadaten.




17.12.2009
[DEMO] JSR 303 and JSF




17.12.2009
Bean-Validation & MyFaces ExtVal - 1
• MyFaces ExtVal bietet JSR 303
  Integration für alle JSF Versionen
• Integration als unabhängiges
  Validation-Module
• Group-Validation erfolgt via Annotation
      • Definition (norm.) auf Page-Bean-Level
      • Compile-time check + IDE Support
• Support für Model-Validation
• Sorted violation messages
• DI Support für Constraint-Validatoren
17.12.2009
Bean-Validation & MyFaces ExtVal - 2
• Severity Aware Validation
• Client-side validation in Kombination mit
  MyFaces Trinidad
• Group Storage
     (ermöglicht die Speicherung von Validation-
     Groups in unterschiedlichen Quellen)
• Validation Interception
• Validation Exception Intercepetion
• Einige Add-ons


17.12.2009
Weitere Details




17.12.2009
JSF-Request-Lifecycle - Validierung

            Faces-                   Apply                    Conversion
                          Restore                   Process
            request                   Request                      and
                          View                      Events
                                     Values                    Validation




                                                                                Process
                                                                                 events
   CLIENT




                                                                                Update
                                                                                Model
            Faces-
            response    Render      Process       Invoke      Process
                       Response      Events     Application   Events

                                                                  Validation / Conversion Errors
                                                                  Render Response




17.12.2009
Exkurs: ExtVal im JSF-Lifecycle

                     Apply       Conversion
      Restore                                  Update      Invoke       Render
                      Request         and
                                                         Application
      View                                     Model                   Response
                     Values       Validation




                                                 ExtVal
              ExtVal            Std. JSF
                                                 Cross-
             Validation         Validation
                                                Validation




17.12.2009
ExtVal-BV-Integration im JSF-Lifecycle

                Apply        Conversion
      Restore                              Update     Invoke       Render
                 Request          and
                                                    Application
      View                                 Model                  Response
                Values        Validation




                                                         ExtVal-BV
                ExtVal-BV          Std. JSF
                                                          Model
                Validation         Validation
                                                         Validation




17.12.2009
Group-Validation mit MyFaces ExtVal
• Via @BeanValidation
  (= typsichere Alternative zu f:validateBean)
• Nur bei Group-Validation (und Model Validation)
• Möglichkeiten
      •      Simple Angabe von Gruppen
      •      Einschränkung auf View-IDs
      •      Bedingungen via EL-Expression definieren
      •      Gruppen herausfiltern




17.12.2009
@BeanValidation Beispiele
• Group-Validation für alle Seiten, die dieses
  Page-Bean verwenden
     public class HelloWorldController {
        @BeanValidation(useGroups = User.class)
        private Person person = new Person();
        …
     }
• Group-Validation nach Seiten unterscheiden
     @BeanValidation.List({
        @BeanValidation(viewIds = "/page1.xhtml",
           useGroups = User.class),
        @BeanValidation(viewIds = "/page2.xhtml",
           useGroups = Admin.class)
     })
     public class HelloWorldController {
        private Person person = new Person();
        …
     }
17.12.2009
@ModelValidation
• Diese Validierung erfolgt nach der Phase
  „Update Model Values“
• Validiert wird
      • Base-Objekt der Property (Default)
      • Andere Objekte (via EL-Expression)
• Rollback via Add-on möglich
• Beispiel:
     @BeanValidation(modelValidation =
        @ModelValidation(isActive = true))




17.12.2009
@ModelValidation – Fehlermeldungen
• Fehler-Meldungen werden global angezeigt
  (inline ist optional möglich)
• Fehlermeldungen können bei Bedarf
  überschrieben werden




17.12.2009
ExtVal-Add-ons für JSR 303 Validation
•    Group-Validation via action-Methoden
•    Transactional model validation
•    Continue with warnings
•    Bypass BV
•    Tag als Alternative zu @BeanValidation
•    ...




17.12.2009
Q & A?




17.12.2009
Links
• JSR 303
       – Bean-Validation Specification
         http://jcp.org/en/jsr/detail?id=303
       – MyFaces ExtVal (BV-Integration)
         http://myfaces.apache.org/
         http://wiki.apache.org/myfaces/Extensions/Validator/

• Specification implementations
       – http://www.hibernate.org/412.html
       – http://oval.sourceforge.net
       – http://code.google.com/p/agimatec-validation/


• Trainings & Support (ExtVal und/oder BV)
       – http://www.irian.at/extval/

17.12.2009

Más contenido relacionado

La actualidad más candente

Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDISchlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDIadesso AG
 
DB-Schema-Evolution mit LiquiBase
DB-Schema-Evolution mit LiquiBaseDB-Schema-Evolution mit LiquiBase
DB-Schema-Evolution mit LiquiBasegedoplan
 
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScriptJSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScriptOPEN KNOWLEDGE GmbH
 
Java Persistence in Action – Einsatz von JPA 2.x in Java-EE-Anwendungen
Java Persistence in Action – Einsatz von JPA 2.x in Java-EE-AnwendungenJava Persistence in Action – Einsatz von JPA 2.x in Java-EE-Anwendungen
Java Persistence in Action – Einsatz von JPA 2.x in Java-EE-Anwendungengedoplan
 
Speeding up Java Persistence
Speeding up Java PersistenceSpeeding up Java Persistence
Speeding up Java Persistencegedoplan
 
WPF Dos n Don'ts - der WPF Rundumschlag
WPF Dos n Don'ts - der WPF RundumschlagWPF Dos n Don'ts - der WPF Rundumschlag
WPF Dos n Don'ts - der WPF RundumschlagHendrik Lösch
 
Web-GUIs mit Vaadin
 Web-GUIs mit Vaadin Web-GUIs mit Vaadin
Web-GUIs mit Vaadingedoplan
 
Grails im Überblick und in der Praxis
Grails im Überblick und in der PraxisGrails im Überblick und in der Praxis
Grails im Überblick und in der PraxisTobias Kraft
 
Wieviel Client braucht das Web?
Wieviel Client braucht das Web?Wieviel Client braucht das Web?
Wieviel Client braucht das Web?gedoplan
 
Objektvalidierung mit dem Bean Validation Api
Objektvalidierung mit dem Bean Validation ApiObjektvalidierung mit dem Bean Validation Api
Objektvalidierung mit dem Bean Validation Apigunnarmorling
 
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleich
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im VergleichWie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleich
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleichgedoplan
 
Datenbankzugriff mit der Java Persistence Api
Datenbankzugriff mit der Java Persistence ApiDatenbankzugriff mit der Java Persistence Api
Datenbankzugriff mit der Java Persistence ApiChristian Baranowski
 
Wieviel client braucht das web
Wieviel client braucht das webWieviel client braucht das web
Wieviel client braucht das webgedoplan
 
Introduction to JEE
Introduction to JEEIntroduction to JEE
Introduction to JEEguestc44b7b
 

La actualidad más candente (20)

Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDISchlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI
 
MVP mit dem Google Web Toolkit
MVP mit dem Google Web ToolkitMVP mit dem Google Web Toolkit
MVP mit dem Google Web Toolkit
 
JSF vs. GWT? JSF und GWT!
JSF vs. GWT? JSF und GWT!JSF vs. GWT? JSF und GWT!
JSF vs. GWT? JSF und GWT!
 
Eintauchen in MVP mit GWT
Eintauchen in MVP mit GWT Eintauchen in MVP mit GWT
Eintauchen in MVP mit GWT
 
DB-Schema-Evolution mit LiquiBase
DB-Schema-Evolution mit LiquiBaseDB-Schema-Evolution mit LiquiBase
DB-Schema-Evolution mit LiquiBase
 
Feature Flags mit Togglz
Feature Flags mit TogglzFeature Flags mit Togglz
Feature Flags mit Togglz
 
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScriptJSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
 
Backbase Intro
Backbase IntroBackbase Intro
Backbase Intro
 
Java Persistence in Action – Einsatz von JPA 2.x in Java-EE-Anwendungen
Java Persistence in Action – Einsatz von JPA 2.x in Java-EE-AnwendungenJava Persistence in Action – Einsatz von JPA 2.x in Java-EE-Anwendungen
Java Persistence in Action – Einsatz von JPA 2.x in Java-EE-Anwendungen
 
Speeding up Java Persistence
Speeding up Java PersistenceSpeeding up Java Persistence
Speeding up Java Persistence
 
WPF Dos n Don'ts - der WPF Rundumschlag
WPF Dos n Don'ts - der WPF RundumschlagWPF Dos n Don'ts - der WPF Rundumschlag
WPF Dos n Don'ts - der WPF Rundumschlag
 
Web-GUIs mit Vaadin
 Web-GUIs mit Vaadin Web-GUIs mit Vaadin
Web-GUIs mit Vaadin
 
Grails im Überblick und in der Praxis
Grails im Überblick und in der PraxisGrails im Überblick und in der Praxis
Grails im Überblick und in der Praxis
 
Datenbankoptimierung
DatenbankoptimierungDatenbankoptimierung
Datenbankoptimierung
 
Wieviel Client braucht das Web?
Wieviel Client braucht das Web?Wieviel Client braucht das Web?
Wieviel Client braucht das Web?
 
Objektvalidierung mit dem Bean Validation Api
Objektvalidierung mit dem Bean Validation ApiObjektvalidierung mit dem Bean Validation Api
Objektvalidierung mit dem Bean Validation Api
 
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleich
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im VergleichWie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleich
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleich
 
Datenbankzugriff mit der Java Persistence Api
Datenbankzugriff mit der Java Persistence ApiDatenbankzugriff mit der Java Persistence Api
Datenbankzugriff mit der Java Persistence Api
 
Wieviel client braucht das web
Wieviel client braucht das webWieviel client braucht das web
Wieviel client braucht das web
 
Introduction to JEE
Introduction to JEEIntroduction to JEE
Introduction to JEE
 

Destacado

Sterilization Standards Update: Strategies for Compliance
Sterilization Standards Update:  Strategies for ComplianceSterilization Standards Update:  Strategies for Compliance
Sterilization Standards Update: Strategies for ComplianceMedTech Review, LLC
 
Equipment validation
Equipment validationEquipment validation
Equipment validationGaurav Kr
 
CE-Zeichen für Medizinprodukte
CE-Zeichen für MedizinprodukteCE-Zeichen für Medizinprodukte
CE-Zeichen für MedizinprodukteChristian Johner
 
Mobile Medical Apps: In 5 Schritten zur "Medizinprodukte-Zertifizierung"
Mobile Medical Apps: In 5 Schritten zur "Medizinprodukte-Zertifizierung"Mobile Medical Apps: In 5 Schritten zur "Medizinprodukte-Zertifizierung"
Mobile Medical Apps: In 5 Schritten zur "Medizinprodukte-Zertifizierung"Christian Johner
 
Promotionsvorhaben "Liquid Democracy"
Promotionsvorhaben "Liquid Democracy"Promotionsvorhaben "Liquid Democracy"
Promotionsvorhaben "Liquid Democracy"Anja Adler
 
Menjaga Kesehatan Sepanjang Masa
Menjaga Kesehatan Sepanjang MasaMenjaga Kesehatan Sepanjang Masa
Menjaga Kesehatan Sepanjang Masasandyverden
 
Un temps d'avance : le Très haut débit
Un temps d'avance : le Très haut débitUn temps d'avance : le Très haut débit
Un temps d'avance : le Très haut débitparoles d'élus
 
Journal el watan du 27.06.2012
Journal   el watan du 27.06.2012Journal   el watan du 27.06.2012
Journal el watan du 27.06.2012marsed kadha
 
Net Hope - Communiqué de presse
Net Hope - Communiqué de presse Net Hope - Communiqué de presse
Net Hope - Communiqué de presse VoilaHaiti
 
RTB - Atelier 3 - moi directeur d'office, quelle responsabilité et quelle dél...
RTB - Atelier 3 - moi directeur d'office, quelle responsabilité et quelle dél...RTB - Atelier 3 - moi directeur d'office, quelle responsabilité et quelle dél...
RTB - Atelier 3 - moi directeur d'office, quelle responsabilité et quelle dél...R-Evolutions Touristiques de Brive
 
Saisonrückblick Social Media Recht re-publica 2012
Saisonrückblick Social Media Recht re-publica 2012Saisonrückblick Social Media Recht re-publica 2012
Saisonrückblick Social Media Recht re-publica 2012Henning Krieg
 
Restructuration du département de la pédiatrie de Gustave Roussy : Visite de ...
Restructuration du département de la pédiatrie de Gustave Roussy : Visite de ...Restructuration du département de la pédiatrie de Gustave Roussy : Visite de ...
Restructuration du département de la pédiatrie de Gustave Roussy : Visite de ...Gustave Roussy
 
Internet redes sociales y elecciones
Internet redes sociales y eleccionesInternet redes sociales y elecciones
Internet redes sociales y eleccionesDalilaserra95
 
Twittnite Standup 02.12.2009
Twittnite Standup 02.12.2009Twittnite Standup 02.12.2009
Twittnite Standup 02.12.2009Moritz Schott
 

Destacado (20)

"Medizinprodukte", Dr. Reinhard Berger, Institut Inspektionen, Medizinprodukt...
"Medizinprodukte", Dr. Reinhard Berger, Institut Inspektionen, Medizinprodukt..."Medizinprodukte", Dr. Reinhard Berger, Institut Inspektionen, Medizinprodukt...
"Medizinprodukte", Dr. Reinhard Berger, Institut Inspektionen, Medizinprodukt...
 
Sterilization Standards Update: Strategies for Compliance
Sterilization Standards Update:  Strategies for ComplianceSterilization Standards Update:  Strategies for Compliance
Sterilization Standards Update: Strategies for Compliance
 
Equipment validation
Equipment validationEquipment validation
Equipment validation
 
CE-Zeichen für Medizinprodukte
CE-Zeichen für MedizinprodukteCE-Zeichen für Medizinprodukte
CE-Zeichen für Medizinprodukte
 
Mobile Medical Apps: In 5 Schritten zur "Medizinprodukte-Zertifizierung"
Mobile Medical Apps: In 5 Schritten zur "Medizinprodukte-Zertifizierung"Mobile Medical Apps: In 5 Schritten zur "Medizinprodukte-Zertifizierung"
Mobile Medical Apps: In 5 Schritten zur "Medizinprodukte-Zertifizierung"
 
Promotionsvorhaben "Liquid Democracy"
Promotionsvorhaben "Liquid Democracy"Promotionsvorhaben "Liquid Democracy"
Promotionsvorhaben "Liquid Democracy"
 
Menjaga Kesehatan Sepanjang Masa
Menjaga Kesehatan Sepanjang MasaMenjaga Kesehatan Sepanjang Masa
Menjaga Kesehatan Sepanjang Masa
 
Un temps d'avance : le Très haut débit
Un temps d'avance : le Très haut débitUn temps d'avance : le Très haut débit
Un temps d'avance : le Très haut débit
 
Juristische gutachten #1
Juristische gutachten #1Juristische gutachten #1
Juristische gutachten #1
 
Journal el watan du 27.06.2012
Journal   el watan du 27.06.2012Journal   el watan du 27.06.2012
Journal el watan du 27.06.2012
 
Drh change agent
Drh change agent Drh change agent
Drh change agent
 
LAS DROGAS
LAS DROGASLAS DROGAS
LAS DROGAS
 
Net Hope - Communiqué de presse
Net Hope - Communiqué de presse Net Hope - Communiqué de presse
Net Hope - Communiqué de presse
 
105413
105413105413
105413
 
RTB - Atelier 3 - moi directeur d'office, quelle responsabilité et quelle dél...
RTB - Atelier 3 - moi directeur d'office, quelle responsabilité et quelle dél...RTB - Atelier 3 - moi directeur d'office, quelle responsabilité et quelle dél...
RTB - Atelier 3 - moi directeur d'office, quelle responsabilité et quelle dél...
 
Saisonrückblick Social Media Recht re-publica 2012
Saisonrückblick Social Media Recht re-publica 2012Saisonrückblick Social Media Recht re-publica 2012
Saisonrückblick Social Media Recht re-publica 2012
 
Restructuration du département de la pédiatrie de Gustave Roussy : Visite de ...
Restructuration du département de la pédiatrie de Gustave Roussy : Visite de ...Restructuration du département de la pédiatrie de Gustave Roussy : Visite de ...
Restructuration du département de la pédiatrie de Gustave Roussy : Visite de ...
 
Internet redes sociales y elecciones
Internet redes sociales y eleccionesInternet redes sociales y elecciones
Internet redes sociales y elecciones
 
Twittnite Standup 02.12.2009
Twittnite Standup 02.12.2009Twittnite Standup 02.12.2009
Twittnite Standup 02.12.2009
 
Nice
NiceNice
Nice
 

Similar a Metadatenbasierte Validierung

Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Ralf Sigmund
 
MicroProfile 2.x: Der alternative Standard
MicroProfile 2.x: Der alternative StandardMicroProfile 2.x: Der alternative Standard
MicroProfile 2.x: Der alternative StandardOPEN KNOWLEDGE GmbH
 
Feige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-UmfeldFeige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-Umfeldgedoplan
 
Bi testing media_factory_0.10
Bi testing media_factory_0.10Bi testing media_factory_0.10
Bi testing media_factory_0.10inovex GmbH
 
javaPersistenceInActionFeaturesJenseitsDesEntryLevels
javaPersistenceInActionFeaturesJenseitsDesEntryLevelsjavaPersistenceInActionFeaturesJenseitsDesEntryLevels
javaPersistenceInActionFeaturesJenseitsDesEntryLevelsgedoplan
 
Einführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungEinführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungChristian Baranowski
 
Feige sein
Feige seinFeige sein
Feige seingedoplan
 
Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsSoftwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsGFU Cyrus AG
 
Basta 2016 - Test- und Releaseumgebungen in der Cloud
Basta 2016 - Test- und Releaseumgebungen in der CloudBasta 2016 - Test- und Releaseumgebungen in der Cloud
Basta 2016 - Test- und Releaseumgebungen in der CloudMarc Müller
 
Speeding up Java Persistence
Speeding up Java PersistenceSpeeding up Java Persistence
Speeding up Java Persistencegedoplan
 
Testen im EE-Umfeld – Seien Sie feige!
Testen im EE-Umfeld – Seien Sie feige!Testen im EE-Umfeld – Seien Sie feige!
Testen im EE-Umfeld – Seien Sie feige!gedoplan
 
JSF Testing - Tools und Technics
JSF Testing - Tools und TechnicsJSF Testing - Tools und Technics
JSF Testing - Tools und Technicsadesso AG
 
Acceptance Testing - Automatisierte Web App Tests mit CasperJS
Acceptance Testing - Automatisierte Web App Tests mit CasperJSAcceptance Testing - Automatisierte Web App Tests mit CasperJS
Acceptance Testing - Automatisierte Web App Tests mit CasperJSBjörn Wilmsmann
 
Neue Features der Java EE 6
Neue Features der Java EE 6Neue Features der Java EE 6
Neue Features der Java EE 6GFU Cyrus AG
 
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...Marc Müller
 
Robustes Testen mit Selenium
Robustes Testen mit SeleniumRobustes Testen mit Selenium
Robustes Testen mit Seleniumx-celerate
 
Zeitnahe Reaktion auf Verordnungsänderungen mit Feature Toggles
Zeitnahe Reaktion auf Verordnungsänderungen mit Feature TogglesZeitnahe Reaktion auf Verordnungsänderungen mit Feature Toggles
Zeitnahe Reaktion auf Verordnungsänderungen mit Feature TogglesBATbern
 

Similar a Metadatenbasierte Validierung (20)

Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
 
MicroProfile 2.x: Der alternative Standard
MicroProfile 2.x: Der alternative StandardMicroProfile 2.x: Der alternative Standard
MicroProfile 2.x: Der alternative Standard
 
Feige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-UmfeldFeige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-Umfeld
 
Bi testing media_factory_0.10
Bi testing media_factory_0.10Bi testing media_factory_0.10
Bi testing media_factory_0.10
 
javaPersistenceInActionFeaturesJenseitsDesEntryLevels
javaPersistenceInActionFeaturesJenseitsDesEntryLevelsjavaPersistenceInActionFeaturesJenseitsDesEntryLevels
javaPersistenceInActionFeaturesJenseitsDesEntryLevels
 
Einführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungEinführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software Entwicklung
 
Feige sein
Feige seinFeige sein
Feige sein
 
Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsSoftwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration Tools
 
CDI
CDICDI
CDI
 
Basta 2016 - Test- und Releaseumgebungen in der Cloud
Basta 2016 - Test- und Releaseumgebungen in der CloudBasta 2016 - Test- und Releaseumgebungen in der Cloud
Basta 2016 - Test- und Releaseumgebungen in der Cloud
 
Speeding up Java Persistence
Speeding up Java PersistenceSpeeding up Java Persistence
Speeding up Java Persistence
 
Testen im EE-Umfeld – Seien Sie feige!
Testen im EE-Umfeld – Seien Sie feige!Testen im EE-Umfeld – Seien Sie feige!
Testen im EE-Umfeld – Seien Sie feige!
 
JSF Testing - Tools und Technics
JSF Testing - Tools und TechnicsJSF Testing - Tools und Technics
JSF Testing - Tools und Technics
 
Arquillian
ArquillianArquillian
Arquillian
 
Acceptance Testing - Automatisierte Web App Tests mit CasperJS
Acceptance Testing - Automatisierte Web App Tests mit CasperJSAcceptance Testing - Automatisierte Web App Tests mit CasperJS
Acceptance Testing - Automatisierte Web App Tests mit CasperJS
 
Neue Features der Java EE 6
Neue Features der Java EE 6Neue Features der Java EE 6
Neue Features der Java EE 6
 
A/B Testing mit Node.js
A/B Testing mit Node.jsA/B Testing mit Node.js
A/B Testing mit Node.js
 
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
 
Robustes Testen mit Selenium
Robustes Testen mit SeleniumRobustes Testen mit Selenium
Robustes Testen mit Selenium
 
Zeitnahe Reaktion auf Verordnungsänderungen mit Feature Toggles
Zeitnahe Reaktion auf Verordnungsänderungen mit Feature TogglesZeitnahe Reaktion auf Verordnungsänderungen mit Feature Toggles
Zeitnahe Reaktion auf Verordnungsänderungen mit Feature Toggles
 

Más de os890

Apache DeltaSpike
Apache DeltaSpikeApache DeltaSpike
Apache DeltaSpikeos890
 
Flexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpikeFlexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpikeos890
 
MyFaces Universe at ApacheCon
MyFaces Universe at ApacheConMyFaces Universe at ApacheCon
MyFaces Universe at ApacheConos890
 
OpenWebBeans and DeltaSpike at ApacheCon
OpenWebBeans and DeltaSpike at ApacheConOpenWebBeans and DeltaSpike at ApacheCon
OpenWebBeans and DeltaSpike at ApacheConos890
 
MyFaces CODI and JBoss Seam3 become Apache DeltaSpike
MyFaces CODI and JBoss Seam3 become Apache DeltaSpikeMyFaces CODI and JBoss Seam3 become Apache DeltaSpike
MyFaces CODI and JBoss Seam3 become Apache DeltaSpikeos890
 
Make JSF more type-safe with CDI and MyFaces CODI
Make JSF more type-safe with CDI and MyFaces CODIMake JSF more type-safe with CDI and MyFaces CODI
Make JSF more type-safe with CDI and MyFaces CODIos890
 
MyFaces CODI Conversations
MyFaces CODI ConversationsMyFaces CODI Conversations
MyFaces CODI Conversationsos890
 
MyFaces Extensions Validator r4 news
MyFaces Extensions Validator r4 newsMyFaces Extensions Validator r4 news
MyFaces Extensions Validator r4 newsos890
 
MyFaces CODI v0.9.0 News
MyFaces CODI v0.9.0 NewsMyFaces CODI v0.9.0 News
MyFaces CODI v0.9.0 Newsos890
 
MyFaces Extensions Validator r3 News
MyFaces Extensions Validator r3 NewsMyFaces Extensions Validator r3 News
MyFaces Extensions Validator r3 Newsos890
 
MyFaces Extensions Validator 1.x.2 News
MyFaces Extensions Validator 1.x.2 NewsMyFaces Extensions Validator 1.x.2 News
MyFaces Extensions Validator 1.x.2 Newsos890
 
MyFaces Extensions Validator Part 1 of 3
MyFaces Extensions Validator Part 1 of 3MyFaces Extensions Validator Part 1 of 3
MyFaces Extensions Validator Part 1 of 3os890
 

Más de os890 (12)

Apache DeltaSpike
Apache DeltaSpikeApache DeltaSpike
Apache DeltaSpike
 
Flexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpikeFlexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpike
 
MyFaces Universe at ApacheCon
MyFaces Universe at ApacheConMyFaces Universe at ApacheCon
MyFaces Universe at ApacheCon
 
OpenWebBeans and DeltaSpike at ApacheCon
OpenWebBeans and DeltaSpike at ApacheConOpenWebBeans and DeltaSpike at ApacheCon
OpenWebBeans and DeltaSpike at ApacheCon
 
MyFaces CODI and JBoss Seam3 become Apache DeltaSpike
MyFaces CODI and JBoss Seam3 become Apache DeltaSpikeMyFaces CODI and JBoss Seam3 become Apache DeltaSpike
MyFaces CODI and JBoss Seam3 become Apache DeltaSpike
 
Make JSF more type-safe with CDI and MyFaces CODI
Make JSF more type-safe with CDI and MyFaces CODIMake JSF more type-safe with CDI and MyFaces CODI
Make JSF more type-safe with CDI and MyFaces CODI
 
MyFaces CODI Conversations
MyFaces CODI ConversationsMyFaces CODI Conversations
MyFaces CODI Conversations
 
MyFaces Extensions Validator r4 news
MyFaces Extensions Validator r4 newsMyFaces Extensions Validator r4 news
MyFaces Extensions Validator r4 news
 
MyFaces CODI v0.9.0 News
MyFaces CODI v0.9.0 NewsMyFaces CODI v0.9.0 News
MyFaces CODI v0.9.0 News
 
MyFaces Extensions Validator r3 News
MyFaces Extensions Validator r3 NewsMyFaces Extensions Validator r3 News
MyFaces Extensions Validator r3 News
 
MyFaces Extensions Validator 1.x.2 News
MyFaces Extensions Validator 1.x.2 NewsMyFaces Extensions Validator 1.x.2 News
MyFaces Extensions Validator 1.x.2 News
 
MyFaces Extensions Validator Part 1 of 3
MyFaces Extensions Validator Part 1 of 3MyFaces Extensions Validator Part 1 of 3
MyFaces Extensions Validator Part 1 of 3
 

Metadatenbasierte Validierung

  • 2. Metadatenbasierte Validierung JSR 303 and more... 17.12.2009
  • 3. DI (FH) Gerhard.Petracek @irian.at • JCP-Member (Bean Validation Expert Group) • Apache MyFaces • Committer • PMC Member • Project Lead (ExtVal) • Schulungen zu JEE (v.a. JSF) • Autor verschiedener Fachartikel • Vorträge (Software und Web-Engineering) 17.12.2009
  • 4. Bean-Validation Ökosystem - 1 • Spec.-Lead: Emmanuel Bernard • EG-Members • Internationale Firmen wie • Sun • Oracle • Google • uvm. • Einige Project Leads erfolgreicher Validierungsframeworks • Von Irian Solutions: Gerhard Petracek 17.12.2009
  • 5. Bean-Validation Ökosystem - 2 • Implementierungen • Hibernate-Validator v4+ (RI) • Agimatec-validation (bald bei Apache SF) • OVal • JSF Support lt. Spec. für JSF 2+ • Adapter für JSF • MyFaces ExtVal BV-Integration-Module (für JSF 1.x und JSF 2+) 17.12.2009
  • 6. Hello Bean-Validation • Beispiel public class Customer { @NotNull private String firstName; public String getFirstName() { return firstName; } public void setFirstName( String firstName) { this.firstName = firstName; } } 17.12.2009
  • 7. Standard Constraints - Übersicht • @AssertFalse / @AssertTrue • @DecimalMax / @DecimalMin • @Digits • @Future / @Past • @Max / @Min • @NotNull / @Null • @Pattern • @Size 17.12.2009
  • 9. Eigene Constraints Definieren • Erforderliche Bestandteile: • @Constraint (1-n Constraint-Validator(en)) • Target • FIELD • METHOD • TYPE • ANNOTATION_TYPE (für Constraint composition) • Und natürlich: Retention RUNTIME • Verpflichtende Attribute • message • groups • payload 17.12.2009
  • 10. Constraint-Validatoren • Implementierung von javax.validation.ConstraintValidator • initialize • isValid • Ist auf ein Constraint und einen Ziel-Typ beschränkt (via Generics) • Ein Constraint kann für mehrere Ziel-Typen verwendet werden • Bsp.: @Size für String, Array, Map, … 17.12.2009
  • 11. Error Messages • Message-Interpolator transformiert Nachrichten automatisch • Keys • Hardcoded • Beispiel: @Size(min = 1, max = 10, message = "{firstName.lengthMessage}") Resource-Bundle: firstName.lengthMessage = Name must be between {min} and {max} 17.12.2009
  • 12. Group-Validation / Partial-Validation • Default: Constraint ist der Default-Gruppe zugeordnet (javax.validation.groups.Default) • Gruppen sind Interfaces und somit typesafe • Ermöglicht Validierung impliziter Gruppen • Beispiel: @NotNull entspricht @NotNull(groups = Default.class) 17.12.2009
  • 13. Reihenfolge bei der Validierung • Default: keine Reihenfolge • @GroupSequence ermöglicht die Angabe der Reihenfolge • Rechenintensive Gruppen sollen am Ende validiert werden • Validierung einer Gruppe findet statt, wenn die vorherige Gruppe fehlerfrei validiert wurde 17.12.2009
  • 14. Multiple-Constraints • Via Annotation-Element (Array vom Constraint-Typ) • Beispiel: Zuordnung von Constraints zu Rollen (via Group-Validation) @Size.List({ @Size(groups = Default.class min = 10, max = 20), @Size(groups = AdminGroup.class min = 1, max = 30) }) 17.12.2009
  • 15. Validation-Payload • Subset von Validation-Parameter (siehe MyFaces ExtVal >= 3. Release) • javax.validation.Payload • Für Validation-Clients wie MyFaces ExtVal nutzbar – bspw.: Severity.Warn.class • Beispiel: public class Severity { public static class Warn implements Payload {} public static interface Error extends Payload {} } 17.12.2009
  • 16. Graph-Validation • Wird ein Objekt validiert, dann werden referenzierte Objekte mit-validiert, wenn @Valid verwendet wird • Auch Inhalte von Collections und Arrays • Keine Validierung erfolgt, wenn Lazy- Properties noch nicht geladen wurden 17.12.2009
  • 17. Class-Level Validation • Constraint für e. Klasse/Interface • Wird vererbt aber nicht überschrieben • Bei der Validierung liegt das aktuelle Objekt im gesamten vor • In JSF nur mit MyFaces ExtVal 17.12.2009
  • 18. Constraint-Composition • Mit Constraints annotierte Constraints • Wiederverwendung von Constraints • Violation-Message(s) • Default: Messages der einzelnen Constraints • Mit @ReportAsSingleViolation wird die Error-Message des Haupt-Constraints angezeigt 17.12.2009
  • 19. [DEMO] JSR 303 in Action 17.12.2009
  • 20. JSR 303 in Web-Applikationen 17.12.2009
  • 21. Bean-Validation und JSF • Änderungen in JSF 2.0 für JSR 303 • Default Validator • Geändertes Verhalten v. required-Attribut • ValidatorException mit mehreren Messages • Verschiedene Konfigurationsparameter • Spezieller Tag (validiert Default-Gruppe): <f:validateBean/> • Beispiele: • Validierung der Default Group • Group-Validation <f:validateBean validationGroups = "at.irian.demo.validation.groups.Order"/> 17.12.2009
  • 22. MyFaces Extensions Validator Ermöglicht die einfache Umsetzung von fortschrittlichen Validierungskonzepten für JSF-Applikationen auf Basis von dynamischen Metadaten. 17.12.2009
  • 23. [DEMO] JSR 303 and JSF 17.12.2009
  • 24. Bean-Validation & MyFaces ExtVal - 1 • MyFaces ExtVal bietet JSR 303 Integration für alle JSF Versionen • Integration als unabhängiges Validation-Module • Group-Validation erfolgt via Annotation • Definition (norm.) auf Page-Bean-Level • Compile-time check + IDE Support • Support für Model-Validation • Sorted violation messages • DI Support für Constraint-Validatoren 17.12.2009
  • 25. Bean-Validation & MyFaces ExtVal - 2 • Severity Aware Validation • Client-side validation in Kombination mit MyFaces Trinidad • Group Storage (ermöglicht die Speicherung von Validation- Groups in unterschiedlichen Quellen) • Validation Interception • Validation Exception Intercepetion • Einige Add-ons 17.12.2009
  • 27. JSF-Request-Lifecycle - Validierung Faces- Apply Conversion Restore Process request Request and View Events Values Validation Process events CLIENT Update Model Faces- response Render Process Invoke Process Response Events Application Events Validation / Conversion Errors Render Response 17.12.2009
  • 28. Exkurs: ExtVal im JSF-Lifecycle Apply Conversion Restore Update Invoke Render Request and Application View Model Response Values Validation ExtVal ExtVal Std. JSF Cross- Validation Validation Validation 17.12.2009
  • 29. ExtVal-BV-Integration im JSF-Lifecycle Apply Conversion Restore Update Invoke Render Request and Application View Model Response Values Validation ExtVal-BV ExtVal-BV Std. JSF Model Validation Validation Validation 17.12.2009
  • 30. Group-Validation mit MyFaces ExtVal • Via @BeanValidation (= typsichere Alternative zu f:validateBean) • Nur bei Group-Validation (und Model Validation) • Möglichkeiten • Simple Angabe von Gruppen • Einschränkung auf View-IDs • Bedingungen via EL-Expression definieren • Gruppen herausfiltern 17.12.2009
  • 31. @BeanValidation Beispiele • Group-Validation für alle Seiten, die dieses Page-Bean verwenden public class HelloWorldController { @BeanValidation(useGroups = User.class) private Person person = new Person(); … } • Group-Validation nach Seiten unterscheiden @BeanValidation.List({ @BeanValidation(viewIds = "/page1.xhtml", useGroups = User.class), @BeanValidation(viewIds = "/page2.xhtml", useGroups = Admin.class) }) public class HelloWorldController { private Person person = new Person(); … } 17.12.2009
  • 32. @ModelValidation • Diese Validierung erfolgt nach der Phase „Update Model Values“ • Validiert wird • Base-Objekt der Property (Default) • Andere Objekte (via EL-Expression) • Rollback via Add-on möglich • Beispiel: @BeanValidation(modelValidation = @ModelValidation(isActive = true)) 17.12.2009
  • 33. @ModelValidation – Fehlermeldungen • Fehler-Meldungen werden global angezeigt (inline ist optional möglich) • Fehlermeldungen können bei Bedarf überschrieben werden 17.12.2009
  • 34. ExtVal-Add-ons für JSR 303 Validation • Group-Validation via action-Methoden • Transactional model validation • Continue with warnings • Bypass BV • Tag als Alternative zu @BeanValidation • ... 17.12.2009
  • 36. Links • JSR 303 – Bean-Validation Specification http://jcp.org/en/jsr/detail?id=303 – MyFaces ExtVal (BV-Integration) http://myfaces.apache.org/ http://wiki.apache.org/myfaces/Extensions/Validator/ • Specification implementations – http://www.hibernate.org/412.html – http://oval.sourceforge.net – http://code.google.com/p/agimatec-validation/ • Trainings & Support (ExtVal und/oder BV) – http://www.irian.at/extval/ 17.12.2009