<document>

Instrumenting resources so JMX can manage them consists of the following steps:

1. For a class `MyFoo`, create an interface `MyFooMBean` with the management interface.
2. Class `MyFoo` needs to implement the `MyFooMBean` interface.
3. Register `MyFoo` with the JMX server.

Resin will automatically register any servlet which implement an MBean interface. By default, the JMX name will be:

<def> web-app:j2eeType=Servlet,name=servlet-name </def>
Attribute Value
j2eeType Servlet
WebModule the contextPath
J2EEApplication the host?
J2EEServer the server-id?

The domain is web-app, the type property is javax.servlet.Servlet and the name property is the value of <servlet-name>.

JMX clients will use the name to manage the servlet. For example, a client might use the pattern web-app:type=javax.servlet.Servlet,* to retrieve all managed servlets.

package test; public interface MyServletMBean { public int getCount(); } package test; import java.io.*; import javax.servlet.*; public class MyServlet extends GenericServlet implements MyServletMBean { private int count; public int getCount() { return count; } public void service(ServletRequest request, ServletResponse response) throws IOException { PrintWriter out = response.getWriter(); count++; out.println("Hello, world"); } }

Managing resources uses the JMX API, primarily using the `MBeanServer` object. In Resin, each web-app has its own `MBeanServer`.

import javax.management.*; ... MBeanServer server = MBeanServerFactory.createMBeanServer(); ObjectName name = new ObjectName("web-app:j2eeType=javax.servlet.Servlet," + "name=hello"); Object value = server.getAttribute(name, "Count"); out.println("Count: " + value);

The resin-status servlet has a primitive generic JMX management view of JMX managed servlets. By adding a MBean interface to your servlet, you'll automatically get a view of your servlets from /resin-status.

</document>