org.teiid.rhq.admin.DQPManagementView.java Source code

Java tutorial

Introduction

Here is the source code for org.teiid.rhq.admin.DQPManagementView.java

Source

/*
 * JBoss, Home of Professional Open Source.
 * See the COPYRIGHT.txt file distributed with this work for information
 * regarding copyright ownership.  Some portions may be licensed
 * to Red Hat, Inc. under one or more contributor license agreements.
 * 
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 * 
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 * 02110-1301 USA.
 */
package org.teiid.rhq.admin;

import java.lang.reflect.Method;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.naming.NamingException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jboss.managed.api.ManagedComponent;
import org.jboss.managed.api.ManagedOperation;
import org.jboss.managed.api.ManagedProperty;
import org.jboss.managed.plugins.ManagedObjectImpl;
import org.jboss.metatype.api.types.MetaType;
import org.jboss.metatype.api.values.CollectionValueSupport;
import org.jboss.metatype.api.values.CompositeValue;
import org.jboss.metatype.api.values.CompositeValueSupport;
import org.jboss.metatype.api.values.GenericValueSupport;
import org.jboss.metatype.api.values.MetaValue;
import org.jboss.metatype.api.values.SimpleValue;
import org.jboss.metatype.api.values.SimpleValueSupport;
import org.rhq.plugins.jbossas5.connection.ProfileServiceConnection;
import org.teiid.adminapi.Admin;
import org.teiid.adminapi.Request.ProcessingState;
import org.teiid.adminapi.VDB.Status;
import org.teiid.rhq.plugin.objects.ExecutedResult;
import org.teiid.rhq.plugin.objects.RequestMetadata;
import org.teiid.rhq.plugin.objects.SessionMetadata;
import org.teiid.rhq.plugin.objects.TransactionMetadata;
import org.teiid.rhq.plugin.util.DeploymentUtils;
import org.teiid.rhq.plugin.util.PluginConstants;
import org.teiid.rhq.plugin.util.ProfileServiceUtil;
import org.teiid.rhq.plugin.util.PluginConstants.ComponentType.Platform;
import org.teiid.rhq.plugin.util.PluginConstants.ComponentType.VDB;

public class DQPManagementView implements PluginConstants {

    private static ManagedComponent mc = null;
    private static final Log LOG = LogFactory.getLog(PluginConstants.DEFAULT_LOGGER_CATEGORY);

    public static final String VDB_EXT = ".vdb"; //$NON-NLS-1$
    public static final String DYNAMIC_VDB_EXT = "-vdb.xml"; //$NON-NLS-1$

    //Session metadata fields
    private static final String SECURITY_DOMAIN = "securityDomain"; //$NON-NLS-1$
    private static final String VDB_VERSION = "VDBVersion"; //$NON-NLS-1$
    private static final String VDB_NAME = "VDBName"; //$NON-NLS-1$
    private static final String USER_NAME = "userName"; //$NON-NLS-1$
    private static final String SESSION_ID = "sessionId"; //$NON-NLS-1$
    private static final String LAST_PING_TIME = "lastPingTime"; //$NON-NLS-1$
    private static final String IP_ADDRESS = "IPAddress"; //$NON-NLS-1$
    private static final String CLIENT_HOST_NAME = "clientHostName"; //$NON-NLS-1$
    private static final String CREATED_TIME = "createdTime"; //$NON-NLS-1$
    private static final String APPLICATION_NAME = "applicationName"; //$NON-NLS-1$

    //Request metadata fields
    private static final String TRANSACTION_ID = "transactionId"; //$NON-NLS-1$
    private static final String NODE_ID = "nodeId"; //$NON-NLS-1$
    private static final String SOURCE_REQUEST = "sourceRequest"; //$NON-NLS-1$
    private static final String COMMAND = "command"; //$NON-NLS-1$
    private static final String START_TIME = "startTime"; //$NON-NLS-1$
    private static final String EXECUTION_ID = "executionId"; //$NON-NLS-1$
    private static final String STATE = "processingState"; //$NON-NLS-1$

    //Transaction metadata fields
    private static final String SCOPE = "scope"; //$NON-NLS-1$
    private static final String ASSOCIATED_SESSION = "associatedSession"; //$NON-NLS-1$

    public DQPManagementView() {
    }

    /*
     * Metric methods
     */
    public Object getMetric(ProfileServiceConnection connection, String componentType, String identifier,
            String metric, Map<String, Object> valueMap) throws Exception {
        Object resultObject = new Object();

        if (componentType.equals(PluginConstants.ComponentType.Platform.NAME)) {
            resultObject = getPlatformMetric(connection, componentType, metric, valueMap);
        } else if (componentType.equals(PluginConstants.ComponentType.VDB.NAME)) {
            resultObject = getVdbMetric(connection, componentType, identifier, metric, valueMap);
        }
        return resultObject;
    }

