alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Glassfish example source code file (MonitoringTest.java)

This example Glassfish source code file (MonitoringTest.java) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Java - Glassfish tags/keywords

container, container, ejb, io, jvm, monitor_level_high, monitor_level_off, monitoring, net, network, statistics, statistics, string, string, target_server_type, web, web

The Glassfish MonitoringTest.java source code

/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright (c) 2010-2011 Oracle and/or its affiliates. All rights reserved.
 *
 * The contents of this file are subject to the terms of either the GNU
 * General Public License Version 2 only ("GPL") or the Common Development
 * and Distribution License("CDDL") (collectively, the "License").  You
 * may not use this file except in compliance with the License.  You can
 * obtain a copy of the License at
 * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
 * or packager/legal/LICENSE.txt.  See the License for the specific
 * language governing permissions and limitations under the License.
 *
 * When distributing the software, include this License Header Notice in each
 * file and include the License file at packager/legal/LICENSE.txt.
 *
 * GPL Classpath Exception:
 * Oracle designates this particular file as subject to the "Classpath"
 * exception as provided by Oracle in the GPL Version 2 section of the License
 * file that accompanied this code.
 *
 * Modifications:
 * If applicable, add the following below the License Header, with the fields
 * enclosed by brackets [] replaced by your own identifying information:
 * "Portions Copyright [year] [name of copyright owner]"
 *
 * Contributor(s):
 * If you wish your version of this file to be governed by only the CDDL or
 * only the GPL Version 2, indicate your decision by adding "[Contributor]
 * elects to include this software in this distribution under the [CDDL or GPL
 * Version 2] license."  If you don't indicate a single choice of license, a
 * recipient has the option to distribute your version of this file under
 * either the CDDL, the GPL Version 2 or to extend the choice of license to
 * its licensees as provided above.  However, if you add GPL Version 2 code
 * and therefore, elected the GPL Version 2 license, then the option applies
 * only if the new code is made subject to such option by the copyright
 * holder.
 */

package org.glassfish.admingui.devtests;

import org.junit.Test;

import java.io.File;
import java.net.MalformedURLException;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

public class MonitoringTest extends BaseSeleniumTestClass {

    private static final String TRIGGER_MONITORING_SERVICE = "Enable monitoring for a component or service by selecting either LOW or HIGH. Monitoring Service and Monitoring MBeans must both be enabled to use Administration Console monitoring features.";
    private static final String MONITOR_LEVEL_OFF = "OFF";
    private static final String MONITOR_LEVEL_LOW = "LOW";
    private static final String MONITOR_LEVEL_HIGH = "HIGH";
    
    private static final String MONITOR_LEVEL_COL_ID = "col3";
    private static final String MONITOR_COMP_COL_ID = "col2";
    private static final String MONITOR_COMP_SELECT_ID = "col1";
    
    public static final String TARGET_SERVER_TYPE = "server";
    public static final String TARGET_STANDALONE_TYPE = "standalone";
    public static final String TARGET_CLUSTER_TYPE = "cluster";
    
    private static final String TRIGGER_STANDALONE_PAGE = "Create and manage standalone instances for a node agent.";
    private static final String TRIGGER_STANDALONE_GENERAL_PAGE = "General Information";
    private static final String TRIGGER_MONITORING_SERVER_GENERAL = "General Information";
    private static final String TRIGGER_MONITORING_APPLICATIONS = "Application Monitoring";
    private static final String TRIGGER_MONITORING_SERVER = "Server Monitoring";
    private static final String TRIGGER_MONITORING_RESOURCES = "Resources Monitoring";
    private static final String MONITORING_APPLICATIONS_COMPONENT_DROPDOWN_ID = "propertyForm:propertyContentPage:propertySheet:viewPropertySection:ApplicationProp:ComponentView_list";

    @Test
    public void dummy() {
        // don't fail
    }

//    @Test
    public void testMonitoringServicePage() {
        setMonitorLevel("Web Container", MONITOR_LEVEL_LOW, false, "server", TARGET_SERVER_TYPE);
        setMonitorLevel(null, MONITOR_LEVEL_OFF, true, "server", TARGET_SERVER_TYPE);
    }

//    @Test
    public void testMonitoringServerPage() {
        monitoringJvmStats("server", TARGET_SERVER_TYPE);
        monitoringWebContainerStats("server", TARGET_SERVER_TYPE);
        monitoringTransactionServiceStats("server", TARGET_SERVER_TYPE);
        monitoringSecurityStats("server", TARGET_SERVER_TYPE);
        monitoringHttpServiceStats("server", TARGET_SERVER_TYPE);
    }

//    @Test
    public void testMonitoringApplicationsPage() {
        ejbTimerMonitoring("server", TARGET_SERVER_TYPE);
        statefulAndStatelessBeanMonitoring("server", TARGET_SERVER_TYPE);
    }

