2012-12-27 9 views
8

Ich versuche, JDBC-Verbindungen in tomcat mit JMX zu überwachen.Monitor JDBC-Verbindungen

Aber es gibt Informationen nur in Bezug auf die Datenquellen-Ressourcen, ich möchte den Status der Verbindung in Database.properties-Datei definiert.

Gibt es eine Möglichkeit, ihren Status zu bekommen?

+0

Ich möchte nur die Anzahl der belegten und Leerlauf-Threads nicht den Wartestatus oder Blockstatus. – Rupinder

+0

Was ist 'Database.properties'? Wie ist es mit Tomcat verbunden, welcher Rahmen ist das? – mindas

+0

Hallo Rupinder, hast du endlich solch ein Dienstprogramm gefunden? – JavaTec

Antwort

2

Mit diesem Servlet 3.0 Beispiel können Sie alle Informationen in der org.apache.tomcat.jdbc.pool.jmx.ConnectionPool überwachen einschließlich die Verbindungen Idle und Active.

import java.io.IOException; 
import java.io.PrintWriter; 
import java.lang.management.ManagementFactory; 
import java.util.Set; 
import javax.management.MBeanAttributeInfo; 
import javax.management.MBeanInfo; 
import javax.management.MBeanServer; 
import javax.management.ObjectName; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
@WebServlet("/poolmonitor") 
public class HelloServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 
    @Override 
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
      throws ServletException, IOException { 
     PrintWriter writer = resp.getWriter(); 
     writer.println("<!DOCTYPE html>"); 
     writer.println("<html>"); 
     writer.println("<body>"); 
     writer.println("<p><h1>Tomcat Pool</h1></p><p>"); 
     try { 
      MBeanServer server = ManagementFactory.getPlatformMBeanServer(); 
      Set<ObjectName> objectNames = server.queryNames(null, null); 
      for (ObjectName name : objectNames) { 
       MBeanInfo info = server.getMBeanInfo(name); 
       if (info.getClassName().equals(
         "org.apache.tomcat.jdbc.pool.jmx.ConnectionPool")) { 
        for (MBeanAttributeInfo mf : info.getAttributes()) { 
         Object attributeValue = server.getAttribute(name, 
           mf.getName()); 
         if (attributeValue != null) { 
          writer.println("" + mf.getName() + " : " 
            + attributeValue.toString() + "<br/>"); 

         } 
        } 
        break; 
       } 
      } 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     writer.println("</p></body>"); 
     writer.println("</html>"); 
    } 
}