    private Object getPlatformMetric(ProfileServiceConnection connection, String componentType, String metric,
            Map<String, Object> valueMap) throws Exception {

        Object resultObject = new Object();

        if (metric.equals(PluginConstants.ComponentType.Platform.Metrics.QUERY_COUNT)) {
            resultObject = new Double(getQueryCount(connection).doubleValue());
        } else if (metric.equals(PluginConstants.ComponentType.Platform.Metrics.SESSION_COUNT)) {
            resultObject = new Double(getSessionCount(connection).doubleValue());
        } else if (metric.equals(PluginConstants.ComponentType.Platform.Metrics.LONG_RUNNING_QUERIES)) {
            Collection<RequestMetadata> longRunningQueries = new ArrayList<RequestMetadata>();
            getRequestCollectionValue(getLongRunningQueries(connection), longRunningQueries);
            resultObject = new Double(longRunningQueries.size());
        } else if (metric.equals(PluginConstants.ComponentType.Platform.Metrics.BUFFER_USAGE)) {
            try {
                resultObject = ProfileServiceUtil.doubleValue(getUsedBufferSpace(connection));
            } catch (Exception e) {
                final String msg = "Exception executing operation: " + Platform.Operations.GET_BUFFER_USAGE; //$NON-NLS-1$
                LOG.error(msg, e);
            }
        } else if (metric.startsWith(Admin.Cache.PREPARED_PLAN_CACHE.toString() + ".") //$NON-NLS-1$
                || metric.startsWith(Admin.Cache.QUERY_SERVICE_RESULT_SET_CACHE.toString() + ".")) { //$NON-NLS-1$
            return getCacheProperty(connection, metric);
        }
        return resultObject;
    }

    private Object getCacheProperty(ProfileServiceConnection connection, String metric) {
        int dotIndex = metric.indexOf('.');
        String cacheType = metric.substring(0, dotIndex);
        String property = metric.substring(dotIndex + 1);
        CompositeValueSupport mv = (CompositeValueSupport) getCacheStats(connection, cacheType);
        MetaValue v = mv.get(property);
        return ((SimpleValue) v).getValue();
    }

    private Object getVdbMetric(ProfileServiceConnection connection, String componentType, String identifier,
            String metric, Map<String, Object> valueMap) throws Exception {

        Object resultObject = new Object();

        if (metric.equals(PluginConstants.ComponentType.VDB.Metrics.ERROR_COUNT)) {
            resultObject = getErrorCount(connection, (String) valueMap.get(VDB.NAME));
        } else if (metric.equals(PluginConstants.ComponentType.VDB.Metrics.STATUS)) {
            resultObject = getVDBStatus(connection, (String) valueMap.get(VDB.NAME));
        } else if (metric.equals(PluginConstants.ComponentType.VDB.Metrics.QUERY_COUNT)) {
            resultObject = new Double(getQueryCount(connection).doubleValue());
        } else if (metric.equals(PluginConstants.ComponentType.VDB.Metrics.SESSION_COUNT)) {
            resultObject = new Double(getSessionCount(connection).doubleValue());
        } else if (metric.equals(PluginConstants.ComponentType.VDB.Metrics.LONG_RUNNING_QUERIES)) {
            Collection<RequestMetadata> longRunningQueries = new ArrayList<RequestMetadata>();
            getRequestCollectionValue(getLongRunningQueries(connection), longRunningQueries);
            resultObject = new Double(longRunningQueries.size());
        }
        return resultObject;
    }

    /*
     * Operation methods
     */

    public void executeOperation(ProfileServiceConnection connection, ExecutedResult operationResult,
            final Map<String, Object> valueMap) throws Exception {

        if (operationResult.getComponentType().equals(PluginConstants.ComponentType.Platform.NAME)) {
            executePlatformOperation(connection, operationResult, operationResult.getOperationName(), valueMap);
        } else if (operationResult.getComponentType().equals(PluginConstants.ComponentType.VDB.NAME)) {
            executeVdbOperation(connection, operationResult, operationResult.getOperationName(), valueMap);
        }
    }

