public void run()
    {
        try
        {
            runImpl();
        }
        catch(Throwable e) {
            log.log(Level.WARNING, "Exception running runnable possibly from the client's code.  Check the stack trace", e);
            FireFailureOnClientThread r = new FireFailureOnClientThread(e);
            //put on event thread so client can't tie up our threads!!!
            executor.execute(r);
        }
    }