@Override
                    public void run() {
                        XMPPServer.getInstance().addServerListener(new XMPPServerListener() {
                            @Override
                            public void serverStarted() {}

                            @Override
                            public void serverStopping() {
                                destroyed = true;
                            }
                        });
                        ClusterManager.addListener(new ClusterEventListener() {
                            @Override
                            public void joinedCluster() {}

                            @Override
                            public void joinedCluster(byte[] nodeID) {}

                            @Override
                            public void leftCluster() {
                                destroyed = true;
                                ClusterManager.removeListener(this);
                                log.debug("CacheFactory is not listening for cluster events anymore because it left the cluster");
                            }

                            @Override
                            public void leftCluster(byte[] nodeID) {}

                            @Override
                            public void markedAsSeniorClusterMember() {}
                        });

                        // Run the timer indefinitely.
                        while (!destroyed && ClusterManager.isClusteringEnabled()) {
                            // Publish cache stats for this cluster node (assuming clustering is
                            // enabled and there are stats to publish).
                            try {
                                cacheFactoryStrategy.updateCacheStats(caches);
                            }
                            catch (Exception e) {
                                log.error(e.getMessage(), e);
                            }
                            try {
                                // Sleep 10 seconds.
                                sleep(10000);
                            }
                            catch (InterruptedException ie) {
                                // Ignore.
                            }
                        }
                        statsThread = null;
                        log.debug("Cache stats thread terminated.");
                    }
Returns the node info for the given cluster node
@param nodeID The target cluster node 
@return The info for the cluster node or null if not found
xmppserver/src/main/java/org/jivesoftware/util/cache/CacheFactory.java