Jetty是一个高效的Servlet容器,它由纯Java写成,以体积小而著称。它与Tomcat的一个显著的不同是它可以嵌入到其他的Java代码中。这就是说,Jetty可以作为一组Jar文件提供,因此开发者可以在自己的代码中将Servlet容器实例化成一个对象并可以操纵这个对象。Jetty被设计成了可插拔和可扩展的特性,开发者可以容易地修改Jetty以满足自己的需要。由于Jetty的诸多优异特性,Google AppEngine已放弃Tomcat转而采用Jetty作为其Servlet容器。目前Jetty的最新稳定版本是7。本文基于Jetty 6.1.24。

 

    我们先启用Jetty的JMX支持。打开jetty安装目录下的etc/jetty-jmx.xml,将围绕下面两个块的注释去掉:

 

    <Call id="rmiRegistry" class="java.rmi.registry.LocateRegistry" name="createRegistry">
      <Arg type="int">2099</Arg>
    </Call>

 

    <Call id="jmxConnectorServer" class="javax.management.remote.JMXConnectorServerFactory" name="newJMXConnectorServer">
      <Arg>
        <New  class="javax.management.remote.JMXServiceURL">
          <Arg>service:jmx:rmi://localhost:2100/jndi/rmi://localhost:2099/jmxrmi</Arg>
        </New>
      </Arg>
      <Arg/>
      <Arg><Ref id="MBeanServer"/></Arg>
      <Call name="start"/>
    </Call>

 

    启动jetty要使用这样的命令行:java -jar start.jar etc/jetty-jmx.xml etc/jetty.xml,其中“etc/jetty-jmx.xml”要放在“etc/jetty.xml”前面。

 

    我们有时需要将Jetty中更多的信息暴露出来,或者向Jetty中添加了自己的代码,而自己的代码中有一些需要通过JMX暴露出来的。这就需要我们自己注册一些MBeans到Jetty使用的MBeanServer中。在自己的代码中用ManagementFactory.getPlatformMBeanServer()方法获得MBeanServer,这个MBeanServer就是Jetty使用的MBeanServer,将自己的MBean注册到它里面去就可以了。

 

    而后,打开JConsole,填入地址service:jmx:rmi://localhost:2100/jndi/rmi://localhost:2099/jmxrmi,就可以看到Jetty的MBeans和自己注册的MBeans了。这种做法非常简单,不需要自己建立MBean连接服务器。

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