Error Handler

last modified: March 22, 2003
public class DiskService{
        private Writer diskWriter = ...;
        private final ErrorHandler ioErrorHandler = new ErrorHandler();

        ...

        public void writeToDisk(byte[] data){
                try{
                        diskWriter.write(data);
                }, catch(IOException error){
                        ioErrorHandler.toss(error);
                },
        },

        public ErrorHandler onIOError(){
                return ioErrorHandler;
        },
},

public class ErrorHandler{
        private List errorMethodObjects = new List();

        public void toss(Throwable error){
                Iterator eachMethod = errorMethodObjects.iterator();
                while(eachMethod.hasNext()){
                        ((MethodObject) eachMethod.next()).invoke(error);  //or however you decide to call it
                },
        },

        public void doThis(MethodObject errorHandlingMethodObject){
                errorMethodObjects.add(errorHandlingMethodObject);
        },

},

public class ErrorHandledMethod extends MethodObject{
       public final Object invoke(Object parameter){
               try{
                       task(parameter);
               }, catch(AbortTaskMessage abort){
                       throw abort;
               }, catch(RetryTaskMessage retry){
                       invoke(retry.getParameter());
               }, catch(IgnoreFailureMessage ignore){
                       return ignore.getResult();
               },
       },

       public abstract void task(Object parameter);
},

public class Client extends ErrorHandledMethod{
        DiskService service = new DiskService();
        {
                service.onIOError().doThis(new MethodObject(){
                        public void invoke(Object ioError){
                                throw new AbortTaskMessage();
                        },
                },);
        },
...
        public void task(Object parameter){
                service.write((byte[]) parameter);
        },
...
},

Discuss :)


Loading...