示例#1
0
  public static OMElement eventFormatterConfigurationToOM(
      EventFormatterConfiguration eventFormatterConfiguration) {

    OMFactory factory = OMAbstractFactory.getOMFactory();
    OMElement eventFormatterConfigElement =
        factory.createOMElement(new QName(EventFormatterConstants.EF_ELE_ROOT_ELEMENT));
    eventFormatterConfigElement.declareDefaultNamespace(EventFormatterConstants.EF_CONF_NS);

    eventFormatterConfigElement.addAttribute(
        EventFormatterConstants.EF_ATTR_NAME,
        eventFormatterConfiguration.getEventFormatterName(),
        null);

    if (eventFormatterConfiguration.isEnableStatistics()) {
      eventFormatterConfigElement.addAttribute(
          EventFormatterConstants.TM_ATTR_STATISTICS,
          EventFormatterConstants.TM_VALUE_ENABLE,
          null);
    } else if (!eventFormatterConfiguration.isEnableStatistics()) {
      eventFormatterConfigElement.addAttribute(
          EventFormatterConstants.TM_ATTR_STATISTICS,
          EventFormatterConstants.TM_VALUE_DISABLE,
          null);
    }

    if (eventFormatterConfiguration.isEnableTracing()) {
      eventFormatterConfigElement.addAttribute(
          EventFormatterConstants.TM_ATTR_TRACING, EventFormatterConstants.TM_VALUE_ENABLE, null);
    } else if (!eventFormatterConfiguration.isEnableTracing()) {
      eventFormatterConfigElement.addAttribute(
          EventFormatterConstants.TM_ATTR_TRACING, EventFormatterConstants.TM_VALUE_DISABLE, null);
    }

    // From properties - Stream Name and version
    OMElement fromPropertyElement =
        factory.createOMElement(new QName(EventFormatterConstants.EF_ELE_FROM_PROPERTY));
    fromPropertyElement.declareDefaultNamespace(EventFormatterConstants.EF_CONF_NS);
    fromPropertyElement.addAttribute(
        EventFormatterConstants.EF_ATTR_STREAM_NAME,
        eventFormatterConfiguration.getFromStreamName(),
        null);
    fromPropertyElement.addAttribute(
        EventFormatterConstants.EF_ATTR_VERSION,
        eventFormatterConfiguration.getFromStreamVersion(),
        null);
    eventFormatterConfigElement.addChild(fromPropertyElement);

    OMElement mappingOMElement =
        EventFormatterServiceValueHolder.getMappingFactoryMap()
            .get(eventFormatterConfiguration.getOutputMapping().getMappingType())
            .constructOutputMappingOM(eventFormatterConfiguration.getOutputMapping(), factory);

    eventFormatterConfigElement.addChild(mappingOMElement);

    OMElement toOMElement =
        factory.createOMElement(new QName(EventFormatterConstants.EF_ELE_TO_PROPERTY));
    toOMElement.declareDefaultNamespace(EventFormatterConstants.EF_CONF_NS);

    ToPropertyConfiguration toPropertyConfiguration =
        eventFormatterConfiguration.getToPropertyConfiguration();
    toOMElement.addAttribute(
        EventFormatterConstants.EF_ATTR_TA_NAME,
        toPropertyConfiguration.getTransportAdaptorName(),
        null);
    toOMElement.addAttribute(
        EventFormatterConstants.EF_ATTR_TA_TYPE,
        toPropertyConfiguration.getTransportAdaptorType(),
        null);

    OutputTransportAdaptorMessageConfiguration outputTransportMessageConfiguration =
        toPropertyConfiguration.getOutputTransportAdaptorMessageConfiguration();

    if (outputTransportMessageConfiguration != null) {
      Map<String, String> wso2EventOutputPropertyMap =
          outputTransportMessageConfiguration.getOutputMessageProperties();
      for (Map.Entry<String, String> propertyEntry : wso2EventOutputPropertyMap.entrySet()) {
        OMElement propertyElement =
            factory.createOMElement(new QName(EventFormatterConstants.EF_ELE_PROPERTY));
        propertyElement.declareDefaultNamespace(EventFormatterConstants.EF_CONF_NS);
        propertyElement.addAttribute(
            EventFormatterConstants.EF_ATTR_NAME, propertyEntry.getKey(), null);
        propertyElement.setText(propertyEntry.getValue());
        toOMElement.addChild(propertyElement);
      }
    }
    eventFormatterConfigElement.addChild(toOMElement);
    return eventFormatterConfigElement;
  }
