Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.

...

Einführung einer ThreadLocal-Variable in der zu deaktivierenden Regel

Codeblock
languagejava
titleZu deaktivierende Regel
public class MyUpdateRule implements UpdateRule, StateChangeFinalRule {

    public static final ThreadLocal<Boolean> ACTIVE = new ThreadLocal<Boolean>() {
        protected Boolean initialValue() {return Boolean.TRUE;};
    };

    public void update(UpdateContext context) throws BusinessException { 
        if (ACTIVE.get()) {
            MyBusinessObject mbo = context.getBusinessObject(MyBusinessObject.class);
			...
        }
    }
}

ThreadLocal-Variablen sind lokal auf den Thread bezogen, dass heisst die Deaktivierung einer Regel bezieht sich immer nur auf den aktuellen Thread bzw. Benutzerkontext. Die Regel wird also nicht generell deaktiviert, wie z.B. über das Aktiv-Flag der Regel.

Deaktivierung aus aktualisierender (anderer) Regel heraus

...

Codeblock
languagejava
titleDeaktivierende Regel
 

Es ist unbedingt darauf zu achten, dass die Deaktivierung zuverlässig wieder zurückgesetzt wird (auch im Fehlerfall), daher sollte diese immer wie in diesem Beispiel im finally-Block geschehen.

...