    //Monitoring service related methods.
    private void goToMonitoringServicePage(String target, String targetType) {
        goToMonitoringApplicationsPage(target, targetType);
        assertTrue(isElementPresent("link=Configure Monitoring"));
        clickAndWait("link=Configure Monitoring", TRIGGER_MONITORING_SERVICE);
    }

    private void setMonitorLevel(String component, String monLevel, boolean isAll, String target, String targetType) {
        goToMonitoringServicePage(target, targetType);
        waitForPageLoad("HTTP Service", 1000);
        if (isAll) {
            pressButton("form1:basicTable:_tableActionsTop:_selectMultipleButton:_selectMultipleButton_image");
        } else {
            selectTableRowByValue("form1:basicTable", component, MONITOR_COMP_SELECT_ID, MONITOR_COMP_COL_ID);
        }
        waitForButtonEnabled("form1:basicTable:topActionsGroup1:button1");
        selectDropdownOption("form1:basicTable:topActionsGroup1:change_list", monLevel);
        pressButton("form1:basicTable:topActionsGroup1:button1");
        waitForButtonDisabled("form1:basicTable:topActionsGroup1:button1");
        clickAndWait("form1:title:topButtons:saveButton", TRIGGER_NEW_VALUES_SAVED);

        //Test whether the level has changed to monLevel or not.
        //clickAndWait("treeForm:tree:configurations:server-config:monitor:monitor_link", TRIGGER_MONITORING_SERVICE);
        goToMonitoringServicePage(target, targetType);
        String level = null;
        if (isAll) {
            level = getSelectedLabel("form1:basicTable:rowGroup1:0:" + MONITOR_LEVEL_COL_ID + ":level");
        } else {
            String id = getTableRowByValue("form1:basicTable", component, MONITOR_COMP_COL_ID);
            level = getSelectedLabel(id + MONITOR_LEVEL_COL_ID + ":level");
        }
        assertEquals(monLevel, level);
    }

    //Monitoring->Server related methods.
    private void goToMonitoringServerPage(String target, String targetType) {
        if (targetType.equals(TARGET_SERVER_TYPE)) {
            clickAndWait("treeForm:tree:applicationServer:applicationServer_link", TRIGGER_MONITORING_SERVER_GENERAL);
            clickAndWait("propertyForm:serverInstTabs:monitoring", TRIGGER_MONITORING_APPLICATIONS);
            clickAndWait("propertyForm:serverInstTabs:monitoring:monitor_server", TRIGGER_MONITORING_SERVER);
        } else if (targetType.equals(TARGET_STANDALONE_TYPE)) {
            clickAndWait("treeForm:tree:standaloneTreeNode:standaloneTreeNode_link", TRIGGER_STANDALONE_PAGE);
            clickAndWait(getLinkIdByLinkText("propertyForm:instancesTable", target), TRIGGER_STANDALONE_GENERAL_PAGE);
            clickAndWait("propertyForm:standaloneInstanceTabs:monitoring", TRIGGER_MONITORING_APPLICATIONS);
            clickAndWait("propertyForm:standaloneInstanceTabs:monitoring:monitorServer", TRIGGER_MONITORING_SERVER);
        }
    }

