OVal (Framework)

OVal (Framework)
OVal
OVal-banner.png
Maintainer Sebastian Thomschke, Holger Riegel
Aktuelle Version 1.70
(5. April 2011)
Betriebssystem plattformübergreifend
Programmier­sprache Java
Kategorie Validierungs- und Design by Contract-Framework
Lizenz Eclipse Public License
oval.sf.net

OVal ist ein Validierungs- und Design-by-Contract-Framework für die Programmiersprache Java. Es ermöglicht die Validierung von Attributen beliebiger Java-Objekte mittels vordefinierter oder selbst geschriebener Constraints. Darüber hinaus erlaubt es auch die Prüfung von Invarianten, Vor- und Nachbedingungen bei Methoden, sowie die Validierung von Argumenten von Methoden mittels AspectJ-Aspekten.

Diese Funktionalität und die Tatsache, dass mit OVal beliebige Objekte und nicht nur JavaBeans validiert werden können, hebt OVal von anderen Validierungs- und Design-by-Contract-Frameworks für Java ab.

Inhaltsverzeichnis

Funktionalität

Constraints können mittels Annotations (beispielsweise @NotNull, @MaxLength), POJOs oder XML deklariert werden. OVal bietet dafür mehr als 35 eingebaute Constraints an. Eigene Constraints können als Java-Klassen oder mittels Skript-Sprachen wie beispielsweise JavaScript, Groovy, Ruby, BeanShell, OGNL oder MVEL definiert werden. Diese Constraints können nicht nur bei Attributen definiert werden, sondern auch als Vor- oder Nachbedingungen von Methoden bzw. bei Argumenten von Methoden. Da dies in der Java-Syntax derzeit noch nicht vorgesehen ist, verwendet OVal dafür AspectJ-basierte Aspekte. Alternativ dazu können auch Spring-AOP- oder eigene AOP-Implementierungen verwendet werden.

Constraints werden entweder direkt beim Aufruf von Methoden geprüft (Vor- und Nachbedingungen, Constraints auf Argumente von Methoden, Invarianten) oder mittels validator.validate(Object) auf dem gesamten Objekt. Die Prüfung von Vor- und Nachbedingungen, sowie die Prüfung der Invarianten kann (beispielsweise aus Performancegründen) global an- und abgestellt werden. Darüber hinaus können Constraint-Profile verwendet werden um in unterschiedlichen Situationen unterschiedliche Constraints zu prüfen.

OVal selbst ist nur von der Java-Klassenbibliothek abhängig. Weitere Jars müssen nur bei Bedarf zugelinkt werden. (Beispielsweise AspectJ für Design by Contract, XStream, wenn OVal mittels XML konfiguriert wird oder JRuby wenn Constraints mittels Ruby definiert werden.)[1]

Beispiel

Deklaration
// Die Parameter der Konstruktoren und Setter-Methoden werden mittels AspectJ analog zu den Constraints der Attribute geprüft.
@net.sf.oval.guard.Guarded(applyFieldConstraintsToConstructors=true, applyFieldConstraintsToSetters=true) 
public class BusinessObject {
 
  // Das Attribut name darf weder null, noch leer sein und darf maximal 32 Zeichen lang sein.
  @NotNull @NotEmpty @Length(max=32)
  private String name;
 
  ...
 
  // Das Attribut mailingAddress muss entweder gleich der deliveryAddress oder der invoiceAddress sein.
  // Dies wird mittels eines Groovy-Skriptes geprüft.
  @Assert(expr = "_value ==_this.deliveryAddress || _value == _this.invoiceAddress", lang = "groovy")
  private String mailingAddress;
 
  ...
 
  // Der Parameter name wird automatisch analog wie das Attribut name geprüft,
  // da für die ganze Klasse "applyFieldConstraintsToSetters" gesetzt wurde.
  public void setName(String name) {
    this.name = name;
  }
 
  ...
 
  // Vor dem Aufruf der Methode wird mittels eines Groovy-Skriptes sichergestellt, dass this.amount nicht null ist und
  // amount2add größer als this.amount ist.
  @Pre(expr = "_this.amount!=null && amount2add>_this.amount", lang = "groovy")
  public void increase(BigDecimal amount2add) {
    amount = amount.add(amount2add); 
  }
}
Verwendung
  ...
  BusinessObject bo = new BusinessObject();
  bo.setName(""); // Wirft eine ConstraintsViolatedException weil der Parameter leer ist.
  ...
  bo.increase(null); // Wirft eine Exception, wenn this.amount noch nicht gesetzt wurde.
  ...
  List<ConstraintViolation> violations = validator.validate(bo); // Liefert die Liste aller Verletzungen.

Geschichte, Ausblick und Verwendung

OVal wurde von Sebastian Thomschke aus der Motivation heraus gestartet, ein Framework zu haben, welches Java um einfache Techniken zur Validierung und Design by Contract – basierend auf denselben Constraints – erweitert. Darüber hinaus wollte er ein Validierungs-Framework haben, welches auf Annotations basiert, damit bei der Refaktorisierung die Validierungen automatisch mit den Attributen und Methoden mitbewegt werden. Diese Features sind auch heute noch Alleinstellungsmerkmale von OVal.

