Menu
# builder = require 'xmlbuilder'

ActiveMQ Configure

module.exports = ->
  activemq = @config.ryba.activemq ?= {}

Environment

  activemq.version ?= '5.14.3'
  activemq.server ?= {}
  activemq.conf_dir ?= '/etc/activemq/conf'
  activemq.log_dir ?= '/var/log/activemq'
  activemq.data_dir ?= '/var/activemq/data'

Identities

  # Group
  activemq.group ?= {}
  activemq.group = name: activemq.group if typeof activemq.group is 'string'
  activemq.group.name ?= 'activemq'
  activemq.group.system ?= true
  # User
  activemq.user ?= {}
  activemq.user = name: activemq.user if typeof activemq.user is 'string'
  activemq.user.name ?= 'activemq'
  activemq.user.home ?= "/var/#{activemq.user.name}"
  activemq.user.system ?= true
  activemq.user.comment ?= 'ActiveMQ User'
  activemq.user.groups ?= 'hadoop'
  activemq.user.gid ?= activemq.group.name

Ports

  activemq.server.port ?= {}
  activemq.server.port.jms ?= '61616'
  activemq.server.port.ui ?= '8161'
  activemq.server.container_name ?= 'activemq_server'
  activemq.server.ports ?= {}
  activemq.server.ports.openwire ?= {}
  activemq.server.ports.openwire.protocol ?= 'tcp'
  activemq.server.ports.openwire.port ?= 61616
  activemq.server.ports.amqp ?= {}
  activemq.server.ports.amqp.protocol ?= 'amqp'
  activemq.server.ports.amqp.port ?= 5672
  activemq.server.ports.stomp ?= {}
  activemq.server.ports.stomp.protocol ?= 'stomp'
  activemq.server.ports.stomp.port ?= 61613
  activemq.server.ports.stomp ?= {}
  activemq.server.ports.stomp.protocol ?= 'stomp'
  activemq.server.ports.stomp.port ?= 61613
  activemq.server.ports.mqtt ?= {}
  activemq.server.ports.mqtt.protocol ?= 'mqtt'
  activemq.server.ports.mqtt.port ?= 1883
  activemq.server.ports.ws ?= {}
  activemq.server.ports.ws.protocol ?= 'ws'
  activemq.server.ports.ws.port ?= 61614

Configuration

  activemq.conf ?= {}
  activemq.conf['beans'] = {
    '@xmlns': "http://www.springframework.org/schema/beans"
    '@xmlns:xsi': "http://www.w3.org/2001/XMLSchema-instance"
    '@xsi:schemaLocation': "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd",
    bean: [
      {
       '@class': "org.springframework.beans.factory.config.PropertyPlaceholderConfigurer",
       'property': {'@name': 'locations', value: 'file:${activemq.conf}/credentials.properties'}
      },
      {
        '@id': 'logQuery'
        '@class': "io.fabric8.insight.log.log4j.Log4jLogQuery",
        '@lazy-init': "false",
        '@scope': "singleton",
        '@init-method': "start",
        '@destroy-method': "stop"
      }
    ],
    broker: {
      '@xmlns': "http://activemq.apache.org/schema/core",
      '@brokerName': "#{@config.host}",
      '@dataDirectory': "${activemq.data}",
      '@networkConnectorStartAsync': true,
      destinationPolicy: {
        policyMap: {
          policyEntries: [
            policyEntry : { '@topic': '>',  pendingMessageLimitStrategy: {constantPendingMessageLimitStrategy: {'@limit':1000}} }
          ]
        }
      },
      managementContext : { managementContext : {'@createConnector': "false"} },
      persistenceAdapter : { kahaDB : {'@directory': "${activemq.data}/kahadb"} },
      systemUsage: {
        systemUsage: {
          memoryUsage : { memoryUsage : {'@percentOfJvmHeap': 70} },
          storeUsage  : { storeUsage  : {'@limit': "10 gb"} },
          tempUsage   : { tempUsage   : {'@limit': "1 gb"} }
        }
      },
      shutdownHooks: {
        bean: [
          { '@xmlns': 'http://www.springframework.org/schema/beans',  '@class': 'org.apache.activemq.hooks.SpringContextHook' }
        ]
      },
      transportConnectors: { transportConnector: [] },
      networkConnectors: { networkConnector: [] }
    },
    import: {'@resource': "jetty.xml"}
  }
  # Ports enabled
  for k,v of activemq.server.ports
    activemq.conf['beans'].broker.transportConnectors.transportConnector.push {
      '@name': "#{k}", '@uri': "#{v['protocol']}"+'://0.0.0.0:'+"#{v['port']}"+'?maximumConnections=1000&wireFormat.maxFrameSize=104857600'
    }
  # Network of Brokers
  localhost = @config.host
  for host in @contexts('ryba/activemq/server').filter((c)->c.config.host != localhost).map((c)->c.config.host)
    activemq.conf['beans'].broker.networkConnectors.networkConnector.push {
      '@name': "#{host}",
      '@uri': "static:(tcp://#{host}:61616)",
      '@duplex': 'true',
      '@decreaseNetworkConsumerPriority': false,
      '@networkTTL': 2,
      '@dynamicOnly': true
    }
  # Connection string
  hosts = @contexts('ryba/activemq/server').map((c)->"tcp://#{c.config.host}:#{activemq.server.ports['openwire'].port}")
  if hosts.length > 1
    jms_url = "failover:(" + hosts.join(',') + ")?randomize=false&maxReconnectAttempts=10&initialReconnectDelay=100&priorityBackup=true"
  else
    jms_url = "#{hosts[0]}"
  # Integrate Oozie with ActiveMQ
  @config.ryba.oozie ?= {}
  @config.ryba.oozie.jms_url ?= jms_url
  # Integrate HCatalog with ActiveMQ
  @config.ryba.hive ?= {}
  @config.ryba.hive.hcatalog ?= {}
  @config.ryba.hive.hcatalog.jms_url ?= jms_url