示例#2
0
  /**
   * @param outputTransportMessageConfiguration - topic name to publish messages
   * @param message - is and Object[]{Event, EventDefinition}
   * @param outputTransportAdaptorConfiguration
   * @param tenantId
   */
  public void publish(
      OutputTransportAdaptorMessageConfiguration outputTransportMessageConfiguration,
      Object message,
      OutputTransportAdaptorConfiguration outputTransportAdaptorConfiguration,
      int tenantId) {
    if (message instanceof Map) {

      ConcurrentHashMap<String, TransportAdaptorInfo> cassandraClusterCache =
          tenantedCassandraClusterCache.get(tenantId);
      if (null == cassandraClusterCache) {
        cassandraClusterCache = new ConcurrentHashMap<String, TransportAdaptorInfo>();
        if (null != tenantedCassandraClusterCache.putIfAbsent(tenantId, cassandraClusterCache)) {
          cassandraClusterCache = tenantedCassandraClusterCache.get(tenantId);
        }
      }

      TransportAdaptorInfo transportAdaptorInfo =
          cassandraClusterCache.get(outputTransportAdaptorConfiguration.getName());
      if (null == transportAdaptorInfo) {
        Map<String, String> properties = outputTransportAdaptorConfiguration.getOutputProperties();

        Map<String, String> credentials = new HashMap<String, String>();
        credentials.put(
            "username",
            properties.get(CassandraTransportAdaptorConstants.TRANSPORT_CASSANDRA_USER_NAME));
        credentials.put(
            "password",
            properties.get(CassandraTransportAdaptorConstants.TRANSPORT_CASSANDRA_PASSWORD));

        Cluster cluster =
            HFactory.createCluster(
                properties.get(CassandraTransportAdaptorConstants.TRANSPORT_CASSANDRA_CLUSTER_NAME),
                new CassandraHostConfigurator(
                    properties.get(CassandraTransportAdaptorConstants.TRANSPORT_CASSANDRA_HOSTNAME)
                        + ":"
                        + properties.get(
                            CassandraTransportAdaptorConstants.TRANSPORT_CASSANDRA_PORT)),
                credentials);

        String indexAllColumnsString =
            properties.get(
                CassandraTransportAdaptorConstants.TRANSPORT_CASSANDRA_INDEX_ALL_COLUMNS);
        boolean indexAllColumns = false;
        if (indexAllColumnsString != null && indexAllColumnsString.equals("true")) {
          indexAllColumns = true;
        }
        transportAdaptorInfo = new TransportAdaptorInfo(cluster, indexAllColumns);
        if (null
            != cassandraClusterCache.putIfAbsent(
                outputTransportAdaptorConfiguration.getName(), transportAdaptorInfo)) {
          transportAdaptorInfo =
              cassandraClusterCache.get(outputTransportAdaptorConfiguration.getName());
        } else {
          log.info("Initiated Cassandra Writer " + outputTransportAdaptorConfiguration.getName());
        }
      }

      String keySpaceName =
          outputTransportMessageConfiguration
              .getOutputMessageProperties()
              .get(CassandraTransportAdaptorConstants.TRANSPORT_CASSANDRA_KEY_SPACE_NAME);
      String columnFamilyName =
          outputTransportMessageConfiguration
              .getOutputMessageProperties()
              .get(CassandraTransportAdaptorConstants.TRANSPORT_CASSANDRA_COLUMN_FAMILY_NAME);
      MessageInfo messageInfo =
          transportAdaptorInfo.getMessageInfoMap().get(outputTransportMessageConfiguration);
      if (null == messageInfo) {
        Keyspace keyspace =
            HFactory.createKeyspace(keySpaceName, transportAdaptorInfo.getCluster());
        messageInfo = new MessageInfo(keyspace);
        if (null
            != transportAdaptorInfo
                .getMessageInfoMap()
                .putIfAbsent(outputTransportMessageConfiguration, messageInfo)) {
          messageInfo =
              transportAdaptorInfo.getMessageInfoMap().get(outputTransportMessageConfiguration);
        }
      }

      if (transportAdaptorInfo.getCluster().describeKeyspace(keySpaceName) == null) {
        BasicColumnFamilyDefinition columnFamilyDefinition = new BasicColumnFamilyDefinition();
        columnFamilyDefinition.setKeyspaceName(keySpaceName);
        columnFamilyDefinition.setName(columnFamilyName);
        columnFamilyDefinition.setComparatorType(ComparatorType.UTF8TYPE);
        columnFamilyDefinition.setDefaultValidationClass(ComparatorType.UTF8TYPE.getClassName());
        columnFamilyDefinition.setKeyValidationClass(ComparatorType.UTF8TYPE.getClassName());

        ColumnFamilyDefinition cfDef = new ThriftCfDef(columnFamilyDefinition);

        KeyspaceDefinition keyspaceDefinition =
            HFactory.createKeyspaceDefinition(
                keySpaceName,
                "org.apache.cassandra.locator.SimpleStrategy",
                1,
                Arrays.asList(cfDef));
        transportAdaptorInfo.getCluster().addKeyspace(keyspaceDefinition);
        KeyspaceDefinition fromCluster =
            transportAdaptorInfo.getCluster().describeKeyspace(keySpaceName);
        messageInfo.setColumnFamilyDefinition(
            new BasicColumnFamilyDefinition(fromCluster.getCfDefs().get(0)));
      } else {
        KeyspaceDefinition fromCluster =
            transportAdaptorInfo.getCluster().describeKeyspace(keySpaceName);
        for (ColumnFamilyDefinition columnFamilyDefinition : fromCluster.getCfDefs()) {
          if (columnFamilyDefinition.getName().equals(columnFamilyName)) {
            messageInfo.setColumnFamilyDefinition(
                new BasicColumnFamilyDefinition(columnFamilyDefinition));
            break;
          }
        }
      }

      Mutator<String> mutator = HFactory.createMutator(messageInfo.getKeyspace(), sser);
      String uuid = UUID.randomUUID().toString();
      for (Map.Entry<String, Object> entry : ((Map<String, Object>) message).entrySet()) {

        if (transportAdaptorInfo.isIndexAllColumns()
            && !messageInfo.getColumnNames().contains(entry.getKey())) {
          BasicColumnFamilyDefinition columnFamilyDefinition =
              messageInfo.getColumnFamilyDefinition();
          BasicColumnDefinition columnDefinition = new BasicColumnDefinition();
          columnDefinition.setName(StringSerializer.get().toByteBuffer(entry.getKey()));
          columnDefinition.setIndexType(ColumnIndexType.KEYS);
          columnDefinition.setIndexName(
              keySpaceName + "_" + columnFamilyName + "_" + entry.getKey() + "_Index");
          columnDefinition.setValidationClass(ComparatorType.UTF8TYPE.getClassName());
          columnFamilyDefinition.addColumnDefinition(columnDefinition);
          transportAdaptorInfo
              .getCluster()
              .updateColumnFamily(new ThriftCfDef(columnFamilyDefinition));
          messageInfo.getColumnNames().add(entry.getKey());
        }
        mutator.insert(
            uuid,
            columnFamilyName,
            HFactory.createStringColumn(entry.getKey(), entry.getValue().toString()));
      }

      mutator.execute();
    }
  }