    private void monitoringJvmStats(String target, String targetType) {
        final String threadInfoHeader = "Thread Info Statistics";
        final String jvmMemHeader = "JVM: Memory Statistics";
        final String jvmOsHeader = "JVM: Operating System Statistics";
        final String jvmClassLoadingHeader = "JVM: Class Loading Statistics";
        final String jvmCompilationHeader = "JVM: Compilation Statistics";
        final String jvmRuntimeHeader = "JVM: Runtime Statistics";
        final String jvmThreadHeader = "JVM: Thread System Statistics";

        final String threadInfoData = "DeadlockedThreads";
        final String jvmMemData = "UsedNonHeapSize";
        final String jvmOsData = "AvailableProcessors";
        final String jvmClassLoadingData = "UnLoadedClassCount";
        final String jvmCompilationData = "TotalCompilationTime";
        final String jvmRuntimeData = "SpecVersion";
        final String jvmThreadData = "TotalStartedThreadCount";

        final String dropDownId = "propertyForm:propertyContentPage:propertySheet:viewPropertySection:VsProp:View_list";
        final String gcCopyHeader = "Garbage Collectors Statistics : Copy";
        final String gcCopyData = "CollectionCount";
        final String gcMarkSweepHeader = "Garbage Collectors Statistics : MarkSweepCompact";
        final String gcMarkSweepData = "CollectionCount";
        final String threadHeader = "Thread Info Statistics";
        final String threadData = "ThreadState";

        setMonitorLevel("JVM", MONITOR_LEVEL_HIGH, false, target, targetType);
        goToMonitoringServerPage(target, targetType);

        verifyMonitoringStat("jvmThreadInfoStats", threadInfoData, threadInfoHeader);
        verifyMonitoringStat("jvmMemStats", jvmMemData, jvmMemHeader);
        verifyMonitoringStat("osStats", jvmOsData, jvmOsHeader);
        verifyMonitoringStat("clStats", jvmClassLoadingData, jvmClassLoadingHeader);
        verifyMonitoringStat("comStats", jvmCompilationData, jvmCompilationHeader);
        verifyMonitoringStat("runtimeStats", jvmRuntimeData, jvmRuntimeHeader);
        verifyMonitoringStat("jvmThreadStats", jvmThreadData, jvmThreadHeader);

        selectDropdownOption(dropDownId, "Copy");
        waitForPageLoad(gcCopyHeader, 10000);
        verifyMonitoringStat("gcStats", gcCopyData, gcCopyHeader);
        selectDropdownOption(dropDownId, "MarkSweepCompact");
        waitForPageLoad(gcMarkSweepHeader, 10000);
        verifyMonitoringStat("gcStats", gcMarkSweepData, gcMarkSweepHeader);
        selectDropdownOption(dropDownId, "thread-1");
        waitForPageLoad(threadHeader, 10000);
        verifyMonitoringStat("jvmThreadInfoStats", threadData, threadHeader);

        setMonitorLevel("JVM", MONITOR_LEVEL_OFF, false, target, targetType);
    }

    private void monitoringWebContainerStats(String target, String targetType) {
        final String webContainerServletHeader = "Web Container: Servlet Statistics";
        final String webContainerSessionHeader = "Web Container: Session Statistics";
        final String webContainerRequestHeader = "Web Container: Request Statistics";
        final String webContainerJspHeader = "Web Container: JSP Statistics";
        final String webContainerServletData = "ActiveServletsLoaded";
        final String webContainerSessionData = "SessionsTotal";
        final String webContainerRequestData = "RequestCount";
        final String webContainerJspData = "JspReloadedCount";

        setMonitorLevel("Web Container", MONITOR_LEVEL_HIGH, false, target, targetType);
        goToMonitoringServerPage(target, targetType);

        verifyMonitoringStat("servletsWeb", webContainerServletData, webContainerServletHeader);
        verifyMonitoringStat("sessionWeb", webContainerSessionData, webContainerSessionHeader);
        verifyMonitoringStat("requestWebStats", webContainerRequestData, webContainerRequestHeader);
        verifyMonitoringStat("jspWebStats", webContainerJspData, webContainerJspHeader);

        setMonitorLevel("Web Container", MONITOR_LEVEL_OFF, false, target, targetType);
    }

    private void monitoringTransactionServiceStats(String target, String targetType) {
        final String transactionServiceHeader = "Transaction Service Statistics";
        final String transactionServiceData = "RolledbackCount";

        setMonitorLevel("Transaction Service", MONITOR_LEVEL_HIGH, false, target, targetType);
        goToMonitoringServerPage(target, targetType);
        verifyMonitoringStat("txnServiceStats", transactionServiceData, transactionServiceHeader);
        setMonitorLevel("Transaction Service", MONITOR_LEVEL_OFF, false, target, targetType);
    }

