You are on page 1of 16

Managing Components with

JMX
Overview

• Purpose of JMX
• The JMX architecture
• A JMX example
• Q&A
Purpose of JMX
• JMX=Java Management eXtensions
• Manage Java components
– Control
– Configure
• Allow portable server components
• Integrate into existing management systems
The JMX architecture
• Three levels
– Instrumentation level (MBean)
– Agent level (MBeanServer)
– Distributed services level (Adaptor)
The JMX architecture
M anagem ent
c o n s o le

D is tr ib u t e d s e r v ic e s M Bean
(A d a p to r)

Agent M B e a n S e rv e r

M Bean M Bean
I n s t r u m e n t a t io n M Bean M Bean ( T im e r ) (M L e t)
The JMX architecture
• Standard MBeans
– MBean-specific interface declares methods and
attributes
• Dynamic MBeans
– Implements DynamicMBean interface
– Allows info about MBean to change at runtime
The JMX architecture
• Model MBeans
– Use a ModelMBean through delegation

M B e a n S e rv e r

M odel
M Bean

M anaged
re s o u rc e
A JMX example
package simplejmx;
import javax.management.MBeanRegistration;
import javax.management.MBeanServer;
import javax.management.ObjectName;
public class SimpleBean
implements MBeanRegistration, SimpleBeanMBean
{
String phrase;
public SimpleBean()
{
this("Hello World!");
}
public SimpleBean(String phrase)
{
setPhrase(phrase);
}
A JMX example
// SimpleBeanMBean implementation
public void printPhrase()
{
System.out.println(phrase);
}

public void setPhrase(String phrase)


{
this.phrase = phrase;
}

public String getPhrase()


{
return phrase;
}
A JMX example
// MBeanRegistration implementation
public ObjectName preRegister(MBeanServer server, ObjectName name)
throws java.lang.Exception
{
return name == null ? new ObjectName(":service=SimpleBean") : name;
}

public void postRegister(java.lang.Boolean registrationDone)


{
if (registrationDone.booleanValue())
printPhrase();
}

public void preDeregister()


throws java.lang.Exception
{
}

public void postDeregister()


{
}
}
A JMX example
package simplejmx;

public interface SimpleBeanMBean


{
public void printPhrase();

public void setPhrase(String phrase);

public String getPhrase();


}

• Name of interface is MBean class name suffixed


with ”MBean”
• Results in one manageable method, and one
manageable attribute
A JMX example
• MLet configuration
<MLET CODE = "simplejmx.SimpleBean" ARCHIVE="simplejmx.jar"
CODEBASE="../../lib/ext/">
<ARG TYPE="java.lang.String" VALUE="Hey World!">
</MLET>

<MLET CODE = "simplejmx.SimpleBean" ARCHIVE="simplejmx.jar"


CODEBASE="../../lib/ext/” NAME=”:name=Simple”>
</MLET>

– ARG list needs to match constructor


– Name is optional
JMX in JBoss
• JMX is used at core of Jboss
• All functionality available as MBeans
• Currently only Standard MBean model
is used
• Integration!
JMX in JBoss
• Some additional core services, which
are MBeans too, have been added
• ServiceControl
– Lifecycle management
(init/start/stop/destroy)
• Configuration
– Persistent configuration (as XML)
JMX in JBoss
• JBoss configuration XML:
<server>
<!-- Classloading -->
<mbean code="org.jboss.web.WebService" name="DefaultDomain:service=Webserver">
<attribute name="Port">8083</attribute>
</mbean>

<!-- JNDI -->


<mbean code="org.jboss.naming.NamingService" name="DefaultDomain:service=Naming">
<attribute name="Port">1099</attribute>
</mbean>

<!-- Transactions -->


<mbean code="org.jboss.tm.TransactionManagerService"
name="DefaultDomain:service=TransactionManager">
<attribute name="TransactionTimeout">300</attribute>
</mbean>
...
Q&A
• JMX Tutorial
http://docs.oracle.com/javase/tutorial/jmx
http://www.youtube.com/watch?v=aKGYa6Y9r60

You might also like