Die erste Version von OVal (0.1alpha) wurde am 17. August 2005 veröffentlicht. Diese Version ermöglichte bereits die Validierung von Argumenten und Rückgabewerten mittels AspectJ. Die Version 1.0 wurde am 22. Juli 2007 veröffentlicht. Sie enthielt unter anderem eine Reihe an weiteren Constraints sowie Unterstützung für das Skripten von eigenen Constraints. Seit Version 1.50 kann OVal die Standard JSR303 Constraints interpretieren und entsprechend validieren. Seit Version 1.60 können Constraints für Methodenargumente bereits auf Interface-Ebene deklariert werden.

Die aktuelle Version 1.70 wurde am 5. April 2011 veröffentlicht. Sie brachte folgende Neuerungen:[2]

  • Einfachere Konfiguration über das Spring Framework
  • Verbessertes XSD Schema für XML basierte Konfiguration
  • Behebung kleinerer Fehler

Für zukünftige Versionen sind unter anderem folgende Features geplant:[3]

  • Constraints-Vererbung
  • Unterstützung für Spring 2.0 XSD Konfiguration
  • Vollständige Implementierung der Java Bean Validation (Java Specification Request 303)
  • Engere Integration mit Webframeworks wie JSF Frameworks, Struts, Apache Wicket etc.

Verschiedene Frameworks wie Struts 2 OVal Plug-in, Play! Framework oder Apache Cayenne annotations verwenden OVal.[4]

OVal wurde seit 2005 allein von der Sourceforge-Seite mehr als 10.000 Mal heruntergeladen.[5] Darüber hinaus ist OVal wie die meisten Open-Source-Java-Frameworks auch über Maven-Repositories wie ibiblio zu beziehen.

Alternativen

Validierungsframeworks
  • Apache Commons Validator - Apache-Commons-Projekt zur Bean-Validierung
  • Spring Modules Validator - Spring Modules (Erweiterung zu Spring) Projekt zur Bean-Validierung
  • JValidate - Beans Validation
  • JValidations - Object Validation
Mit Java 7 wird das sogenannte Bean Validation Framework (JSR 303) eingeführt, damit ist Bean-Validierung (nicht Objekt- und auch nicht Parameter-Validierung) ein Bestandteil von Java
Frameworks zur Umsetzung des Design-by-Contract-Prinzips in Java
Es gibt eine Reihe von Design-by-Contract-Frameworks für Java, keines davon scheint aber noch aktiv zu sein. Eine Auflistung aller Design-by-Contract-Frameworks für Java findet sich unter en:Design by contract#Languages with third-party support

Literatur

Weblinks

Einzelnachweise

  1. OVal Dependencies
  2. OVal Changelog
  3. OVal Roadmap
  4. OVal References
  5. OVal Download Statistics

Wikimedia Foundation.

Игры ⚽ Поможем решить контрольную работу

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Oval (Begriffsklärung) — Oval (vom latein. ovum, Ei) bezeichnet: eine geometrische Form, siehe Oval (Geometrie) eine Form von Rennstrecken im Motorsport, siehe Ovalkurs ein Cricket Stadions in London, siehe The Oval eine U Bahn Station in London, siehe Oval (London… …   Deutsch Wikipedia

  • pannier — panniered, adj. /pan yeuhr, ee euhr/, n. 1. a basket, esp. a large one, for carrying goods, provisions, etc. 2. a basket for carrying on a person s back, or one of a pair to be slung across the back of a beast of burden. 3. a similar type of bag …   Universalium

  • pannier — pan•nier or panier [[t]ˈpæn yər, i ər[/t]] n. 1) a basket, esp. a large one, for carrying goods, provisions, etc 2) one of a pair of baskets to be slung across the back of a pack animal 3) clo Also called pan′nier drape . (on a dress, skirt,… …   From formal English to slang

  • sound reception — Introduction       response of an organism s aural mechanism, the ear, to a specific form of energy change, or sound waves. Sound waves can be transmitted through gases, liquids, or solids, but the hearing function of each species is particularly …   Universalium

  • Open Vulnerability and Assessment Language — (OVAL) is an international, information security, community standard to promote open and publicly available security content, and to standardize the transfer of this information across the entire spectrum of security tools and services. OVAL… …   Wikipedia

  • painting — /payn ting/, n. 1. a picture or design executed in paints. 2. the act, art, or work of a person who paints. 3. the works of art painted in a particular manner, place, or period: a book on Flemish painting. 4. an instance of covering a surface… …   Universalium

  • Anthropology and Archaeology — ▪ 2009 Introduction Anthropology       Among the key developments in 2008 in the field of physical anthropology was the discovery by a large interdisciplinary team of Spanish and American scientists in northern Spain of a partial mandible (lower… …   Universalium

  • Mesopotamia, history of — ▪ historical region, Asia Introduction  history of the region in southwestern Asia where the world s earliest civilization developed. The name comes from a Greek word meaning “between rivers,” referring to the land between the Tigris and… …   Universalium

  • Dome — For other uses, see Dome (disambiguation). Domal redirects here. For domal consonants , see Retroflex consonant. Dome of St. Peter s Basilica in Rome crowned by a cupola. Designed primarily by Michelangelo, the dome was not completed until 1590 A …   Wikipedia

  • Dalek variants — …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”