Seitenhistorie
...
Einführung einer ThreadLocal-Variable in der zu deaktivierenden Regel
Codeblock | ||||
---|---|---|---|---|
| ||||
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 | ||||
---|---|---|---|---|
| ||||
|
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.
...
Überblick
Inhalte