示例#3
0
  public static EventFormatterConfiguration getEventFormatterConfiguration(
      OMElement eventFormatterConfigOMElement, int tenantId, String mappingType)
      throws EventFormatterConfigurationException, EventFormatterValidationException {

    EventFormatterConfiguration eventFormatterConfiguration = new EventFormatterConfiguration();

    OMElement fromElement =
        eventFormatterConfigOMElement.getFirstChildWithName(
            new QName(
                EventFormatterConstants.EF_CONF_NS, EventFormatterConstants.EF_ELE_FROM_PROPERTY));
    OMElement mappingElement =
        eventFormatterConfigOMElement.getFirstChildWithName(
            new QName(
                EventFormatterConstants.EF_CONF_NS,
                EventFormatterConstants.EF_ELE_MAPPING_PROPERTY));
    OMElement toElement =
        eventFormatterConfigOMElement.getFirstChildWithName(
            new QName(
                EventFormatterConstants.EF_CONF_NS, EventFormatterConstants.EF_ELE_TO_PROPERTY));

    String fromStreamName =
        fromElement.getAttributeValue(new QName(EventFormatterConstants.EF_ATTR_STREAM_NAME));
    String fromStreamVersion =
        fromElement.getAttributeValue(new QName(EventFormatterConstants.EF_ATTR_VERSION));

    String toTransportAdaptorName =
        toElement.getAttributeValue(new QName(EventFormatterConstants.EF_ATTR_TA_NAME));
    String toTransportAdaptorType =
        toElement.getAttributeValue(new QName(EventFormatterConstants.EF_ATTR_TA_TYPE));

    if (!validateTransportAdaptor(toTransportAdaptorName, toTransportAdaptorType, tenantId)) {
      throw new EventFormatterValidationException(
          "There is no any Transport Adaptor with this name "
              + toTransportAdaptorName
              + " which is a "
              + toTransportAdaptorType,
          toTransportAdaptorName);
    }

    if (!validateStreamDetails(fromStreamName, fromStreamVersion, tenantId)) {
      throw new EventFormatterValidationException(
          "There is no any stream called "
              + fromStreamName
              + " with the version "
              + fromStreamVersion,
          fromStreamName + ":" + fromStreamVersion);
    }

    OutputTransportAdaptorMessageConfiguration outputTransportMessageConfiguration =
        EventFormatterConfigurationHelper.getOutputTransportMessageConfiguration(
            toTransportAdaptorType);
    ToPropertyConfiguration toPropertyConfiguration = new ToPropertyConfiguration();
    toPropertyConfiguration.setTransportAdaptorName(toTransportAdaptorName);
    toPropertyConfiguration.setTransportAdaptorType(toTransportAdaptorType);

    Iterator toElementPropertyIterator =
        toElement.getChildrenWithName(
            new QName(EventFormatterConstants.EF_CONF_NS, EventFormatterConstants.EF_ELE_PROPERTY));

    while (toElementPropertyIterator.hasNext()) {
      OMElement toElementProperty = (OMElement) toElementPropertyIterator.next();
      String propertyName =
          toElementProperty.getAttributeValue(new QName(EventFormatterConstants.EF_ATTR_NAME));
      String propertyValue = toElementProperty.getText();
      outputTransportMessageConfiguration.addOutputMessageProperty(propertyName, propertyValue);
    }

    toPropertyConfiguration.setOutputTransportAdaptorMessageConfiguration(
        outputTransportMessageConfiguration);

    if (mappingType.equalsIgnoreCase(EventFormatterConstants.EF_WSO2EVENT_MAPPING_TYPE)) {
      if (!validateSupportedMapping(
          toTransportAdaptorName, toTransportAdaptorType, MessageType.WSO2EVENT)) {
        throw new EventFormatterConfigurationException(
            "WSO2Event Mapping is not supported by transport adaptor type "
                + toTransportAdaptorType);
      }
    } else if (mappingType.equalsIgnoreCase(EventFormatterConstants.EF_TEXT_MAPPING_TYPE)) {
      if (!validateSupportedMapping(
          toTransportAdaptorName, toTransportAdaptorType, MessageType.TEXT)) {
        throw new EventFormatterConfigurationException(
            "Text Mapping is not supported by transport adaptor type " + toTransportAdaptorType);
      }
    } else if (mappingType.equalsIgnoreCase(EventFormatterConstants.EF_MAP_MAPPING_TYPE)) {
      if (!validateSupportedMapping(
          toTransportAdaptorName, toTransportAdaptorType, MessageType.MAP)) {
        throw new EventFormatterConfigurationException(
            "Map Mapping is not supported by transport adaptor type " + toTransportAdaptorType);
      }
    } else if (mappingType.equalsIgnoreCase(EventFormatterConstants.EF_XML_MAPPING_TYPE)) {
      if (!validateSupportedMapping(
          toTransportAdaptorName, toTransportAdaptorType, MessageType.XML)) {
        throw new EventFormatterConfigurationException(
            "XML Mapping is not supported by transport adaptor type " + toTransportAdaptorType);
      }
    } else if (mappingType.equalsIgnoreCase(EventFormatterConstants.EF_JSON_MAPPING_TYPE)) {
      if (!validateSupportedMapping(
          toTransportAdaptorName, toTransportAdaptorType, MessageType.JSON)) {
        throw new EventFormatterConfigurationException(
            "JSON Mapping is not supported by transport adaptor type " + toTransportAdaptorType);
      }
    } else {
      String factoryClassName = getMappingTypeFactoryClass(mappingElement);
      if (factoryClassName == null) {
        throw new EventFormatterConfigurationException(
            "Corresponding mappingType " + mappingType + " is not valid");
      }

      Class factoryClass;
      try {
        factoryClass = Class.forName(factoryClassName);
        OutputMapperFactory outputMapperFactory = (OutputMapperFactory) factoryClass.newInstance();
        EventFormatterServiceValueHolder.getMappingFactoryMap()
            .putIfAbsent(mappingType, outputMapperFactory);
      } catch (ClassNotFoundException e) {
        throw new EventFormatterConfigurationException("Class not found exception occurred ", e);
      } catch (InstantiationException e) {
        throw new EventFormatterConfigurationException("Instantiation exception occurred ", e);
      } catch (IllegalAccessException e) {
        throw new EventFormatterConfigurationException("Illegal exception occurred ", e);
      }
    }

    eventFormatterConfiguration.setEventFormatterName(
        eventFormatterConfigOMElement.getAttributeValue(
            new QName(EventFormatterConstants.EF_ATTR_NAME)));

    if (eventFormatterConfigOMElement.getAttributeValue(
                new QName(EventFormatterConstants.TM_ATTR_STATISTICS))
            != null
        && eventFormatterConfigOMElement
            .getAttributeValue(new QName(EventFormatterConstants.TM_ATTR_STATISTICS))
            .equals(EventFormatterConstants.TM_VALUE_ENABLE)) {
      eventFormatterConfiguration.setEnableStatistics(true);
    } else if (eventFormatterConfigOMElement.getAttributeValue(
                new QName(EventFormatterConstants.TM_ATTR_STATISTICS))
            != null
        && eventFormatterConfigOMElement
            .getAttributeValue(new QName(EventFormatterConstants.TM_ATTR_STATISTICS))
            .equals(EventFormatterConstants.TM_VALUE_DISABLE)) {
      eventFormatterConfiguration.setEnableStatistics(false);
    }

    if (eventFormatterConfigOMElement.getAttributeValue(
                new QName(EventFormatterConstants.TM_ATTR_TRACING))
            != null
        && eventFormatterConfigOMElement
            .getAttributeValue(new QName(EventFormatterConstants.TM_ATTR_TRACING))
            .equals(EventFormatterConstants.TM_VALUE_ENABLE)) {
      eventFormatterConfiguration.setEnableTracing(true);
    } else if (eventFormatterConfigOMElement.getAttributeValue(
                new QName(EventFormatterConstants.TM_ATTR_TRACING))
            != null
        && eventFormatterConfigOMElement
            .getAttributeValue(new QName(EventFormatterConstants.TM_ATTR_TRACING))
            .equals(EventFormatterConstants.TM_VALUE_DISABLE)) {
      eventFormatterConfiguration.setEnableTracing(false);
    }

    eventFormatterConfiguration.setFromStreamName(fromStreamName);
    eventFormatterConfiguration.setFromStreamVersion(fromStreamVersion);
    eventFormatterConfiguration.setOutputMapping(
        EventFormatterServiceValueHolder.getMappingFactoryMap()
            .get(mappingType)
            .constructOutputMapping(mappingElement));
    eventFormatterConfiguration.setToPropertyConfiguration(toPropertyConfiguration);
    return eventFormatterConfiguration;
  }