EMF wird soviel Parsen wie irgend möglich, die Resource kann also auch invalide Objekte enthalten. Wenn beim einlesen ein Problem auftritt wird dieses Problem in der Resource vermerkt resource#getWarnings und resource#getErrors
Wenn du bei jeder Änderung validieren möchtest (würde ich mir gut überlegen, mit dem Modell zu arbeiten wird dann recht teuer...), dann ist ein Observer tatsächlich das Schlagwort.
Jedes EMF Objekt füllt eine komplette Observer Schnittstelle aus, du musst also nur noch einen Listener anhängen.
Grundsätzlich funktioniert das entweder über die AdapterFactory, oder direkt mit
[code=Java]eObject.eAdapters().add(new YourAdapter());[/code]
Wenn du einen einzigen Listener verwenden möchtest der über alle Änderungen des gesamten Objektbaums (oder eines Teilbaums) informiert wird, dann hilft dir der EContentAdapter. Dieser Adapter fügt sich rekursiv allen Kindern des EObjects hinzu und aggregiert damit alle Change Events.
Der EContentAdapter hat auch kein Problem damit wenn zur Laufzeit neue Kinder hinzukommen, oder Kinder entfernt werden, das funktioniert alles automatisch.