    private void executePlatformOperation(ProfileServiceConnection connection, ExecutedResult operationResult,
            final String operationName, final Map<String, Object> valueMap) throws Exception {
        Collection<RequestMetadata> resultObject = new ArrayList<RequestMetadata>();
        Collection<SessionMetadata> activeSessionsCollection = new ArrayList<SessionMetadata>();
        Collection<TransactionMetadata> transactionsCollection = new ArrayList<TransactionMetadata>();

        if (operationName.equals(Platform.Operations.GET_LONGRUNNINGQUERIES)) {
            List<String> fieldNameList = operationResult.getFieldNameList();
            getRequestCollectionValue(getLongRunningQueries(connection), resultObject);
            operationResult.setContent(createReportResultList(fieldNameList, resultObject.iterator()));
        } else if (operationName.equals(Platform.Operations.GET_SESSIONS)) {
            List<String> fieldNameList = operationResult.getFieldNameList();
            MetaValue sessionMetaValue = getSessions(connection);
            getSessionCollectionValue(sessionMetaValue, activeSessionsCollection);
            operationResult.setContent(createReportResultList(fieldNameList, activeSessionsCollection.iterator()));
        } else if (operationName.equals(Platform.Operations.GET_REQUESTS)) {
            List<String> fieldNameList = operationResult.getFieldNameList();
            MetaValue requestMetaValue = getRequests(connection);
            getRequestCollectionValue(requestMetaValue, resultObject);
            operationResult.setContent(createReportResultList(fieldNameList, resultObject.iterator()));
        } else if (operationName.equals(Platform.Operations.GET_TRANSACTIONS)) {
            List<String> fieldNameList = operationResult.getFieldNameList();
            MetaValue transactionMetaValue = getTransactions(connection);
            getTransactionCollectionValue(transactionMetaValue, transactionsCollection);
            operationResult.setContent(createReportResultList(fieldNameList, resultObject.iterator()));
        } else if (operationName.equals(Platform.Operations.KILL_TRANSACTION)) {
            String transactionID = (String) valueMap.get(Operation.Value.TRANSACTION_ID);
            MetaValue[] args = new MetaValue[] { SimpleValueSupport.wrap(transactionID) };
            try {
                executeManagedOperation(connection, getRuntimeEngineDeployer(connection, mc),
                        Platform.Operations.KILL_TRANSACTION, args);
            } catch (Exception e) {
                final String msg = "Exception executing operation: " + Platform.Operations.KILL_TRANSACTION; //$NON-NLS-1$
                LOG.error(msg, e);
            }
        } else if (operationName.equals(Platform.Operations.KILL_SESSION)) {
            String sessionID = (String) valueMap.get(Operation.Value.SESSION_ID);
            MetaValue[] args = new MetaValue[] { SimpleValueSupport.wrap(sessionID) };
            try {
                executeManagedOperation(connection, getRuntimeEngineDeployer(connection, mc),
                        Platform.Operations.KILL_SESSION, args);
            } catch (Exception e) {
                final String msg = "Exception executing operation: " + Platform.Operations.KILL_SESSION; //$NON-NLS-1$
                LOG.error(msg, e);
            }
        } else if (operationName.equals(Platform.Operations.KILL_REQUEST)) {
            Long requestID = (Long) valueMap.get(Operation.Value.REQUEST_ID);
            String sessionID = (String) valueMap.get(Operation.Value.SESSION_ID);
            MetaValue[] args = new MetaValue[] { SimpleValueSupport.wrap(sessionID),
                    SimpleValueSupport.wrap(requestID) };
            try {
                executeManagedOperation(connection, getRuntimeEngineDeployer(connection, mc),
                        Platform.Operations.KILL_REQUEST, args);
            } catch (Exception e) {
                final String msg = "Exception executing operation: " + Platform.Operations.KILL_REQUEST; //$NON-NLS-1$
                LOG.error(msg, e);
            }
        } else if (operationName.equals(Platform.Operations.DEPLOY_VDB_BY_URL)) {
            String vdbUrl = (String) valueMap.get(Operation.Value.VDB_URL);
            String deployName = (String) valueMap.get(Operation.Value.VDB_DEPLOY_NAME);
            Object vdbVersion = valueMap.get(Operation.Value.VDB_VERSION);
            //strip off vdb extension if user added it
            if (deployName.endsWith(VDB_EXT)) {
                deployName = deployName.substring(0, deployName.lastIndexOf(VDB_EXT));
            }
            if (vdbVersion != null) {
                deployName = deployName + "." + ((Integer) vdbVersion).toString() + VDB_EXT; //$NON-NLS-1$ 
            }
            //add vdb extension if there was no version
            if (!deployName.endsWith(VDB_EXT) && !deployName.endsWith(DYNAMIC_VDB_EXT)) {
                deployName = deployName + VDB_EXT;
            }

            try {
                URL url = new URL(vdbUrl);
                DeploymentUtils.deployArchive(deployName, connection.getDeploymentManager(), url, false);
            } catch (Exception e) {
                final String msg = "Exception executing operation: " + Platform.Operations.DEPLOY_VDB_BY_URL; //$NON-NLS-1$
                LOG.error(msg, e);
                throw new RuntimeException(e);
            }
        }
    }

