Business Exception

Een programma in de programmeertaal Java bestaat uit methodes die beloven een bepaalde type data terug te sturen. Er zijn echter uitzonderingen (exceptions) waarmee een methode onder die afspraak uit kan komen. Een business exception is een uitzondering die onderdeel is van de business logic van het programma. Dit lijkt me een antipatroon, namelijk een vorm van “exceptions as control flow”.

Afgelopen weken heb ik me bezig gehouden met een bug van de volgende vorm. Een gebruiker vult een formulier in op een website en drukt op verzenden. Hij krijgt dan een foutmelding en een verzoek om de ingevulde informatie te verbeteren. De foutmelding luidt echter “No bean specified”, terwijl het formulier geen vakje heeft waar de gebruiker een boon kan specificeren.

Java dankt haar naam aan Javaanse koffie. Daarom zijn in Java geprogrammeerde systemen nog wel eens opgebouwd uit bonen. Mijn afdeling is bezig met een upgrade van zo’n systeem. Daarbij is er dus een boon zoek geraakt. Terugvinden is geen probleem. Wel een probleem is dat de gebruiker een rare foutmelding te zien krijgt.

Achter de schermen gebeurt het volgende. Tijdens het verwerken van het formulier controleert het systeem of het formulier correct is ingevuld. Het systeem kijkt naar de inhoud van het formulier en naar de rechten van de gebruiker. Als er iets niet klopt maakt het systeem een business exception. De gebruiker krijgt vervolgens bericht dat hij de inhoud van het formulier moet aanpassen.

Soms kan het systeem het formulier niet verwerken omdat de servers of de verbindingen niet deugen. In dat geval maakt het systeem een technical exception. Na een technical exception krijgt de gebruiker bericht dat de service niet beschikbaar is. Het gaat hier immers om een probleem dat de gebruiker niet op kan lossen.

De rare foutmelding ontstaat doordat één onderdeel van het systeem technical exceptions–waaronder verloren bonen–ten onrechte markeert als business exceptions. Dat is slordigheid geweest, want het systeem kan het verschil tussen technical en business best zien. Het was echter beter geweest om de controle van het formulier helemaal niet met uitzonderingen te doen. Alle overgebleven uitzonderingen zijn dan automatisch technische uitzonderingen en verwarring is niet mogelijk.