The "State" property of LocalPeerBean in package org.apache.zookeeper.server.quorum is returning the incorrect value. It is performing peer.getState() which is calling the getState() method on java.lang.Thread instead of getting the server state from org.apache.zookeeper.server.quorum.QuorumPeer. The Javadoc within LocalPeerMXBean.java states that it should be returning the server state as well. The fix is to call peer.getServerState() in the getState() method of LocalPeerBean instead of peer.getState().toString(). This will return the states defined in QuorumStats.Provider (unknown, leaderelection, leading, following, and observing). This issue prevents JMX monitoring of the Zookeeper server state.