    private void executeVdbOperation(ProfileServiceConnection connection, ExecutedResult operationResult,
            final String operationName, final Map<String, Object> valueMap) throws Exception {
        Collection<ArrayList<String>> sqlResultsObject = new ArrayList<ArrayList<String>>();
        Collection<RequestMetadata> resultObject = new ArrayList<RequestMetadata>();
        Collection<SessionMetadata> activeSessionsCollection = new ArrayList<SessionMetadata>();
        String vdbName = (String) valueMap.get(PluginConstants.ComponentType.VDB.NAME);
        vdbName = formatVdbName(vdbName);
        String vdbVersion = (String) valueMap.get(PluginConstants.ComponentType.VDB.VERSION);

        if (operationName.equals(VDB.Operations.GET_PROPERTIES)) {
            List<String> fieldNameList = operationResult.getFieldNameList();
            getProperties(connection, PluginConstants.ComponentType.VDB.NAME);
            operationResult.setContent(createReportResultList(fieldNameList, resultObject.iterator()));
        } else if (operationName.equals(VDB.Operations.GET_SESSIONS)) {
            List<String> fieldNameList = operationResult.getFieldNameList();
            MetaValue sessionMetaValue = getSessions(connection);
            getSessionCollectionValueForVDB(sessionMetaValue, activeSessionsCollection, vdbName);
            operationResult.setContent(createReportResultList(fieldNameList, activeSessionsCollection.iterator()));
        } else if (operationName.equals(VDB.Operations.GET_REQUESTS)) {
            List<String> fieldNameList = operationResult.getFieldNameList();
            MetaValue requestMetaValue = getRequestsForVDB(connection, vdbName, Integer.parseInt(vdbVersion));
            getRequestCollectionValue(requestMetaValue, resultObject);
            operationResult.setContent(createReportResultList(fieldNameList, resultObject.iterator()));
        } else if (operationName.equals(VDB.Operations.GET_MATVIEWS)) {
            List<String> fieldNameList = operationResult.getFieldNameList();
            MetaValue resultsMetaValue = executeMaterializedViewQuery(connection, vdbName,
                    Integer.parseInt(vdbVersion));
            getResultsCollectionValue(resultsMetaValue, sqlResultsObject);
            operationResult
                    .setContent(createReportResultListForMatViewQuery(fieldNameList, sqlResultsObject.iterator()));
        } else if (operationName.equals(VDB.Operations.CLEAR_CACHE)) {

            try {
                executeClearCache(connection, vdbName, Integer.parseInt(vdbVersion),
                        (String) valueMap.get(Operation.Value.CACHE_TYPE));

            } catch (Exception e) {
                //Some failure during Clear Cache. Set message here since it has already been logged.
                operationResult.setContent("failure - see log for details"); //$NON-NLS-1$
            }

            //If no exceptions, we assume the clear cache worked
            operationResult.setContent("cache successfully cleared!"); //$NON-NLS-1$

        } else if (operationName.equals(VDB.Operations.RELOAD_MATVIEW)) {
            MetaValue resultsMetaValue = reloadMaterializedView(connection, vdbName, Integer.parseInt(vdbVersion),
                    (String) valueMap.get(Operation.Value.MATVIEW_SCHEMA),
                    (String) valueMap.get(Operation.Value.MATVIEW_TABLE),
                    (Boolean) valueMap.get(Operation.Value.INVALIDATE_MATVIEW));
            if (resultsMetaValue == null) {
                operationResult.setContent("failure - see log for details"); //$NON-NLS-1$
            } else {
                operationResult.setContent("data successfully refreshed!"); //$NON-NLS-1$
            }
        }

    }

    /*
     * Helper methods
     */

    private String formatVdbName(String vdbName) {

        return vdbName.substring(0, vdbName.lastIndexOf(".")); //$NON-NLS-1$
    }

    public MetaValue getProperties(ProfileServiceConnection connection, final String component) {

        MetaValue propertyValue = null;
        MetaValue args = null;

        try {
            propertyValue = executeManagedOperation(connection, getRuntimeEngineDeployer(connection, mc),
                    PluginConstants.Operation.GET_PROPERTIES, args);
        } catch (Exception e) {
            final String msg = "Exception executing operation: " + Platform.Operations.GET_PROPERTIES; //$NON-NLS-1$
            LOG.error(msg, e);
        }

        return propertyValue;

    }

    protected MetaValue getRequests(ProfileServiceConnection connection) {

        MetaValue requestsCollection = null;
        MetaValue args = null;

        try {
            requestsCollection = executeManagedOperation(connection, getRuntimeEngineDeployer(connection, mc),
                    PluginConstants.Operation.GET_REQUESTS, args);
        } catch (Exception e) {
            final String msg = "Exception executing operation: " + Platform.Operations.GET_REQUESTS; //$NON-NLS-1$
            LOG.error(msg, e);
        }

        return requestsCollection;

    }

    protected void executeClearCache(ProfileServiceConnection connection, String vdbName, int vdbVersion,
            String cacheType) throws Exception {

        MetaValue[] args = new MetaValue[] { SimpleValueSupport.wrap(cacheType), SimpleValueSupport.wrap(vdbName),
                SimpleValueSupport.wrap(vdbVersion) };

        try {
            executeManagedOperation(connection, getRuntimeEngineDeployer(connection, mc),
                    VDB.Operations.CLEAR_CACHE, args);
        } catch (Exception e) {
            final String msg = "Exception executing operation: " + VDB.Operations.EXECUTE_QUERIES; //$NON-NLS-1$
            LOG.error(msg, e);
            throw e;
        }
    }

    protected MetaValue executeMaterializedViewQuery(ProfileServiceConnection connection, String vdbName,
            int vdbVersion) {

        MetaValue resultsCollection = null;
        MetaValue[] args = new MetaValue[] { SimpleValueSupport.wrap(vdbName), SimpleValueSupport.wrap(vdbVersion),
                SimpleValueSupport.wrap(Operation.Value.MAT_VIEW_QUERY),
                SimpleValueSupport.wrap(Long.parseLong("9999999")) }; //$NON-NLS-1$

        try {
            resultsCollection = executeManagedOperation(connection, getRuntimeEngineDeployer(connection, mc),
                    VDB.Operations.EXECUTE_QUERIES, args);
        } catch (Exception e) {
            final String msg = "Exception executing operation: " + VDB.Operations.EXECUTE_QUERIES; //$NON-NLS-1$
            LOG.error(msg, e);
        }

        return resultsCollection;

    }

