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連接服務器。