All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
org.jolokia.mule.MortbayMuleAgentHttpServer Maven / Gradle / Ivy
package org.jolokia.mule;
/*
* Copyright 2009-2011 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.
*/
import java.util.HashMap;
import java.util.Map;
import org.jolokia.http.AgentServlet;
import org.jolokia.util.ClassUtil;
import org.jolokia.util.NetworkUtil;
import org.mortbay.jetty.*;
import org.mortbay.jetty.nio.SelectChannelConnector;
import org.mortbay.jetty.security.*;
import org.mortbay.jetty.servlet.Context;
import org.mortbay.jetty.servlet.ServletHolder;
import org.mule.api.agent.Agent;
import org.mule.api.lifecycle.StartException;
import org.mule.api.lifecycle.StopException;
/**
* HTTP Server for the Mule agent which encapsulates a Jetty server.
*
*
* @author roland
* @since 30.08.11
*/
public class MortbayMuleAgentHttpServer implements MuleAgentHttpServer {
// parent agent
private Agent parent;
// Jetty server to use
private Server server;
/**
* Constructor
*
* @param pParent parent for creating proper exceptions
* @param pConfig configuration of the server
*/
MortbayMuleAgentHttpServer(Agent pParent, MuleAgentConfig pConfig) {
parent = pParent;
// Initialise server
server = getServer(pConfig);
Context root = getContext(server, pConfig);
ServletHolder servletHolder = getServletHolder(pConfig);
root.addServlet(servletHolder, "/*");
}
/**
* Startup the HTTP server
*
* @throws StartException if starting fails
*/
public void start() throws StartException {
try {
server.start();
} catch (Exception e) {
throw new StartException(e, parent);
}
}
/**
* Stop the internal HTTP server
*
* @throws StopException when stopping fails
*/
public void stop() throws StopException {
try {
server.stop();
} catch (Exception e) {
throw new StopException(e, parent);
}
}
// ======================================================================================
// Create a Jetty Server with the agent servlet installed
private Server getServer(MuleAgentConfig pConfig) {
Server newServer = new Server();
Connector connector = new SelectChannelConnector();
if (pConfig.getHost() != null) {
connector.setHost(pConfig.getHost());
}
connector.setPort(pConfig.getPort());
newServer.setConnectors(new Connector[]{connector});
return newServer;
}
private ServletHolder getServletHolder(MuleAgentConfig pConfig) {
ServletHolder holder = new ServletHolder(new AgentServlet());
holder.setInitParameters(getInitParameters(pConfig));
holder.setInitOrder(1);
return holder;
}
private Context getContext(HandlerContainer pContainer, MuleAgentConfig pConfig) {
Context root = new Context(pContainer, "/jolokia", Context.SESSIONS);
if (pConfig.getUser() != null && pConfig.getPassword() != null) {
root.setSecurityHandler(getSecurityHandler(pConfig.getUser(), pConfig.getPassword(), "jolokia-role"));
}
return root;
}
private SecurityHandler getSecurityHandler(String pUser, String pPassword, String pRole) {
SecurityHandler securityHandler = new SecurityHandler();
securityHandler.setConstraintMappings(getConstraintMappings(pRole));
securityHandler.setUserRealm(getUserRealm(pUser, pPassword, pRole));
return securityHandler;
}
private UserRealm getUserRealm(String pUser, String pPassword, String pRole) {
HashUserRealm realm = new HashUserRealm("jolokia Realm");
realm.put(pUser,pPassword);
realm.addUserToRole(pUser,pRole);
return realm;
}
private ConstraintMapping[] getConstraintMappings(String ... pRoles) {
Constraint constraint = new Constraint();
constraint.setName(Constraint.__BASIC_AUTH);
constraint.setRoles(pRoles);
constraint.setAuthenticate(true);
ConstraintMapping cm = new ConstraintMapping();
cm.setConstraint(constraint);
cm.setPathSpec("/*");
return new ConstraintMapping[] { cm };
}
private Map getInitParameters(MuleAgentConfig pConfig) {
Map ret = new HashMap();
ret.put("debugMaxEntries", "" + pConfig.getDebugMaxEntries());
ret.put("historyMaxEntries", "" + pConfig.getHistoryMaxEntries());
ret.put("maxCollectionsSize", "" + pConfig.getMaxCollectionSize());
ret.put("maxDepth", "" + pConfig.getMaxDepth());
ret.put("maxObjects", "" + pConfig.getMaxObjects());
ret.put("debug", "" + pConfig.isDebug());
ret.put("agentType", "mule");
ret.put("agentId", NetworkUtil.getAgentId(hashCode(), "mule"));
return ret;
}
}