    protected MetaValue reloadMaterializedView(ProfileServiceConnection connection, String vdbName, int vdbVersion,
            String schema, String table, Boolean invalidate) {

        MetaValue result = null;
        String matView = schema + "." + table; //$NON-NLS-1$
        String query = PluginConstants.Operation.Value.MAT_VIEW_REFRESH;
        query = query.replace("param1", matView); //$NON-NLS-1$
        query = query.replace("param2", invalidate.toString()); //$NON-NLS-1$
        MetaValue[] args = new MetaValue[] { SimpleValueSupport.wrap(vdbName), SimpleValueSupport.wrap(vdbVersion),
                SimpleValueSupport.wrap(query), SimpleValueSupport.wrap(Long.parseLong("9999999")) }; //$NON-NLS-1$

        try {
            result = executeManagedOperation(connection, getRuntimeEngineDeployer(connection, mc),
                    VDB.Operations.EXECUTE_QUERIES, args);
        } catch (Exception e) {
            final String msg = "Exception executing operation: " + VDB.Operations.RELOAD_MATVIEW; //$NON-NLS-1$
            LOG.error(msg, e);

        }

        return result;

    }

    protected MetaValue getRequestsForVDB(ProfileServiceConnection connection, String vdbName, int vdbVersion) {

        MetaValue requestsCollection = null;
        MetaValue[] args = new MetaValue[] { SimpleValueSupport.wrap(vdbName),
                SimpleValueSupport.wrap(vdbVersion) };

        try {
            requestsCollection = executeManagedOperation(connection, getRuntimeEngineDeployer(connection, mc),
                    PluginConstants.ComponentType.VDB.Operations.GET_REQUESTS, args);
        } catch (Exception e) {
            final String msg = "Exception executing operation: " + Platform.Operations.GET_REQUESTS; //$NON-NLS-1$
            LOG.error(msg, e);
        }

        return requestsCollection;

    }

    protected MetaValue getTransactions(ProfileServiceConnection connection) {

        MetaValue transactionsCollection = null;
        MetaValue args = null;

        try {
            transactionsCollection = executeManagedOperation(connection, getRuntimeEngineDeployer(connection, mc),
                    Platform.Operations.GET_TRANSACTIONS, args);
        } catch (Exception e) {
            final String msg = "Exception executing operation: " + Platform.Operations.GET_TRANSACTIONS; //$NON-NLS-1$
            LOG.error(msg, e);
        }

        return transactionsCollection;

    }

    public MetaValue getSessions(ProfileServiceConnection connection) {

        MetaValue sessionCollection = null;
        MetaValue args = null;

        try {
            sessionCollection = executeManagedOperation(connection, getRuntimeEngineDeployer(connection, mc),
                    PluginConstants.Operation.GET_SESSIONS, args);
        } catch (Exception e) {
            final String msg = "Exception executing operation: " + Platform.Operations.GET_SESSIONS; //$NON-NLS-1$
            LOG.error(msg, e);
        }
        return sessionCollection;

    }

    public static String getVDBStatus(ProfileServiceConnection connection, String vdbName) {

        ManagedComponent mcVdb = null;
        try {
            mcVdb = ProfileServiceUtil.getManagedComponent(connection, new org.jboss.managed.api.ComponentType(
                    PluginConstants.ComponentType.VDB.TYPE, PluginConstants.ComponentType.VDB.SUBTYPE), vdbName);
        } catch (NamingException e) {
            final String msg = "NamingException in getVDBStatus(): " + e.getExplanation(); //$NON-NLS-1$
            LOG.error(msg, e);
        } catch (Exception e) {
            final String msg = "Exception in getVDBStatus(): " + e.getMessage(); //$NON-NLS-1$
            LOG.error(msg, e);
        }

        if (mcVdb == null) {
            return Status.INACTIVE.toString();
        }

        return ProfileServiceUtil.getSimpleValue(mcVdb, "status", String.class); //$NON-NLS-1$
    }

    public static MetaValue executeManagedOperation(ProfileServiceConnection connection, ManagedComponent mc,
            String operation, MetaValue... args) throws Exception {

        for (ManagedOperation mo : mc.getOperations()) {
            String opName = mo.getName();
            if (opName.equals(operation)) {
                try {
                    if (args.length == 1 && args[0] == null) {
                        return mo.invoke();
                    }
                    return mo.invoke(args);
                } catch (Exception e) {
                    final String msg = "Exception getting the AdminApi in " + operation; //$NON-NLS-1$
                    LOG.error(msg, e);
                    throw new RuntimeException(e);
                }
            }
        }
        throw new Exception("No operation found with given name = " + operation); //$NON-NLS-1$

    }

