View Javadoc

1   package cz.cuni.amis.pogamut.base.agent.module;
2   
3   import java.util.logging.Logger;
4   
5   import javax.management.MBeanServer;
6   import javax.management.ObjectName;
7   
8   import cz.cuni.amis.pogamut.base.agent.exceptions.CantStartJMXException;
9   import cz.cuni.amis.pogamut.base.agent.exceptions.JMXAlreadyEnabledException;
10  import cz.cuni.amis.pogamut.base.agent.impl.AbstractAgent;
11  import cz.cuni.amis.pogamut.base.agent.jmx.AgentJMXComponents;
12  import cz.cuni.amis.pogamut.base.agent.jmx.IJMXEnabled;
13  import cz.cuni.amis.pogamut.base.component.controller.ComponentDependencyType;
14  
15  /**
16   * Agent module that provides JMX interface. Implement {@link JMXAgentModule#enableJMX(MBeanServer, ObjectName)} to publish
17   * the interface.
18   * <p><p>
19   * This module automatically registers itself into {@link AbstractAgent#getJMX()}.
20   * 
21   * @author Jimmy
22   *
23   * @param <AGENT>
24   * 
25   * @see AgentJMXComponents
26   * @see IJMXEnabled
27   */
28  public abstract class JMXAgentModule<AGENT extends AbstractAgent> extends AgentModule<AGENT> implements IJMXEnabled {
29  	
30  	/**
31  	 * Initialize agent module - it will start {@link ComponentDependencyType}.STARTS_WITH the agent.
32  	 * @param agent
33  	 */
34  	public JMXAgentModule(AGENT agent) {
35  		this(agent, null);
36  	}
37  	
38  	/**
39  	 * Initialize agent module - it will start {@link ComponentDependencyType}.STARTS_WITH the agent.
40  	 * @param agent
41  	 * @param log should be used, if <i>null</i> is provided, it is created automatically
42  	 */
43  	public JMXAgentModule(AGENT agent, Logger log) {
44  		super(agent, log);
45  		agent.getJMX().addComponent(this);
46  	}
47  
48  	/**
49  	 * Register JMX components.
50  	 */
51  	@Override
52  	public abstract void enableJMX(MBeanServer mBeanServer, ObjectName parent) throws JMXAlreadyEnabledException, CantStartJMXException;
53  
54  }