package org.jolokia.handler; import java.io.IOException; import javax.management.*; import org.jolokia.Version; import org.jolokia.backend.executor.MBeanServerExecutor; import org.jolokia.config.ConfigKey; import org.jolokia.config.Configuration; import org.jolokia.detector.ServerHandle; import org.jolokia.request.JmxVersionRequest; import org.jolokia.restrictor.Restrictor; import org.jolokia.util.RequestType; import org.json.simple.JSONObject; /* * Copyright 2009-2013 Roland Huss * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Get the version of this agent as well as the protocol version * * @author roland * @since Jun 12, 2009 */ public class VersionHandler extends JsonRequestHandler<JmxVersionRequest> { private final Configuration config; private ServerHandle serverHandle; /** * Constructor * * @param pConfig configuration holding additional meta data. Might be null. * @param pRestrictor access restrictions * @param pServerHandle a server handle as obtained from a {@link org.jolokia.detector.ServerDetector} */ public VersionHandler(Configuration pConfig, Restrictor pRestrictor, ServerHandle pServerHandle) { super(pRestrictor); serverHandle = pServerHandle; config = pConfig; } /** {@inheritDoc} */ @Override public RequestType getType() { return RequestType.VERSION; } /** {@inheritDoc} */ @Override protected void checkForRestriction(JmxVersionRequest pRequest) { checkType(); } /** {@inheritDoc} */ @Override public boolean handleAllServersAtOnce(JmxVersionRequest pRequest) { return true; } /** {@inheritDoc} * @param serverManager * @param request*/ @Override public Object doHandleRequest(MBeanServerExecutor serverManager, JmxVersionRequest request) throws InstanceNotFoundException, AttributeNotFoundException, ReflectionException, MBeanException, IOException { JSONObject ret = new JSONObject(); ret.put("agent",Version.getAgentVersion()); ret.put("protocol",Version.getProtocolVersion()); if (serverHandle != null) { ret.put("info", serverHandle.toJSONObject(serverManager)); } ret.put("config", configToJSONObject()); return ret; } private JSONObject configToJSONObject() { JSONObject info = new JSONObject(); if (config != null) { for (ConfigKey key : ConfigKey.values()) { if (key.isGlobalConfig() && config.containsKey(key)) { info.put(key.getKeyValue(), config.get(key)); } } } return info; } /** {@inheritDoc} */ @Override // Wont be called public Object doHandleRequest(MBeanServerConnection server, JmxVersionRequest request) { throw new UnsupportedOperationException("Internal: Method must not be called when all MBeanServers are handled at once"); } }