    /**
     * @param mc
     * @return
     */
    private static ManagedComponent getRuntimeEngineDeployer(ProfileServiceConnection connection,
            ManagedComponent mc) {
        try {
            mc = ProfileServiceUtil.getRuntimeEngineDeployer(connection);
        } catch (NamingException e) {
            final String msg = "NamingException getting the DQPManagementView"; //$NON-NLS-1$
            LOG.error(msg, e);
        } catch (Exception e1) {
            final String msg = "Exception getting the DQPManagementView"; //$NON-NLS-1$
            LOG.error(msg, e1);
        }
        return mc;
    }

    /**
     * @param mc
     * @return
     */
    private static ManagedComponent getBufferService(ProfileServiceConnection connection, ManagedComponent mc) {
        try {
            mc = ProfileServiceUtil.getBufferService(connection);
        } catch (NamingException e) {
            final String msg = "NamingException getting the SessionService"; //$NON-NLS-1$
            LOG.error(msg, e);
        } catch (Exception e1) {
            final String msg = "Exception getting the SessionService"; //$NON-NLS-1$
            LOG.error(msg, e1);
        }
        return mc;
    }

    public static MetaValue getManagedProperty(ProfileServiceConnection connection, ManagedComponent mc,
            String property) throws Exception {

        ManagedProperty managedProperty = null;
        try {
            managedProperty = mc.getProperty(property);
        } catch (Exception e) {
            final String msg = "Exception getting the AdminApi in " + property; //$NON-NLS-1$
            LOG.error(msg, e);
        }

        if (managedProperty != null) {
            return managedProperty.getValue();
        }

        throw new Exception("No property found with given name =" + property); //$NON-NLS-1$
    }

    private Integer getQueryCount(ProfileServiceConnection connection) throws Exception {

        Integer count = new Integer(0);

        MetaValue requests = null;
        Collection<RequestMetadata> requestsCollection = new ArrayList<RequestMetadata>();

        requests = getRequests(connection);

        getRequestCollectionValue(requests, requestsCollection);

        if (!requestsCollection.isEmpty()) {
            count = requestsCollection.size();
        }

        return count;
    }

    private Integer getSessionCount(ProfileServiceConnection connection) throws Exception {

        Collection<SessionMetadata> activeSessionsCollection = new ArrayList<SessionMetadata>();
        MetaValue sessionMetaValue = getSessions(connection);
        getSessionCollectionValue(sessionMetaValue, activeSessionsCollection);
        return activeSessionsCollection.size();
    }

    /**
     * @param mcVdb
     * @return count
     * @throws Exception
     */
    private int getErrorCount(ProfileServiceConnection connection, String vdbName) {

        ManagedComponent mcVdb = null;
        try {
            mcVdb = ProfileServiceUtil.getManagedComponent(connection, new org.jboss.managed.api.ComponentType(
                    PluginConstants.ComponentType.VDB.TYPE, PluginConstants.ComponentType.VDB.SUBTYPE), vdbName);
        } catch (NamingException e) {
            final String msg = "NamingException in getVDBStatus(): " + e.getExplanation(); //$NON-NLS-1$
            LOG.error(msg, e);
        } catch (Exception e) {
            final String msg = "Exception in getVDBStatus(): " + e.getMessage(); //$NON-NLS-1$
            LOG.error(msg, e);
        }

        // Get models from VDB
        int count = 0;
        ManagedProperty property = mcVdb.getProperty("models"); //$NON-NLS-1$
        CollectionValueSupport valueSupport = (CollectionValueSupport) property.getValue();
        MetaValue[] metaValues = valueSupport.getElements();

        for (MetaValue value : metaValues) {
            GenericValueSupport genValueSupport = (GenericValueSupport) value;
            ManagedObjectImpl managedObject = (ManagedObjectImpl) genValueSupport.getValue();

            // Get any model errors/warnings
            MetaValue errors = managedObject.getProperty("errors").getValue(); //$NON-NLS-1$
            if (errors != null) {
                CollectionValueSupport errorValueSupport = (CollectionValueSupport) errors;
                MetaValue[] errorArray = errorValueSupport.getElements();
                count += errorArray.length;
            }
        }
        return count;
    }

    protected MetaValue getCacheStats(ProfileServiceConnection connection, String type) {
        try {
            return executeManagedOperation(connection, getRuntimeEngineDeployer(connection, mc),
                    Platform.Operations.GET_CACHE_STATS, SimpleValueSupport.wrap(type));
        } catch (Exception e) {
            LOG.error("Exception executing operation: " + Platform.Operations.GET_CACHE_STATS, e); //$NON-NLS-1$
        }
        return null;
    }

    protected MetaValue getLongRunningQueries(ProfileServiceConnection connection) {

        MetaValue requestsCollection = null;
        MetaValue args = null;

        try {
            requestsCollection = executeManagedOperation(connection, getRuntimeEngineDeployer(connection, mc),
                    Platform.Operations.GET_LONGRUNNINGQUERIES, args);
        } catch (Exception e) {
            final String msg = "Exception executing operation: " + Platform.Operations.GET_LONGRUNNINGQUERIES; //$NON-NLS-1$
            LOG.error(msg, e);
        }

        return requestsCollection;
    }

