aidGer/issuetest — Issue #249: Probleme bzgl. Robustheit bei Verarbeitung von falschen Referenzen
Author: Philly
Created: 2012-01-24 12:31:07+00:00
State: open
Labels: Fehler, Prio-Normal

Beim Betrieb von 1.0-122 mit den migrierten Produktivdaten habe ich an zahlreichen Stellen Probleme gefunden, die sich in etwa wie folgt äussern:

[17:29:49] [FEIN] Neuer Tab "Übersicht" an die 0. Stelle hinzugefügt
[17:30:01] [FEIN] Neuer Tab "Verträge" an die 0. Stelle hinzugefügt
[17:30:01] [FEIN] 2. Tab gelöscht
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at de.aidger.model.models.Assistant.(Assistant.java:59)
at de.aidger.view.models.UIAssistant.(UIAssistant.java:32)
at de.aidger.view.models.EmploymentTableModel.convertModelToRow(EmploymentTableModel.java:89)
at de.aidger.view.models.TableModel.refresh(TableModel.java:123)
at de.aidger.view.models.TableModel.(TableModel.java:63)
at de.aidger.view.models.EmploymentTableModel.(EmploymentTableModel.java:35)
at de.aidger.view.tabs.ViewerTab.(ViewerTab.java:160)
at de.aidger.controller.actions.TaskPaneAction.getNewTab(TaskPaneAction.java:116)
...

Beim Blick in die Klasse Assistant lässt sich erahnen, was los sein könnte:

/**
* Initializes the Assistant class with the given assistant model.
*
* @param a
* the assistant model
*/
public Assistant(IAssistant a) {
this();
setId(a.getId());
setEmail(a.getEmail());
setFirstName(a.getFirstName());
setLastName(a.getLastName());
setQualification(a.getQualification());
setNew(false);
}

Irgendwo (in diesem Fall in der Beschäftigung) wird wohl ein Objekt (in diesem Fall eine Hilfskraft) referenziert, die aber über das AdoHive-Interface (in diesem Fall IAssistant) nicht geholt werden kann, und beim Zugriff über @getId()@ fliegt dann eine Exception, die in der GUI nicht abgefangen wird. Ich vermute, das ganze Objekt ist hier schon Null.

Diese Problematik tritt an vielen weiteren Stellen auf, so auch bei falschen Referenzen auf Kostenstellen oder Verträge. Die Frage die sich hier stellt ist eben, wie aidGer mit (potentiell fehlerhaften) Einträgen in der Datenbank umgehen sollte. Das derzeitige Verhalten (Exception fliegt in der Console, keine Reaktion im GUI) ist jedenfalls nicht sonderlich benutzerfreundlich.

Sehr Ihr eine Möglichkeit, wie die Fehlerbehandlung an dieser Stelle verbessert werden könnte, ohne zu viel defensive Programmierung zu betreiben?
__Reporter:__ Daniel Kulesz
__Assigned to:__ Sebastian Gepperth
__Begin:__ 2010-12-07
__Completed:__ 0