org.teiid.rhq.plugin.VDBComponent.java Source code

Java tutorial

Introduction

Here is the source code for org.teiid.rhq.plugin.VDBComponent.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.plugin;

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 java.util.Set;

import javax.naming.NamingException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jboss.deployers.spi.management.ManagementView;
import org.jboss.managed.api.ComponentType;
import org.jboss.managed.api.ManagedComponent;
import org.jboss.managed.api.ManagedObject;
import org.jboss.managed.api.ManagedProperty;
import org.jboss.managed.plugins.ManagedObjectImpl;
import org.jboss.metatype.api.types.MetaType;
import org.jboss.metatype.api.types.SimpleMetaType;
import org.jboss.metatype.api.values.CollectionValueSupport;
import org.jboss.metatype.api.values.CompositeValueSupport;
import org.jboss.metatype.api.values.EnumValueSupport;
import org.jboss.metatype.api.values.GenericValue;
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.mc4j.ems.connection.EmsConnection;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.ConfigurationUpdateStatus;
import org.rhq.core.domain.configuration.Property;
import org.rhq.core.domain.configuration.PropertyList;
import org.rhq.core.domain.configuration.PropertyMap;
import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.domain.measurement.AvailabilityType;
import org.rhq.core.domain.measurement.MeasurementDataNumeric;
import org.rhq.core.domain.measurement.MeasurementDataTrait;
import org.rhq.core.domain.measurement.MeasurementReport;
import org.rhq.core.domain.measurement.MeasurementScheduleRequest;
import org.rhq.core.pluginapi.configuration.ConfigurationFacet;
import org.rhq.core.pluginapi.configuration.ConfigurationUpdateReport;
import org.rhq.core.pluginapi.inventory.CreateResourceReport;
import org.rhq.core.pluginapi.inventory.ResourceContext;
import org.rhq.plugins.jbossas5.connection.ProfileServiceConnection;
import org.teiid.rhq.admin.DQPManagementView;
import org.teiid.rhq.plugin.util.PluginConstants;
import org.teiid.rhq.plugin.util.ProfileServiceUtil;
import org.teiid.rhq.plugin.util.PluginConstants.Operation;
import org.teiid.rhq.plugin.util.PluginConstants.ComponentType.Platform;
import org.teiid.rhq.plugin.util.PluginConstants.ComponentType.VDB;

/**
 * Component class for a Teiid VDB
 * 
 */
public class VDBComponent extends Facet {
    private final Log LOG = LogFactory.getLog(PluginConstants.DEFAULT_LOGGER_CATEGORY);

    /*
     * (non-Javadoc)
     * 
     * @seeorg.teiid.rhq.plugin.Facet#start(org.rhq.core.pluginapi.inventory.
     * ResourceContext)
     */
    @Override
    public void start(ResourceContext context) {
        this.setComponentName(context.getPluginConfiguration().getSimpleValue("fullName", null));
        this.resourceConfiguration = context.getPluginConfiguration();
        this.componentType = PluginConstants.ComponentType.VDB.NAME;
        super.start(context);
    }

