Versionen im Vergleich

Schlüssel

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

Nuclos Regelausführung selektiv ausschalten: ThreadLocal-Schalter, Endlosschleifen vermeiden, try/finally, UpdateRule deaktivieren, BusinessObjectProvider.update.

globe with meridians Sprache: Deutsch · English

hammer and wrench Regelausführung selektiv ausschalten

Endlosschleifen vermeiden: einzelne Regeln kontextbezogen über ThreadLocal-Schalter deaktivieren.

Status
colourPurple
titleHow-to
Status
colourBlue
titleEntwickler
Status
colourGreen
titleStand: Jul 2026
Status
colourGrey
titlegilt fuer Nuclos 4.2026.x

Panel
bgColor#F4F5F7

Auf dieser Seite

Inhalt
maxLevel2
minLevel2

Wozu Regeln selektiv ausschalten?

Manchmal soll verhindert werden, dass bestimmte Regeln (oder Teile davon) laufen – typisch beim gezielten Aktualisieren einzelner Felder aus einer Regel heraus, um Endlosschleifen oder Performance-Probleme zu vermeiden. Umgesetzt wird das über regelübergreifende ThreadLocal-Variablen.

Warnung
titleVorsicht

Mit Bedacht einsetzen – die fachliche Logik der Regeln darf nicht ausgehebelt werden. Für einfache Fälle ggf. SaveFlags bevorzugen.

1. Schalter in der zu deaktivierenden Regel

Codeblock
languagejava
public class MyUpdateRule implements UpdateRule {
    // ThreadLocal-Schalter, initial aktiv
    public static final ThreadLocal<Boolean> ACTIVE =
        ThreadLocal.withInitial(() -> Boolean.TRUE);

    public void update(UpdateContext context) throws BusinessException {
        if (ACTIVE.get()) {
            // ... eigentliche Logik ...
        }
    }
}

ThreadLocal-Variablen wirken nur im aktuellen Thread/Benutzerkontext – die Regel wird also nicht generell deaktiviert (anders als das Aktiv-Flag der Regel).

2. Deaktivierung aus der aktualisierenden Regel

Codeblock
languagejava
MyBusinessObject mbo = QueryProvider.getById(MyBusinessObject.class, id);
mbo.setMyField(value);
try {
    MyUpdateRule.ACTIVE.set(Boolean.FALSE);   // Regel deaktivieren
    BusinessObjectProvider.update(mbo);
} finally {
    MyUpdateRule.ACTIVE.set(Boolean.TRUE);    // immer wieder aktivieren!
}
Tipp
titlefinally nicht vergessen

Immer im finally-Block reaktivieren, damit der Schalter auch im Fehlerfall zuverlässig zurückgesetzt wird.

Verwandte Seiten

open book Regeln (serverseitig)


Regelkontext.

Öffnen →

gear SaveFlags


Alternative beim Speichern.

Öffnen →