    private void monitoringSecurityStats(String target, String targetType) {
        final String webAppSecurityDeploymentHeader = "Web Application Security Deployment Statistics";
        final String webAppSecurityDeploymentData = "WebSecurityManagerCount";

        setMonitorLevel("Security", MONITOR_LEVEL_HIGH, false, target, targetType);
        goToMonitoringServerPage(target, targetType);
        verifyMonitoringStat("webSecurity", webAppSecurityDeploymentData, webAppSecurityDeploymentHeader);
        setMonitorLevel("Security", MONITOR_LEVEL_OFF, false, target, targetType);
    }

    private void monitoringHttpServiceStats(String target, String targetType) {
        final String virtualStatsHeader = "Virtual Server Statistics : server";
        final String requestStatsHeader = "Request Statistics : server";
        final String virtualStatsData = "Hosts";
        final String requestStatsData = "RequestCount";

        final String fileCacheStatsHeader = "File Cache Statistics : admin-listener";
        final String keepAliveStatsHeader = "Keep Alive Statistics : admin-listener";
        final String connectionQueueStatsHeader = "Connection Queue Statistics : admin-listener";
        final String threadPoolStatsHeader = "Thread Pool Statistics : admin-listener";
        final String fileCacheStatsData = "OpenCacheEntriesCount";
        final String keepAliveStatsData = "CountFlushes";
        final String connectionQueueStatsData = "CountOverflows";
        final String threadPoolStatsData = "CoreThreads";

        String dropDownId = "propertyForm:propertyContentPage:propertySheet:viewPropertySection:VsProp:View_list";

        setMonitorLevel("HTTP Service", MONITOR_LEVEL_HIGH, false, target, targetType);
        goToMonitoringServerPage(target, targetType);

        selectDropdownOption(dropDownId, "server");
        waitForPageLoad(virtualStatsHeader, 10000);

        verifyMonitoringStat("virtualServerStats", virtualStatsData, virtualStatsHeader);
        verifyMonitoringStat("httpServiceStats", requestStatsData, requestStatsHeader);

        selectDropdownOption(dropDownId, "admin-listener");
        waitForPageLoad(fileCacheStatsHeader, 10000);
        verifyMonitoringStat("fileCacheStats", fileCacheStatsData, fileCacheStatsHeader);
        verifyMonitoringStat("keepAliveStats", keepAliveStatsData, keepAliveStatsHeader);
        verifyMonitoringStat("connectionQueueStats", connectionQueueStatsData, connectionQueueStatsHeader);
        verifyMonitoringStat("threadPoolStats", threadPoolStatsData, threadPoolStatsHeader);

        setMonitorLevel("HTTP Service", MONITOR_LEVEL_OFF, false, target, targetType);
    }

    private void verifyMonitoringStat(String stat, String statData, String statHeader) {
        assertTrue(isTextPresent(statHeader));
        clickAndWait("propertyForm:propertyContentPage:basicTable:" + stat + ":_groupHeader:_groupPanelToggleButton:_groupPanelToggleButton_image", statData);
        pressButton("propertyForm:propertyContentPage:basicTable:" + stat + ":_groupHeader:_groupPanelToggleButton:_groupPanelToggleButton_image");
    }

    private void goToMonitoringApplicationsPage(String target, String targetType) {
        if (targetType.equals(TARGET_SERVER_TYPE)) {
            clickAndWait("treeForm:tree:applicationServer:applicationServer_link", TRIGGER_MONITORING_SERVER_GENERAL);
            clickAndWait("propertyForm:serverInstTabs:monitoring", TRIGGER_MONITORING_APPLICATIONS);
        } else if (targetType.equals(TARGET_STANDALONE_TYPE)) {
            clickAndWait("treeForm:tree:standaloneTreeNode:standaloneTreeNode_link", TRIGGER_STANDALONE_PAGE);
            clickAndWait(getLinkIdByLinkText("propertyForm:instancesTable", target), TRIGGER_STANDALONE_GENERAL_PAGE);
            clickAndWait("propertyForm:standaloneInstanceTabs:monitoring", TRIGGER_MONITORING_APPLICATIONS);
        }
    }