    protected MetaValue getUsedBufferSpace(ProfileServiceConnection connection) {

        MetaValue usedBufferSpace = null;

        try {
            usedBufferSpace = getManagedProperty(connection, getBufferService(connection, mc),
                    Platform.Operations.GET_BUFFER_USAGE);
        } catch (Exception e) {
            final String msg = "Exception executing operation: " + Platform.Operations.GET_BUFFER_USAGE; //$NON-NLS-1$
            LOG.error(msg, e);
        }

        return usedBufferSpace;
    }

    private void getRequestCollectionValue(MetaValue pValue, Collection<RequestMetadata> list) throws Exception {
        MetaType metaType = pValue.getMetaType();
        if (metaType.isCollection()) {
            for (MetaValue value : ((CollectionValueSupport) pValue).getElements()) {
                if (value.getMetaType().isComposite()) {
                    RequestMetadata request = unwrapRequestMetaValue(value);
                    list.add(request);
                } else {
                    throw new IllegalStateException(pValue + " is not a Composite type"); //$NON-NLS-1$
                }
            }
        }
    }

    private void getResultsCollectionValue(MetaValue pValue, Collection<ArrayList<String>> list) throws Exception {
        MetaType metaType = pValue.getMetaType();
        if (metaType.isCollection()) {
            for (MetaValue value : ((CollectionValueSupport) pValue).getElements()) {
                if (value.getMetaType().isCollection()) {
                    ArrayList<String> row = new ArrayList<String>();
                    MetaValue[] metaValueArray = ((CollectionValueSupport) value).getElements();
                    for (MetaValue cell : metaValueArray) {
                        row.add(ProfileServiceUtil.stringValue(cell));
                    }
                    list.add(row);
                }
            }
        }
    }

    private void getResultsCollectionValueForMatViewRefresh(MetaValue pValue, Collection<ArrayList<String>> list)
            throws Exception {
        MetaType metaType = pValue.getMetaType();
        for (MetaValue value : ((CollectionValueSupport) pValue).getElements()) {
            if (value.getMetaType().isCollection()) {
                ArrayList<String> row = new ArrayList<String>();
                MetaValue[] metaValueArray = ((CollectionValueSupport) value).getElements();
                for (MetaValue cell : metaValueArray) {
                    row.add(ProfileServiceUtil.stringValue(cell));
                }
                list.add(row);
            }
        }
    }

    public <T> void getTransactionCollectionValue(MetaValue pValue, Collection<TransactionMetadata> list)
            throws Exception {
        MetaType metaType = pValue.getMetaType();
        if (metaType.isCollection()) {
            for (MetaValue value : ((CollectionValueSupport) pValue).getElements()) {
                if (value.getMetaType().isComposite()) {
                    TransactionMetadata transaction = unwrapTransactionMetaValue(value);
                    list.add(transaction);
                } else {
                    throw new IllegalStateException(pValue + " is not a Composite type"); //$NON-NLS-1$
                }
            }
        }
    }

    public <T> void getSessionCollectionValue(MetaValue pValue, Collection<SessionMetadata> list) throws Exception {
        MetaType metaType = pValue.getMetaType();
        if (metaType.isCollection()) {
            for (MetaValue value : ((CollectionValueSupport) pValue).getElements()) {
                if (value.getMetaType().isComposite()) {
                    SessionMetadata session = unwrapSessionMetaValue(value);
                    list.add(session);
                } else {
                    throw new IllegalStateException(pValue + " is not a Composite type"); //$NON-NLS-1$
                }
            }
        }
    }

    public <T> void getSessionCollectionValueForVDB(MetaValue pValue, Collection<SessionMetadata> list,
            String vdbName) throws Exception {
        MetaType metaType = pValue.getMetaType();
        if (metaType.isCollection()) {
            for (MetaValue value : ((CollectionValueSupport) pValue).getElements()) {
                if (value.getMetaType().isComposite()) {
                    if (ProfileServiceUtil.stringValue(((CompositeValueSupport) value).get("VDBName")) //$NON-NLS-1$
                            .equals(vdbName)) {
                        SessionMetadata session = unwrapSessionMetaValue(value);
                        list.add(session);
                    }
                } else {
                    throw new IllegalStateException(pValue + " is not a Composite type"); //$NON-NLS-1$
                }
            }
        }
    }

    private Collection createReportResultList(List fieldNameList, Iterator objectIter) {
        Collection reportResultList = new ArrayList();

        while (objectIter.hasNext()) {
            Object object = objectIter.next();

            Class cls = null;
            try {
                cls = object.getClass();
                Iterator methodIter = fieldNameList.iterator();
                Map reportValueMap = new HashMap<String, String>();
                while (methodIter.hasNext()) {
                    String fieldName = (String) methodIter.next();
                    String methodName = fieldName;
                    Method meth = cls.getMethod(methodName, (Class[]) null);
                    Object retObj = meth.invoke(object, (Object[]) null);
                    reportValueMap.put(fieldName, retObj);
                }
                reportResultList.add(reportValueMap);
            } catch (Throwable e) {
                System.err.println(e);
            }
        }
        return reportResultList;
    }

