En kollega på jobbet kom idag och sa att han hade fått problem i en applikation som vi har. Plötsligt gav kod som tidigare fungerat ett konstigt felmeddelande.
Exception occurred calling method NotesAgent.runWithDocumentContext(lotus.domino.local.Document) null
Vad vi gör i applikationen är att från Server Side JavaScript (SSJS) kod kalla på en agent som i sin tur kör olika Java-kod beroende på de parametrar som skickas med med hjälp av dokument kontexten.
Efter mycket letande så upptäckte vi att problemet som uppstått var mitt fel. När jag hade lagt över kod i templaten som min kollegas testdatabas var baserad på så hade jag glömt ett design-element.
Det element som jag glömt att lägga med var en Web Service Consumer (skriven i Java) .
Agenten som genererade felet refererade till ett skriptbibliotek som i sin tur refererade till Web Service Consumern. Så vad som hände var ju att agenten misslyckades med att ladda de klasser som skulle funnits i Consumern.
Frågorna som inställer sig blir ju då hur kunde vi båda kompilera koden utan problem när refererad kod inte fanns med? Eftersom Java är ett språk med statiska typer så ska ju alla kontroller ske vid kompileringen. Det betyder ju att vi inte borde lyckats kompilera koden. Vi gjorde ju även "clean" på koden när designern rensar ut all kod innan den byggs på nytt (och man kan ju verkligen vad en "clean" verkligen gör). Mycket märkligt.
När vi lagt in den saknade koden så gick det ju alldeles utmärkt att köra den.
Och man hade ju också kunnat önskat sig ett tydligare felmeddelande i stil med: Failed to load all classes.
Inga kommentarer:
Skicka en kommentar