package org.mom4j.xcp.jmx;
import com.sun.jdmk.comm.AuthInfo;
import com.sun.jdmk.comm.HtmlAdaptorServer;
import java.util.Iterator;
import java.util.Map;
import javax.management.JMException;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class XcpServerAgent {
private static Log log = LogFactory.getLog(XcpServerAgent.class);
private HtmlAdaptorServer html;
private MBeanServer server;
private Map servers;
private int port;
private String user;
private String password;
public XcpServerAgent(Map servers, int port) {
this.servers = servers;
this.port = port;
this.user = "admin";
this.password = "secret";
}
public XcpServerAgent(Map servers, int port, String user, String password) {
this.servers = servers;
this.port = port;
this.user = user;
this.password = password;
}
public void start() {
this.server = MBeanServerFactory.createMBeanServer("xcp");
this.html = new HtmlAdaptorServer(this.port);
this.html.addUserAuthenticationInfo(new AuthInfo(this.user, this.password));
try {
//register the html-adaptor
ObjectName on = new ObjectName("Adaptor:name=html,port=8888");
this.server.registerMBean(this.html, on);
//register the admin instance for the xcp-server-process
on = new ObjectName("XcpServer:port=allPorts");
this.server.registerMBean(new XcpServer(this.servers), on);
//register the xcp-server-instances
Iterator it = this.servers.keySet().iterator();
while(it.hasNext()) {
Integer p = (Integer)it.next();
XcpServerAdmin admin = new XcpServerAdmin(p.intValue());
ObjectName oname = new ObjectName("XcpServer:port=" + p);
this.server.registerMBean(admin, oname);
}
} catch(JMException ex) {
log.error("start failed.", ex);
this.server = null;
this.html = null;
return;
}
this.html.start();
}
public void registerMBean(ObjectName name, Object bean)
throws JMException
{
if(name == null)
throw new IllegalArgumentException("name may not be null!");
if(bean == null)
throw new IllegalArgumentException("bean may not be null!");
this.server.registerMBean(bean, name);
}
public void unregisterMBean(ObjectName name)
throws JMException
{
if(name == null)
throw new IllegalArgumentException("name may not be null!");
this.server.unregisterMBean(name);
}
public void stop() {
this.html.stop();
}
}