    private Collection createReportResultListForMatViewQuery(List fieldNameList, Iterator objectIter) {
        Collection reportResultList = new ArrayList();

        // Iterate through rows
        while (objectIter.hasNext()) {
            ArrayList<Object> columnValues = (ArrayList<Object>) objectIter.next();

            try {
                Iterator fieldIter = fieldNameList.iterator();
                Map reportValueMap = new HashMap<String, Object>();
                // Iterate through columns with a row
                for (Object columnValue : columnValues) {
                    String fieldName = (String) fieldIter.next();
                    reportValueMap.put(fieldName, columnValue);
                }
                reportResultList.add(reportValueMap);
            } catch (Throwable e) {
                System.err.println(e);
            }
        }
        return reportResultList;
    }

    public SessionMetadata unwrapSessionMetaValue(MetaValue metaValue) throws Exception {
        if (metaValue == null)
            return null;

        if (metaValue instanceof CompositeValue) {
            CompositeValueSupport compositeValue = (CompositeValueSupport) metaValue;

            SessionMetadata session = new SessionMetadata();
            session.setApplicationName(
                    (String) ProfileServiceUtil.stringValue(compositeValue.get(APPLICATION_NAME)));
            session.setCreatedTime((Long) ProfileServiceUtil.longValue(compositeValue.get(CREATED_TIME)));
            session.setClientHostName(
                    (String) ProfileServiceUtil.stringValue(compositeValue.get(CLIENT_HOST_NAME)));
            session.setIPAddress((String) ProfileServiceUtil.stringValue(compositeValue.get(IP_ADDRESS)));
            session.setLastPingTime((Long) ProfileServiceUtil.longValue(compositeValue.get(LAST_PING_TIME)));
            session.setSessionId((String) ProfileServiceUtil.stringValue(compositeValue.get(SESSION_ID)));
            session.setUserName((String) ProfileServiceUtil.stringValue(compositeValue.get(USER_NAME)));
            session.setVDBName((String) ProfileServiceUtil.stringValue(compositeValue.get(VDB_NAME)));
            session.setVDBVersion((Integer) ProfileServiceUtil.integerValue(compositeValue.get(VDB_VERSION)));
            session.setSecurityDomain((String) ProfileServiceUtil.stringValue(compositeValue.get(SECURITY_DOMAIN)));
            return session;
        }
        throw new IllegalStateException("Unable to unwrap session " + metaValue); //$NON-NLS-1$
    }

    public RequestMetadata unwrapRequestMetaValue(MetaValue metaValue) throws Exception {
        if (metaValue == null)
            return null;

        if (metaValue instanceof CompositeValue) {
            CompositeValue compositeValue = (CompositeValue) metaValue;

            RequestMetadata request = new RequestMetadata();
            request.setExecutionId((Long) ProfileServiceUtil.longValue(compositeValue.get(EXECUTION_ID)));
            request.setSessionId((String) ProfileServiceUtil.stringValue(compositeValue.get(SESSION_ID)));
            request.setStartTime((Long) ProfileServiceUtil.longValue(compositeValue.get(START_TIME)));
            request.setCommand((String) ProfileServiceUtil.stringValue(compositeValue.get(COMMAND)));
            request.setSourceRequest((Boolean) ProfileServiceUtil.booleanValue(compositeValue.get(SOURCE_REQUEST)));
            request.setNodeId((Integer) ProfileServiceUtil.integerValue(compositeValue.get(NODE_ID)));
            request.setTransactionId((String) ProfileServiceUtil.stringValue(compositeValue.get(TRANSACTION_ID)));
            request.setState((ProcessingState
                    .valueOf(ProfileServiceUtil.getSimpleValue(compositeValue.get(STATE), String.class))));
            return request;
        }
        throw new IllegalStateException("Unable to unwrap RequestMetadata " + metaValue); //$NON-NLS-1$
    }

    public TransactionMetadata unwrapTransactionMetaValue(MetaValue metaValue) throws Exception {
        if (metaValue == null)
            return null;

        if (metaValue instanceof CompositeValue) {
            CompositeValue compositeValue = (CompositeValue) metaValue;

            TransactionMetadata transaction = new TransactionMetadata();
            transaction.setAssociatedSession(
                    (String) ProfileServiceUtil.stringValue(compositeValue.get(ASSOCIATED_SESSION)));
            transaction.setCreatedTime((Long) ProfileServiceUtil.longValue(compositeValue.get(CREATED_TIME)));
            transaction.setScope((String) ProfileServiceUtil.stringValue(compositeValue.get(SCOPE)));
            transaction.setId((String) ProfileServiceUtil.stringValue(compositeValue.get("id"))); //$NON-NLS-1$
            return transaction;
        }
        throw new IllegalStateException("Unable to unwrap TransactionMetadata " + metaValue); //$NON-NLS-1$
    }

}