private synchronized static void loadOpenfireProperties() {
        if (openfireProperties == null) {
            // If home is null then log that the application will not work correctly
            if (home == null) {
                if (!failedLoading) {
                    failedLoading = true;
                    System.err.println("Critical Error! The home directory has not been configured, \n" +
                        "which will prevent the application from working correctly.\n\n");
                }
            }
            // Create a manager with the full path to the Openfire config file.
            else {
                try {
                    openfireProperties = new XMLProperties(home.resolve(getConfigName()));
                }
                catch (IOException ioe) {
                    Log.error("Unable to load default Openfire properties from: {}{}{}", home, File.separator, getConfigName(), ioe);
                    failedLoading = true;
                }
            }
            // create a default/empty XML properties set (helpful for unit testing)
            if (openfireProperties == null) {
                try {
                    Log.warn("Default properties have not been loaded from file. Using a non-persisting dummy properties object.");
                    openfireProperties = XMLProperties.getNonPersistedInstance();
                } catch (IOException e) {
                    Log.error("Failed to setup default openfire properties", e);
                }            	
            }
        }
    }
Loads Openfire properties if necessary. Property loading must be done lazily so
that we give outside classes a chance to set {@code home}.
xmppserver/src/main/java/org/jivesoftware/util/JiveGlobals.java