    private void ejbTimerMonitoring(String target, String targetType) {
        final String statsHeader = "EJB Singleton Bean Statistics : ejb-timer-sessiontimer-ejb.jar/TimerSingleton";
        final String statDescription = "Number of times EJB remove method is called";
        final String appName = "ejb-timer-sessiontimerApp";

        deployApp("src/test/resources/ejb-timer-sessiontimerApp.ear", targetType, appName);
        setMonitorLevel("Web Container", MONITOR_LEVEL_HIGH, false, target, targetType);
        setMonitorLevel("EJB Container", MONITOR_LEVEL_HIGH, false, target, targetType);
        goToMonitoringApplicationsPage(target, targetType);

        selectDropdownOption(MONITORING_APPLICATIONS_COMPONENT_DROPDOWN_ID, "TimerSingleton");
        waitForPageLoad(statsHeader, 10000);
        assertTrue(isTextPresent(statsHeader));
        assertTrue(isTextPresent(statDescription));

        setMonitorLevel("Web Container", MONITOR_LEVEL_OFF, false, target, targetType);
        setMonitorLevel("EJB Container", MONITOR_LEVEL_OFF, false, target, targetType);
        undeployApp(appName, targetType);
    }

    private void statefulAndStatelessBeanMonitoring(String target, String targetType) {
        final String statefulStatsHeader = "EJB Stateful Session Bean Statistics : ejb-ejb30-hello-session-ejb.jar/SfulEJB";
        final String statefulStatDescription = "Number of stateful session beans in MethodReady state";
        final String statelessStatsHeader = "EJB Stateless Session Bean Statistics : ejb-ejb30-hello-session-ejb.jar/SlessEJB";
        final String statelessStatDescription = "Number of stateless session beans in MethodReady state";
        String applicationName = "ejb-ejb30-hello-sessionApp";

        deployApp("src/test/resources/ejb-ejb30-hello-sessionApp.ear", targetType, applicationName);
        setMonitorLevel("Web Container", MONITOR_LEVEL_HIGH, false, target, targetType);
        setMonitorLevel("EJB Container", MONITOR_LEVEL_HIGH, false, target, targetType);
        goToMonitoringApplicationsPage(target, targetType);

        selectDropdownOption(MONITORING_APPLICATIONS_COMPONENT_DROPDOWN_ID, "SfulEJB");
        waitForPageLoad(statefulStatsHeader, 10000);
        assertTrue(isTextPresent(statefulStatsHeader));
        assertTrue(isTextPresent(statefulStatDescription));

        selectDropdownOption(MONITORING_APPLICATIONS_COMPONENT_DROPDOWN_ID, "SlessEJB");
        waitForPageLoad(statelessStatsHeader, 10000);
        assertTrue(isTextPresent(statelessStatsHeader));
        assertTrue(isTextPresent(statelessStatDescription));

        setMonitorLevel("Web Container", MONITOR_LEVEL_OFF, false, target, targetType);
        setMonitorLevel("EJB Container", MONITOR_LEVEL_OFF, false, target, targetType);
        undeployApp(applicationName, targetType);
    }

    private void deployApp(String appLocation, String target, String appName) {
        final String TRIGGER_APPLICATIONS = "Applications can be enterprise or web applications, or various kinds of modules.";

        clickAndWait("treeForm:tree:applications:applications_link", TRIGGER_APPLICATIONS);
        if (isTextPresent(appName)) {
            undeployApp(appName, target);
        }
        clickAndWaitForElement("propertyForm:deployTable:topActionsGroup1:deployButton", "form:sheet1:section1:prop1:fileupload");
        File war = new File(appLocation);
        try {
            selectFile("form:sheet1:section1:prop1:fileupload", war.toURL().toString());
        } catch (MalformedURLException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }
        //waitForCondition("document.getElementById('form:war:psection:nameProp:appName').value == '" + appName + "'", 300000);
        assertEquals(appName, getFieldValue("form:war:psection:nameProp:appName"));
        clickAndWait("form:title:topButtons:uploadButton", TRIGGER_APPLICATIONS);
        assertTrue(isTextPresent(appName));
    }

    private void undeployApp(String applicationName, String target) {
        final String TRIGGER_APPLICATIONS = "Applications can be enterprise or web applications, or various kinds of modules.";
        clickAndWait("treeForm:tree:applications:applications_link", TRIGGER_APPLICATIONS);
        selectTableRowByValue("propertyForm:deployTable", applicationName);
        pressButton("propertyForm:deployTable:topActionsGroup1:button1");
        getConfirmation();
        waitForPageLoad(applicationName, true);
    }
}

Other Glassfish examples (source code examples)

Here is a short list of links related to this Glassfish MonitoringTest.java source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.