Constraints enable the definition of limitations on property values such as NotNull etc. The constraints are implemented in two stages: custom and declerative. There are a set of "well known" constraints such as not null and number ranges, however constraints can be pluggable as well. The default behavior on constraint failure is to silently ignore such a failure, however this default can be overriden.