[Prev][Next][Index][Thread]

Re: A tale of restarts



How about a quickie example of code to illustrate your technique?

- DM

Chris Double <chris@double.co.nz> wrote in message
8F202465chrisdoubleconz@202.27.184.33">news:8F202465chrisdoubleconz@202.27.184.33...
> This is a "I'm glad I used Dylan" story...
>
> I wrote a program to download a few thousand web pages containing
> information I needed, parse the pages for that information, and store
> it in an ODBC database for later querying, data mining, etc.
>
> The information on the pages had to be cross referenced with existing
> database tables to ensure validity of data, making sure foreign keys
> with code tables, dates, etc matched. I took this as a good opportunity
> to use Dylan restarts and exceptions.
>
> In the program I made sure exceptions were thrown whenever data from
> the web pages did not match expected information in the database. For
> each exception I created a restart protocol and made sure I had restart
> handlers to allow correcting of the exceptions. Some of the exceptions
> could be programatically fixed - so I had handlers that did this. An
> example was where a lookup on a person's name failed. I had a handler
> that tried soundex checking on the name to find a match and retry if
> there was one with the new name.
>
> There were a few cases where I couldn't have the program handle it or I
> didn't think it worth it, so I specialised 'restart-query' on the
> restart class to prompt for the correct information and made sure I had
> a restart handler where the exception was signalled.
>
> The program had been running for 10 hours and working fine. The
> database was being populated and the automatic correction of exceptions
> via the handlers worked well. Then up popped the Dylan exception error
> message (in Functional Developer) saying that an exception had occurred
> - no such record existed for a given date. Damn.
>
> But in the list of available restarts in the Functional Developer debug
> box, was the ability to choose a restart handler from those I'd made
> available. Nicely printed in the list was the restart handlers I had in
> scope:
>
>   - Enter data for missing record.
>   - Enter new date for current record.
>
> I chose 'enter data for missing record', and my 'restart-query' method
> was called prompting me to manually enter the missing data. I did this
> and the program continued, completing two hours later.
>
> The ability to create restart protocols and be able to choose them at
> exception time, and prompt the user for correct values saved me *heaps*
> of time. The ease of creating the restart mechanisms was a pleasant
> surprise too.
>
> Chris.
> --
> http://www.double.co.nz/dylan





Follow-Ups: References: