有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaJDBC连接池监视GlassFish

我试图找到一个设置,通过该设置,连接池监视信息将进入服务器。每当出现诸如“错误分配连接”或“连接已关闭”之类的错误时,记录日志

我发现一些blog entries谈论这一点,但他们从GUI的角度提到这一点。但是,我希望对连接池本身进行设置,以便在日志中显示连接池监视信息

有人知道这样的环境吗

在Sun app Server 8上。它过去是perf-monitor


共 (1) 个答案

  1. # 1 楼答案

    我不知道这是否能帮到你。。。。但您可以通过jmx查询连接池监控信息。 此代码将打印appserver中所有连接池的最大池大小和已用连接数(可以从MBean中提取更多内容):

        MBeanServerConnection conn = getMbeanServerConnection();
    
        //search the jmx register for the specified beans
        Set<ObjectInstance> connectorPoolSet =  conn.queryMBeans(new ObjectName("*:type=jdbc-connection-pool,*"), null);
        Map<String , ObjectName> configMap = new HashMap<String, ObjectName>();
        Map<String , ObjectName> monitorMap = new HashMap<String, ObjectName>();
    
        //get a map of each config & monitor object found for the search
        for(ObjectInstance oi : connectorPoolSet) {
            String name = oi.getObjectName().getKeyProperty("name");
    
            //if the category of the mbean is config - put it in the config map - else if it is monitor
            //place it in the monitor map.
            String category = oi.getObjectName().getKeyProperty("category");
            if("config".equalsIgnoreCase(category)) {
                configMap.put(name, oi.getObjectName());
            } else if("monitor".equalsIgnoreCase(category)){
                monitorMap.put(name, oi.getObjectName());
            }
        }
    
        //iterate the pairs of config & monitor mbeans found 
        for(String name : configMap.keySet()) {
    
            ObjectName configObjectName  = configMap.get(name);
            ObjectName monitorObjectName = monitorMap.get(name);
            if(monitorObjectName == null) {
                //no monitor found - throw an exception or something
            }
    
            int maxPoolSizeVal = getAttributeValue(conn, configObjectName, "max-pool-size");
            int connectionsInUse = getAttributeValue(conn, monitorObjectName, "numconnused-current");
    
            System.out.println(name + " -> max-pool-size : " + maxPoolSizeVal);
            System.out.println(name + " -> connections in use : " + connectionsInUse);
    
    
        }