woensdag 23 april 2008

JSR 303 bij ISAAC


De afgelopen twee dagen heb ik samen met Jan Willem JSR 303 (Bean Validation) besproken. Tijdens de gesprekken heeft hij zijn ervaringen met deze specificatie in wording uit de immer spreekwoordelijke doeken gedaan. Aangezien ik zelf de afgelopen maanden meer in de frontend hoek heb gezeten (flex, dojo) was het een voor mij zeer interessant gesprek. JSR 303 is een poging om het valideren van JavaBeans te standaardiseren en bouwt voort op de gebleken 'best practices' van XWork en Hibernate validator.

De kracht van Bean Validation is dat de programmeur declaratief controles kan definiƫren die moeten worden uitgevoerd op de waarden van javabean properties. In plaats van dit soort controles te vangen in code, kan je deze logica met annotaties definiƫren. Met behulp van een standaard validatie framework worden de annotaties uitgelezen en gebruikt om de bean te controleren. Dus in plaats van bijvoorbeeld de volgende code in bijvoorbeeld PersonFacade.java te moeten schrijven:


if (person.getEmailAddress() == null) {
throw new ValidationException("person.email.isNull");
} else if (person.getEmailAddress().length() > 100) {
throw new ValidationException("person.email.tooLong");
} else if (!isValidEmailAddress(person.getEmailAddress()) {
throw new ValidationException("person.email.notValid");
} else {
person.makePersistent();
}


kan het volgende worden geschreven in de EJB Person.java


@NotNull
@Length(max=100)
@EmailAddress
private String emailAddress;


en in PersonFacade.java vervolgens:


person.validate();
person.makePersistent();


Alle "heavy lifting" vindt plaats achter de schermen, hoeft maar eenmalig te worden geschreven en kan eenvoudig als een component worden gebruikt binnen verschillende projecten.

Ik heb in de interne ISAAC wiki een artikel geschreven waarin ik onze aanpak uit de doeken doe. Daarnaast staat daar wat voorbeeld code en enkele sequence diagrammen waarin uit wordt gelegd hoe het valideren precies in zijn werk gaat.

Mocht je verder willen lezen, hier zijn enkele intressante artikelen over JSR 303 op Gavin King's blog: 1, 2 en 3