    @Override
    protected void setOperationArguments(String name, Configuration configuration, Map<String, Object> valueMap) {
        // Parameter logic for VDB Metrics
        String key = VDB.NAME;
        valueMap.put(key, this.resourceConfiguration.getSimpleValue("name", null));
        String version = VDB.VERSION;
        valueMap.put(version, this.resourceConfiguration.getSimpleValue(VDB.VERSION, null));

        // Parameter logic for VDB Operations
        if (name.equals(VDB.Operations.KILL_REQUEST)) {
            valueMap.put(Operation.Value.REQUEST_ID,
                    configuration.getSimple(Operation.Value.REQUEST_ID).getLongValue());
            valueMap.put(Operation.Value.SESSION_ID,
                    configuration.getSimple(Operation.Value.SESSION_ID).getLongValue());
        } else if (name.equals(VDB.Operations.CLEAR_CACHE)) {
            valueMap.put(Operation.Value.CACHE_TYPE,
                    configuration.getSimple(Operation.Value.CACHE_TYPE).getStringValue());
        } else if (name.equals(Platform.Operations.KILL_SESSION)) {
            valueMap.put(Operation.Value.SESSION_ID,
                    configuration.getSimple(Operation.Value.SESSION_ID).getLongValue());
        } else if (name.equals(Platform.Operations.KILL_SESSION)) {
            valueMap.put(Operation.Value.SESSION_ID,
                    configuration.getSimple(Operation.Value.SESSION_ID).getLongValue());
        } else if (name.equals(VDB.Operations.RELOAD_MATVIEW)) {
            valueMap.put(Operation.Value.MATVIEW_SCHEMA,
                    configuration.getSimple(Operation.Value.MATVIEW_SCHEMA).getStringValue());
            valueMap.put(Operation.Value.MATVIEW_TABLE,
                    configuration.getSimple(Operation.Value.MATVIEW_TABLE).getStringValue());
            valueMap.put(Operation.Value.INVALIDATE_MATVIEW,
                    configuration.getSimple(Operation.Value.INVALIDATE_MATVIEW).getBooleanValue());
        }
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.teiid.rhq.plugin.Facet#getAvailability()
     */
    @Override
    public AvailabilityType getAvailability() {
        // TODO Remove vdb version after no longer viable in Teiid
        String version = this.resourceConfiguration.getSimpleValue("version", null);
        String status = DQPManagementView.getVDBStatus(getConnection(), this.name);
        if (status.equals("ACTIVE")) {
            return AvailabilityType.UP;
        }

        return AvailabilityType.DOWN;
    }

    @Override
    protected void setMetricArguments(String name, Configuration configuration, Map<String, Object> valueMap) {
        // Parameter logic for VDB Metrics
        String key = VDB.NAME;
        valueMap.put(key, this.name);
    }

    @Override
    public void getValues(MeasurementReport report, Set<MeasurementScheduleRequest> requests) throws Exception {

        DQPManagementView view = new DQPManagementView();

        Map<String, Object> valueMap = new HashMap<String, Object>();
        setMetricArguments(VDB.NAME, null, valueMap);

        for (MeasurementScheduleRequest request : requests) {
            String name = request.getName();
            LOG.debug("Measurement name = " + name); //$NON-NLS-1$

            Object metricReturnObject = view.getMetric(getConnection(), getComponentType(),
                    this.getComponentIdentifier(), name, valueMap);

            try {
                if (request.getName().equals(PluginConstants.ComponentType.VDB.Metrics.ERROR_COUNT)) {
                    String message = "";
                    if (((Integer) metricReturnObject) > 0) {
                        message = "** There are " + ((Integer) metricReturnObject)
                                + " errors reported for this VDB. See the Configuration tab for details. **";
                    } else {
                        message = "** There are no errors reported for this VDB. **";
                    }

                    report.addData(new MeasurementDataTrait(request, message));
                } else {
                    if (request.getName().equals(PluginConstants.ComponentType.VDB.Metrics.QUERY_COUNT)) {
                        report.addData(new MeasurementDataTrait(request, (String) metricReturnObject));
                    } else {
                        if (request.getName().equals(PluginConstants.ComponentType.VDB.Metrics.SESSION_COUNT)) {
                            report.addData(new MeasurementDataNumeric(request, (Double) metricReturnObject));
                        } else {
                            if (request.getName().equals(PluginConstants.ComponentType.VDB.Metrics.STATUS)) {
                                if (((String) metricReturnObject).equals("ACTIVE")) {
                                    report.addData(new MeasurementDataTrait(request, "UP"));
                                } else {
                                    report.addData(new MeasurementDataTrait(request, "DOWN"));
                                }
                            } else {
                                if (request.getName()
                                        .equals(PluginConstants.ComponentType.VDB.Metrics.LONG_RUNNING_QUERIES)) {
                                    report.addData(
                                            new MeasurementDataNumeric(request, (Double) metricReturnObject));
                                }
                            }

                        }
                    }
                }

            } catch (Exception e) {
                LOG.error("Failed to obtain measurement [" + name //$NON-NLS-1$
                        + "]. Cause: " + e); //$NON-NLS-1$
                // throw(e);
            }
        }

    }

    @Override
    String getComponentType() {
        return PluginConstants.ComponentType.VDB.NAME;
    }

    /**
     * The plugin container will call this method when it has a new
     * configuration for your managed resource. Your plugin will re-configure
     * the managed resource in your own custom way, setting its configuration
     * based on the new values of the given configuration.
     * 
     * @see ConfigurationFacet#updateResourceConfiguration(ConfigurationUpdateReport)
     */
    public void updateResourceConfiguration(ConfigurationUpdateReport report) {

        Configuration resourceConfig = report.getConfiguration();
        resourceConfiguration = resourceConfig.deepCopy();

        // First update simple properties
        super.updateResourceConfiguration(report);

        // Then update models
        ManagementView managementView = null;
        ComponentType componentType = new ComponentType(PluginConstants.ComponentType.VDB.TYPE,
                PluginConstants.ComponentType.VDB.SUBTYPE);

        ManagedComponent managedComponent = null;
        CollectionValueSupport modelsMetaValue = null;
        report.setStatus(ConfigurationUpdateStatus.SUCCESS);
        try {

            managementView = getConnection().getManagementView();
            managedComponent = managementView.getComponent(this.name, componentType);
            modelsMetaValue = (CollectionValueSupport) managedComponent.getProperty("models").getValue();
            GenericValue[] models = (GenericValue[]) modelsMetaValue.getElements();
            List<Property> multiSourceModelsPropertyList = resourceConfiguration.getList("multiSourceModels")
                    .getList();
            List<Property> singleSourceModelsPropertyList = resourceConfiguration.getList("singleSourceModels")
                    .getList();
            ArrayList<List<Property>> sourceMappingList = new ArrayList<List<Property>>();
            sourceMappingList.add(singleSourceModelsPropertyList);
            sourceMappingList.add(multiSourceModelsPropertyList);
            PropertyMap model = null;
            Iterator<List<Property>> sourceMappingListIterator = sourceMappingList.iterator();
            while (sourceMappingListIterator.hasNext()) {
                List<Property> sourceList = sourceMappingListIterator.next();
                for (int i = 0; i < sourceList.size(); i++) {
                    model = (PropertyMap) sourceList.get(i);
                    String sourceName = ((PropertySimple) model.get("sourceName")).getStringValue(); //$NON-NLS-1$
                    if (sourceName.equals("See below"))
                        continue; // This is a multisource model which we will
                                  // handle separately
                    String modelName = ((PropertySimple) model.get("name")) //$NON-NLS-1$
                            .getStringValue();
                    String dsName = ((PropertySimple) model.get("jndiName")) //$NON-NLS-1$
                            .getStringValue();

                    ManagedObject managedModel = null;
                    if (models != null && models.length != 0) {
                        for (GenericValue genValue : models) {
                            ManagedObject mo = (ManagedObject) ((GenericValueSupport) genValue).getValue();
                            String name = ProfileServiceUtil.getSimpleValue(mo, "name", String.class); //$NON-NLS-1$
                            if (modelName.equals(name)) {
                                managedModel = mo;
                                break;
                            }
                        }
                    }

                    ManagedProperty sourceMappings = null;
                    if (managedModel != null) {

                        sourceMappings = managedModel.getProperty("sourceMappings");//$NON-NLS-1$

                        if (sourceMappings != null) {
                            CollectionValueSupport mappings = (CollectionValueSupport) sourceMappings.getValue();
                            GenericValue[] mappingsArray = (GenericValue[]) mappings.getElements();
                            for (GenericValue sourceGenValue : mappingsArray) {
                                ManagedObject sourceMo = (ManagedObject) ((GenericValueSupport) sourceGenValue)
                                        .getValue();
                                String sName = ProfileServiceUtil.getSimpleValue(sourceMo, "name", String.class);//$NON-NLS-1$
                                if (sName.equals(sourceName)) {
                                    // set the jndi name for the ds.
                                    ManagedProperty jndiProperty = sourceMo.getProperty("connectionJndiName"); //$NON-NLS-1$
                                    jndiProperty.setValue(ProfileServiceUtil.wrap(SimpleMetaType.STRING, dsName));
                                    break;
                                }
                            }
                        }
                    }
                }
            }

            try {
                managementView.updateComponent(managedComponent);
                managementView.load();
            } catch (Exception e) {
                LOG.error("Unable to update component [" + managedComponent.getName() + "] of type " + componentType
                        + ".", e);
                report.setStatus(ConfigurationUpdateStatus.FAILURE);
                report.setErrorMessageFromThrowable(e);
            }
        } catch (Exception e) {
            LOG.error("Unable to process update request", e);
            report.setStatus(ConfigurationUpdateStatus.FAILURE);
            report.setErrorMessageFromThrowable(e);
        }

    }

    @Override
    public Configuration loadResourceConfiguration() {

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

        String vdbName = ProfileServiceUtil.getSimpleValue(mcVdb, "name", String.class);
        Integer vdbVersion = ProfileServiceUtil.getSimpleValue(mcVdb, "version", Integer.class);
        String vdbDescription = ProfileServiceUtil.getSimpleValue(mcVdb, "description", String.class);
        String vdbStatus = ProfileServiceUtil.getSimpleValue(mcVdb, "status", String.class);
        String connectionType = ProfileServiceUtil.getSimpleValue(mcVdb, "connectionType", String.class);
        String vdbURL = ProfileServiceUtil.getSimpleValue(mcVdb, "url", String.class);

        // Get plugin config map for models
        Configuration configuration = resourceContext.getPluginConfiguration();

        configuration.put(new PropertySimple("name", vdbName));
        configuration.put(new PropertySimple("version", vdbVersion));
        configuration.put(new PropertySimple("description", vdbDescription));
        configuration.put(new PropertySimple("status", vdbStatus));
        configuration.put(new PropertySimple("url", vdbURL));
        configuration.put(new PropertySimple("connectionType", connectionType));

        try {
            getTranslators(mcVdb, configuration);
        } catch (Exception e) {
            final String msg = "Exception in loadResourceConfiguration(): " + e.getMessage(); //$NON-NLS-1$
            LOG.error(msg, e);
        }

        getModels(mcVdb, configuration);

        return configuration;

    }

    @Override
    public CreateResourceReport createResource(CreateResourceReport createResourceReport) {

        createContentBasedResource(createResourceReport);
        return createResourceReport;
    }

    /**
     * @param mcVdb
     * @param configuration
     * @throws Exception
     */
    private void getModels(ManagedComponent mcVdb, Configuration configuration) {
        // Get models from VDB
        ManagedProperty property = mcVdb.getProperty("models");
        CollectionValueSupport valueSupport = (CollectionValueSupport) property.getValue();
        MetaValue[] metaValues = valueSupport.getElements();

        PropertyList sourceModelsList = new PropertyList("singleSourceModels");
        configuration.put(sourceModelsList);

        PropertyList multiSourceModelsList = new PropertyList("multiSourceModels");
        configuration.put(multiSourceModelsList);

        PropertyList logicalModelsList = new PropertyList("logicalModels");
        configuration.put(logicalModelsList);

        PropertyList errorList = new PropertyList("errorList");
        configuration.put(errorList);

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

            Boolean isSource = Boolean.TRUE;
            try {
                isSource = ProfileServiceUtil.booleanValue(managedObject.getProperty("source").getValue());
            } catch (Exception e) {
                LOG.error(e.getMessage());
            }

            Boolean supportMultiSource = Boolean.TRUE;
            try {
                supportMultiSource = ProfileServiceUtil
                        .booleanValue(managedObject.getProperty("supportsMultiSourceBindings").getValue());
            } catch (Exception e) {
                LOG.error(e.getMessage());
            }

            String modelName = managedObject.getName();
            ManagedProperty connectorBinding = managedObject.getProperty("sourceMappings");
            Collection<Map<String, String>> sourceList = new ArrayList<Map<String, String>>();

            getSourceMappingValue(connectorBinding.getValue(), sourceList);

            String visibility = ((SimpleValueSupport) managedObject.getProperty("visible").getValue()).getValue()
                    .toString();
            String type = ((EnumValueSupport) managedObject.getProperty("modelType").getValue()).getValue()
                    .toString();

            // Get any model errors/warnings
            MetaValue errors = managedObject.getProperty("errors").getValue();
            if (errors != null) {
                CollectionValueSupport errorValueSupport = (CollectionValueSupport) errors;
                MetaValue[] errorArray = errorValueSupport.getElements();

                for (MetaValue error : errorArray) {
                    GenericValueSupport errorGenValueSupport = (GenericValueSupport) error;

                    ManagedObject errorMo = (ManagedObject) errorGenValueSupport.getValue();
                    String severity = ((SimpleValue) errorMo.getProperty("severity").getValue()).getValue()
                            .toString();
                    String message = ((SimpleValue) errorMo.getProperty("value").getValue()).getValue().toString();

                    PropertyMap errorMap = new PropertyMap("errorMap", new PropertySimple("severity", severity),
                            new PropertySimple("message", message));
                    errorList.add(errorMap);
                }
            }

            for (Map<String, String> sourceMap : sourceList) {

                if (isSource) {
                    String sourceName = (String) sourceMap.get("name");
                    String jndiName = (String) sourceMap.get("jndiName");
                    String translatorName = (String) sourceMap.get("translatorName");
                    PropertyMap multiSourceModel = null;

                    PropertyMap model = null;
                    if (supportMultiSource) {
                        // TODO need to loop through multisource models
                        multiSourceModel = new PropertyMap("map", new PropertySimple("name", modelName),
                                new PropertySimple("sourceName", sourceName),
                                new PropertySimple("jndiName", jndiName),
                                new PropertySimple("translatorName", translatorName));

                        multiSourceModelsList.add(multiSourceModel);

                        model = new PropertyMap("map", new PropertySimple("name", modelName),
                                new PropertySimple("sourceName", "See below"),
                                new PropertySimple("jndiName", "See below"),
                                new PropertySimple("translatorName", "See below"),
                                new PropertySimple("visibility", visibility),
                                new PropertySimple("supportsMultiSource", true));
                        sourceModelsList.add(model);
                    } else {
                        model = new PropertyMap("map", new PropertySimple("name", modelName),
                                new PropertySimple("sourceName", sourceName),
                                new PropertySimple("jndiName", jndiName),
                                new PropertySimple("translatorName", translatorName),
                                new PropertySimple("visibility", visibility),
                                new PropertySimple("supportsMultiSource", supportMultiSource));
                        sourceModelsList.add(model);
                    }
                } else {
                    PropertyMap model = new PropertyMap("map", new PropertySimple("name", modelName),
                            new PropertySimple("type", type), new PropertySimple("visibility", visibility));

                    logicalModelsList.add(model);
                }
            }
        }
    }

