@Override
    public synchronized void finalize() {
        try {
            try {
                closeDocument();
            } catch (RemoteException ex) {
                /* Nothing */
            } catch (FileNotFoundException ex) {
                /* Nothing */
            } catch (MalformedURLException e) {
                /* Nothing */
            } catch (NotBoundException e) {
                /* Nothing */
            }
            if (hasDocument()) {
                try {
                    unlockDocument();
                } catch (RemoteException ex) {
                    Logger.getLogger(AbstractClientController.class.getName()).log(Level.SEVERE, null, ex);
                } catch (MalformedURLException ex) {
                    Logger.getLogger(AbstractClientController.class.getName()).log(Level.SEVERE, null, ex);
                } catch (NotBoundException ex) {
                    Logger.getLogger(AbstractClientController.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        } finally {
            try {
                super.finalize();
            } catch (Throwable ex) {
                Logger.getLogger(AbstractClientController.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }