Standalone java application

533 views
Skip to first unread message

Chuan Ong

unread,
Nov 19, 2012, 1:34:18 PM11/19/12
to javam...@googlegroups.com
Is there a way to monitor a standalone java application using javamelody?

Vernat Emeric

unread,
Nov 19, 2012, 4:09:06 PM11/19/12
to javam...@googlegroups.com
No, javamelody needs to be installed in a webapp (war file or ear file).

Emeric

claire....@gmail.com

unread,
Nov 20, 2012, 10:48:32 AM11/20/12
to javam...@googlegroups.com
It would be nice to be able to embed javamelody probe in a standalone java application and open a port to present the stats on a collect server.

fyi, javamelody works wonderfully on a WebLogic 11g cluster.

Philip Zeyliger

unread,
Nov 26, 2012, 7:10:19 PM11/26/12
to javam...@googlegroups.com
For what it's worth, it's not too hard to embed JavaMelody into an existing app.  The way I do it is to start a Jetty server ad add the monitoring filter to it manually.  "/monitoring" on the Jetty server will be JavaMelody.

The following code is against Jetty 6, and let's agree that I haven't tested it, but it gives you the drift.  Newer versions of Jetty are different, but the idea is the same.


import javax.servlet.Filter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.mortbay.jetty.Connector;
import org.mortbay.jetty.Handler;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.bio.SocketConnector;
import org.mortbay.jetty.servlet.Context;
import org.mortbay.jetty.servlet.FilterHolder;
import org.mortbay.jetty.servlet.ServletHolder;
import org.mortbay.thread.QueuedThreadPool;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

main() {
    Server webServer = new Server();
    QueuedThreadPool pool = new QueuedThreadPool();
    pool.setMinThreads(2);
    pool.setMaxThreads(10);
    pool.setName("DebugServer(port" + port + ")");
    pool.setDaemon(true);
    webServer.setThreadPool(pool);
    connector = new SocketConnector();

    connector.setPort(port);
    connector.setHost(server);
    connector.setMaxIdleTime(60000); // 1 min
    webServer.addConnector(connector);

    context.setContextPath("/");
    webServer.setHandler(context);

      // Set Java Melody storage Directory
      CommonMain.setJavaMelodyStorageDirectoryProperty("foo");
      Filter monitoringFilter = new net.bull.javamelody.MonitoringFilter();
        context.addFilter(new FilterHolder(monitoringFilter), "/monitoring", Handler.REQUEST);
    LOG.info("Running debug HTTP server on " + server + ":" + port);
Reply all
Reply to author
Forward
0 new messages