public boolean areValid() {
        try {
            if (logger.isTraceEnabled()) {
                logger.trace("Validating server configuration...");
            }

            String address = Settings.INSTANCE.getValueFor(Settings.SERVER_ADDRESS);
            Pattern ipPattern = Pattern.compile("^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
                    + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
                    + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
                    + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])$");
            if (!ipPattern.matcher(address).matches()) {
                logger.error("Error in server configuration: The server address "
                        + "is not a valid ip address (" + address + ")");
                return false;
            }

            int port = Settings.INSTANCE.getValueAsIntegerFor(Settings.SERVER_PORT);
            if (port < 1 || port > 65535) {
                logger.error("Error in server configuration: The server port "
                        + "is out of range 1-65535 (" + port + ")");
                return false;
            }

            String root = Settings.INSTANCE.getValueFor(Settings.SERVER_ROOT);
            File rootDirectory = new File(root);
            if (!rootDirectory.getCanonicalFile().isDirectory()) {
                logger.error("Error in server configuration: The server root "
                        + "address is not a valid directory (" + root + ")");
                return false;
            }

            if (logger.isTraceEnabled()) {
                logger.trace("Server configuration validated successfully");
            }
            return true;
        } catch (Exception ex) {
            logger.error("Error while validating configuration: "
                    + ex.getMessage());
            return false;
        }
    }