    /**
     * @param <T>
     * @param pValue
     * @param list
     */
    public static <T> void getSourceMappingValue(MetaValue pValue, Collection<Map<String, String>> list) {
        Map<String, String> map = new HashMap<String, String>();
        list.add(map);
        MetaType metaType = pValue.getMetaType();
        if (metaType.isCollection()) {
            for (MetaValue value : ((CollectionValueSupport) pValue).getElements()) {
                GenericValueSupport genValue = ((GenericValueSupport) value);
                ManagedObject mo = (ManagedObject) genValue.getValue();
                String sourceName = mo.getName();
                String jndi = ((SimpleValue) mo.getProperty("connectionJndiName").getValue()).getValue().toString();
                String translatorName = ((SimpleValue) mo.getProperty("translatorName").getValue()).getValue()
                        .toString();
                map.put("name", sourceName);
                map.put("jndiName", jndi);
                map.put("translatorName", translatorName);
            }
        } else {
            throw new IllegalStateException(pValue + " is not a Collection type");
        }
    }

    /**
     * @param mcVdb
     * @param configuration
     * @throws Exception 
     */
    private void getTranslators(ManagedComponent mcVdb, Configuration configuration) throws Exception {
        // Get models from VDB
        ManagedProperty property = mcVdb.getProperty("overrideTranslators");
        if (property == null) {
            return;
        }
        CollectionValueSupport valueSupport = (CollectionValueSupport) property.getValue();
        MetaValue[] metaValues = valueSupport.getElements();

        PropertyList translatorsList = new PropertyList("translators");
        configuration.put(translatorsList);

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

            String translatorName = ProfileServiceUtil.getSimpleValue(managedObject, "name", String.class);
            String translatorType = ProfileServiceUtil.getSimpleValue(managedObject, "type", String.class);
            ManagedProperty properties = managedObject.getProperty("property");

            if (properties != null) {
                CollectionValueSupport props = (CollectionValueSupport) properties.getValue();
                for (MetaValue propertyMetaData : props) {
                    String propertyName = ProfileServiceUtil
                            .stringValue(((CompositeValueSupport) propertyMetaData).get("name"));
                    String propertyValue = ProfileServiceUtil
                            .stringValue(((CompositeValueSupport) propertyMetaData).get("value"));
                    PropertyMap translatorMap = null;

                    translatorMap = new PropertyMap("translatorMap", new PropertySimple("name", translatorName),
                            new PropertySimple("type", translatorType),
                            new PropertySimple("propertyName", propertyName),
                            new PropertySimple("propertyValue", propertyValue));
                    // Only want translator name and value to show up for the
                    // first row,
                    // so we will blank them out here.
                    translatorName = "";
                    translatorType = "";
                    translatorsList.add(translatorMap);
                }
            }
        }
    }

    /**
     * @param <T>
     * @param pValue
     * @param list
     */
    public static <T> void getPropertyValues(MetaValue pValue, Collection<Map<String, String>> list) {
        Map<String, String> map = new HashMap<String, String>();
        list.add(map);
        MetaType metaType = pValue.getMetaType();
        if (metaType.isCollection()) {
            for (MetaValue value : ((CollectionValueSupport) pValue).getElements()) {
                CompositeValueSupport compValue = ((CompositeValueSupport) value);
                for (MetaValue propValue : compValue.values()) {
                    String propertyName = ((CompositeValueSupport) propValue).get("name").toString();
                    String propertyValue = ((CompositeValueSupport) propValue).get("value").toString();
                    map.put("name", propertyName);
                    map.put("value", propertyValue);
                }
            }
        } else {
            throw new IllegalStateException(pValue + " is not a Collection type");
        }
    }

    @Override
    public ProfileServiceConnection getConnection() {
        return ((PlatformComponent) this.resourceContext.getParentResourceComponent()).getConnection();
    }

    @Override
    public EmsConnection getEmsConnection() {
        // TODO Auto-generated method stub
        return null;
    }

}