Tag Archives: jmx

TomEE makes JMXMP usage simple

Tomcat includes out of a box a Listener to simplify JMX usage but it mainly handles default connector – JVM one).

Often in enterprise you need to use another one. The most known is JMXMP.

To make it easy to use in TomEE, you can now use JMXServerListener.

Just add in your server.xml this new listener:

<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.tomee.catalina.ServerListener" />

  <!-- this listener will handle jmxmp server lifecycle -->
  <Listener className="org.apache.tomee.loader.listener.JMXServerListener"
            port="1234" />

  <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000" />

    <Engine name="Catalina" defaultHost="localhost">
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true" />

You can of course configure the host, port, potentially urlPath and the protocol. Note if you don’t provide the protocol jmxmp will be used.

Now to make it working you need to add jmxmp to the container. It is provided as a jar (you can find several ones on the internet). I used org.glassfish.external:opendmk_jmxremote_optional_jar:1.0-b01-ea. To make it easier I added it using TomEE container provisioning feature.

Just create a file conf/provisioning.properties with the line:

jar = mvn:org.glassfish.external:opendmk_jmxremote_optional_jar:1.0-b01-ea

Now you can start TomEE :).

When it starts it logs somethings like:

Infos: Started JMX server: service:jmx:jmxmp://localhost:1234

JMXMP is not in the JVM (that’s why we added a jar to TomEE) so to connect with a client (JConsole, JVisualVM, JMC…) you need to add this jar as well.

Here is a sample for JConsole:

java -cp $JAVA_HOME/lib/jconsole.jar:$CATALINA_HOME/additionallib/opendmk_jmxremote_optional_jar-1.0-b01-ea.jar sun.tools.jconsole.JConsole service:jmx:jmxmp://localhost:1234

Ping remote hosts from TomEE JMX console

When you write a JEE application it is common to need to interact with remote hosts (at least for your database).

Depending on network quality you can get poor performances and sometimes it is hard to check it (let say you don’t have a ssh access to the machine which is pretty common for cloud platforms).

Another use case is to valid you can contact the remote host (in complex environment with proxies for instance).

That’s why we added to TomEE a JMX ping!

Continue reading