| Auszug |
|---|
|
Nuclos Regelausführung selektiv ausschalten: ThreadLocal-Schalter, Endlosschleifen vermeiden, try/finally, UpdateRule deaktivieren, BusinessObjectProvider.update. |
Sprache: Deutsch · English
Regelausführung selektiv ausschalten
Endlosschleifen vermeiden: einzelne Regeln kontextbezogen über ThreadLocal-Schalter deaktivieren.
| Status |
|---|
| colour | Blue |
|---|
| title | Entwickler |
|---|
|
| Status |
|---|
| colour | Green |
|---|
| title | Stand: Jul 2026 |
|---|
|
| Status |
|---|
| colour | Grey |
|---|
| title | gilt fuer Nuclos 4.2026.x |
|---|
|
...
Definition
...
Wozu Regeln selektiv ausschalten?
Manchmal soll verhindert werden, dass bestimmte Regeln (oder Teile davon
...
Beispiel
...
) 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 |
|---|
|
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
...
public class MyUpdateRule implements UpdateRule |
...
...
...
...
ThreadLocal-Schalter, initial aktiv
public static final ThreadLocal<Boolean> ACTIVE = |
...
...
ThreadLocal.withInitial(() |
...
...
...
...
public void update(UpdateContext context) throws BusinessException { |
...
...
...
...
...
...
...
...
...
// ... 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
...
MyBusinessObject mbo = QueryProvider.getById(MyBusinessObject.class, id);
|
...
...
...
...
...
MyUpdateRule.ACTIVE.set(Boolean.FALSE); |
...
...
...
...
...
...
BusinessObjectProvider.update(mbo);
|
...
...
MyUpdateRule.ACTIVE.set(Boolean.TRUE); // immer wieder aktivieren!
} |
| Tipp |
|---|
| title | finally nicht vergessen |
|---|
|
Immer im finally-Block reaktivieren, damit der Schalter auch im Fehlerfall zuverlässig zurückgesetzt wird. |
Verwandte Seiten
Regeln (serverseitig)
Regelkontext.
Öffnen →
SaveFlags
Alternative beim Speichern.
Öffnen →
}
...
...
}
Es ist darauf zu achten, dass die Deaktivierung zuverlässig wieder zurückgesetzt wird (auch im Fehlerfall), daher sollte dies immer wie in diesem Beispiel im finally-Block geschehen. Die Aktivierung und Deaktivierung befindet sich in diesem Beispiel also in einem try-catch-finally-Block, um sicherzustellen, dass selbst nach Auftreten einer Exception in BusinessObjectProvider.update() die Regel anschliessend wieder aktiviert wird.