You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ma...@apache.org on 2016/10/21 12:25:06 UTC
[1/4] activemq-artemis git commit: ARTEMIS-790 Added Configuration
conversion tooL [Forced Update!]
Repository: activemq-artemis
Updated Branches:
refs/heads/ARTEMIS-780 b0aafc423 -> 764f983bd (forced update)
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/764f983b/artemis-tools/src/test/resources/artemis-server.xsd
----------------------------------------------------------------------
diff --git a/artemis-tools/src/test/resources/artemis-server.xsd b/artemis-tools/src/test/resources/artemis-server.xsd
new file mode 100644
index 0000000..1e2e816
--- /dev/null
+++ b/artemis-tools/src/test/resources/artemis-server.xsd
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<xsd:schema xmlns="urn:activemq"
+ targetNamespace="urn:activemq"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ attributeFormDefault="unqualified"
+ elementFormDefault="qualified"
+ version="1.0">
+ <xsd:element name="configuration">
+ <xsd:annotation>
+ <xsd:documentation>
+ Root element for a document specifying the configuration
+ of a single "standalone" server that does not operate
+ as part of a domain.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:choice minOccurs="1" maxOccurs="unbounded">
+ <xsd:any namespace="##other">
+ <xsd:annotation>
+ <xsd:documentation>A profile declaration may include configuration
+ elements from other namespaces for the subsystems that make up the profile.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:any>
+ </xsd:choice>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema>
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/764f983b/artemis-tools/src/test/resources/broker.xml
----------------------------------------------------------------------
diff --git a/artemis-tools/src/test/resources/broker.xml b/artemis-tools/src/test/resources/broker.xml
new file mode 100644
index 0000000..bd33d59
--- /dev/null
+++ b/artemis-tools/src/test/resources/broker.xml
@@ -0,0 +1,64 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<configuration xmlns="urn:activemq"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:activemq /schema/artemis-server.xsd">
+ <jms xmlns="urn:activemq:jms">
+ <!--the queue used by the example-->
+ <queue name="exampleQueue"/>
+ </jms>
+
+ <core xmlns="urn:activemq:core">
+
+ <persistence-enabled>false</persistence-enabled>
+ <!-- Connectors -->
+
+ <connectors>
+ <connector name="in-vm">vm://0</connector>
+ </connectors>
+
+ <acceptors>
+ <acceptor name="in-vm">vm://0</acceptor>
+ </acceptors>
+
+ <!-- Other config -->
+
+ <security-settings>
+ <!--security for example queue-->
+ <security-setting match="jms.queue.exampleQueue">
+ <permission type="createDurableQueue" roles="guest"/>
+ <permission type="deleteDurableQueue" roles="guest"/>
+ <permission type="createNonDurableQueue" roles="guest"/>
+ <permission type="deleteNonDurableQueue" roles="guest"/>
+ <permission type="consume" roles="guest"/>
+ <permission type="send" roles="guest"/>
+ </security-setting>
+ </security-settings>
+
+ <queues>
+ <queue name="foo">
+ <address>bar</address>
+ </queue>
+ <queue name="bar">
+ <address>afar</address>
+ <durable>true</durable>
+ <filter string="name='car'" />
+ </queue>
+ </queues>
+ </core>
+
+</configuration>
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/764f983b/artemis-tools/src/test/resources/replace/broker.xml
----------------------------------------------------------------------
diff --git a/artemis-tools/src/test/resources/replace/broker.xml b/artemis-tools/src/test/resources/replace/broker.xml
new file mode 100644
index 0000000..bd33d59
--- /dev/null
+++ b/artemis-tools/src/test/resources/replace/broker.xml
@@ -0,0 +1,64 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<configuration xmlns="urn:activemq"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:activemq /schema/artemis-server.xsd">
+ <jms xmlns="urn:activemq:jms">
+ <!--the queue used by the example-->
+ <queue name="exampleQueue"/>
+ </jms>
+
+ <core xmlns="urn:activemq:core">
+
+ <persistence-enabled>false</persistence-enabled>
+ <!-- Connectors -->
+
+ <connectors>
+ <connector name="in-vm">vm://0</connector>
+ </connectors>
+
+ <acceptors>
+ <acceptor name="in-vm">vm://0</acceptor>
+ </acceptors>
+
+ <!-- Other config -->
+
+ <security-settings>
+ <!--security for example queue-->
+ <security-setting match="jms.queue.exampleQueue">
+ <permission type="createDurableQueue" roles="guest"/>
+ <permission type="deleteDurableQueue" roles="guest"/>
+ <permission type="createNonDurableQueue" roles="guest"/>
+ <permission type="deleteNonDurableQueue" roles="guest"/>
+ <permission type="consume" roles="guest"/>
+ <permission type="send" roles="guest"/>
+ </security-setting>
+ </security-settings>
+
+ <queues>
+ <queue name="foo">
+ <address>bar</address>
+ </queue>
+ <queue name="bar">
+ <address>afar</address>
+ <durable>true</durable>
+ <filter string="name='car'" />
+ </queue>
+ </queues>
+ </core>
+
+</configuration>
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/764f983b/artemis-tools/src/test/resources/replace/broker2.xml
----------------------------------------------------------------------
diff --git a/artemis-tools/src/test/resources/replace/broker2.xml b/artemis-tools/src/test/resources/replace/broker2.xml
new file mode 100644
index 0000000..bd33d59
--- /dev/null
+++ b/artemis-tools/src/test/resources/replace/broker2.xml
@@ -0,0 +1,64 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<configuration xmlns="urn:activemq"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:activemq /schema/artemis-server.xsd">
+ <jms xmlns="urn:activemq:jms">
+ <!--the queue used by the example-->
+ <queue name="exampleQueue"/>
+ </jms>
+
+ <core xmlns="urn:activemq:core">
+
+ <persistence-enabled>false</persistence-enabled>
+ <!-- Connectors -->
+
+ <connectors>
+ <connector name="in-vm">vm://0</connector>
+ </connectors>
+
+ <acceptors>
+ <acceptor name="in-vm">vm://0</acceptor>
+ </acceptors>
+
+ <!-- Other config -->
+
+ <security-settings>
+ <!--security for example queue-->
+ <security-setting match="jms.queue.exampleQueue">
+ <permission type="createDurableQueue" roles="guest"/>
+ <permission type="deleteDurableQueue" roles="guest"/>
+ <permission type="createNonDurableQueue" roles="guest"/>
+ <permission type="deleteNonDurableQueue" roles="guest"/>
+ <permission type="consume" roles="guest"/>
+ <permission type="send" roles="guest"/>
+ </security-setting>
+ </security-settings>
+
+ <queues>
+ <queue name="foo">
+ <address>bar</address>
+ </queue>
+ <queue name="bar">
+ <address>afar</address>
+ <durable>true</durable>
+ <filter string="name='car'" />
+ </queue>
+ </queues>
+ </core>
+
+</configuration>
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/764f983b/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 5a05c4f..bcb774c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -56,6 +56,7 @@
<module>integration/activemq-vertx-integration</module>
<module>integration/artemis-cdi-integration</module>
<module>artemis-distribution</module>
+ <module>artemis-tools</module>
<module>tests</module>
<module>artemis-features</module>
</modules>
[2/4] activemq-artemis git commit: ARTEMIS-790 Added Configuration
conversion tooL
Posted by ma...@apache.org.
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/764f983b/artemis-tools/src/test/resources/artemis-configuration.xsd
----------------------------------------------------------------------
diff --git a/artemis-tools/src/test/resources/artemis-configuration.xsd b/artemis-tools/src/test/resources/artemis-configuration.xsd
new file mode 100644
index 0000000..4c3e068
--- /dev/null
+++ b/artemis-tools/src/test/resources/artemis-configuration.xsd
@@ -0,0 +1,2591 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns="urn:activemq:core"
+ targetNamespace="urn:activemq:core"
+ attributeFormDefault="unqualified"
+ elementFormDefault="qualified"
+ version="1.0">
+
+ <xsd:element name="core" type="configurationType"/>
+
+ <xsd:complexType name="configurationType">
+ <xsd:all>
+ <xsd:element name="name" type="xsd:string" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Node name. If set, it will be used in topology notifications.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="resolve-protocols" type="xsd:boolean" default="true" maxOccurs="1"
+ minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ If true then the ActiveMQ Artemis Server will make use of any Protocol Managers that are in available
+ on the
+ classpath. If false then only the core protocol will be available, unless in Embedded mode where users
+ can inject their own Protocol Managers.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="persistence-enabled" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ true means that the server will use the file based journal for persistence.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="scheduled-thread-pool-max-size" type="xsd:int" default="5" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Maximum number of threads to use for the scheduled thread pool
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="thread-pool-max-size" type="xsd:int" default="30" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Maximum number of threads to use for the thread pool. -1 means 'no limits'.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="graceful-shutdown-enabled" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ true means that graceful shutdown is enabled
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="graceful-shutdown-timeout" type="xsd:long" default="-1" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ how long (in ms) to wait for clients to disconnect before shutting down the server
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="security-enabled" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ true means that security is enabled
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="security-invalidation-interval" type="xsd:long" default="10000" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ how long (in ms) to wait before invalidating the security cache
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="journal-lock-acquisition-timeout" type="xsd:long" default="-1" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ how long (in ms) to wait to acquire a file lock on the journal
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="wild-card-routing-enabled" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ true means that the server supports wild card routing
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="management-address" type="xsd:string" default="jms.queue.activemq.management" maxOccurs="1"
+ minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ the name of the management address to send management messages to. It is prefixed with "jms.queue" so
+ that JMS clients can send messages to it.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="management-notification-address" type="xsd:string" default="activemq.notifications"
+ maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ the name of the address that consumers bind to receive management notifications
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="cluster-user" type="xsd:string" default="ACTIVEMQ.CLUSTER.ADMIN.USER" maxOccurs="1"
+ minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Cluster username. It applies to all cluster configurations.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="cluster-password" maxOccurs="1" minOccurs="0" type="xsd:string" default="CHANGE ME!!">
+ <xsd:annotation>
+ <xsd:documentation>
+ Cluster password. It applies to all cluster configurations.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="password-codec" type="xsd:string"
+ default="org.apache.activemq.artemis.utils.DefaultSensitiveStringCodec" maxOccurs="1"
+ minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Class name and its parameters for the Decoder used to decode the masked password. Ignored if
+ mask-password is false. The format of this property is a full qualified class name optionally followed
+ by key/value pairs.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="mask-password" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ This option controls whether passwords in server configuration need be masked. If set to "true" the
+ passwords are masked.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="log-delegate-factory-class-name" type="xsd:string" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ XXX
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="jmx-management-enabled" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ true means that the management API is available via JMX
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="jmx-domain" type="xsd:string" default="org.apache.activemq" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ the JMX domain used to registered ActiveMQ Artemis MBeans in the MBeanServer
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="jmx-use-broker-name" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Whether or not to use the broker name in the JMX properties
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="message-counter-enabled" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ true means that message counters are enabled
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="message-counter-sample-period" type="xsd:long" default="10000" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ the sample period (in ms) to use for message counters
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="message-counter-max-day-history" type="xsd:int" default="10" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ how many days to keep message counter history
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="connection-ttl-override" type="xsd:long" default="-1" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ if set, this will override how long (in ms) to keep a connection alive without receiving a ping. -1
+ disables this setting.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="connection-ttl-check-interval" type="xsd:long" default="2000" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ how often (in ms) to check connections for ttl violation
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="configuration-file-refresh-period" type="xsd:long" default="5000" maxOccurs="1"
+ minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ how often (in ms) to check the configuration file for modifications
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="async-connection-execution-enabled" type="xsd:boolean" default="true" maxOccurs="1"
+ minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ should certain incoming packets on the server be handed off to a thread from the thread pool for
+ processing or should they be handled on the remoting thread?
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="transaction-timeout" type="xsd:long" default="300000" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ how long (in ms) before a transaction can be removed from the resource manager after create time
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="transaction-timeout-scan-period" type="xsd:long" default="1000" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ how often (in ms) to scan for timeout transactions
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="message-expiry-scan-period" type="xsd:long" default="30000" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ how often (in ms) to scan for expired messages
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="message-expiry-thread-priority" type="xsd:int" default="3" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ the priority of the thread expiring messages
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="id-cache-size" type="xsd:int" default="20000" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ the size of the cache for pre-creating message ID's
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="persist-id-cache" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ true means that ID's are persisted to the journal
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="remoting-incoming-interceptors" type="class-name-sequenceType" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ a list of <class-name/> elements with the names of classes to use for interceptor incoming
+ remoting packets
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="remoting-outgoing-interceptors" type="class-name-sequenceType" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ a list of <class-name/> elements with the names of classes to use for interceptor outcoming
+ remoting packets
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="persist-delivery-count-before-delivery" type="xsd:boolean" default="false" maxOccurs="1"
+ minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ True means that the delivery count is persisted before delivery. False means that this only happens
+ after a message has been cancelled.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="populate-validated-user" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ true means that the server will add the name of the validated user to messages it sends
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="connectors" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ a list of remoting connectors configurations to create
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="connector" type="transportType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element maxOccurs="1" minOccurs="0" name="acceptors">
+ <xsd:annotation>
+ <xsd:documentation>
+ a list of remoting acceptors to create
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="acceptor" type="transportType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element maxOccurs="1" minOccurs="0" name="broadcast-groups">
+ <xsd:annotation>
+ <xsd:documentation>
+ a list of broadcast groups to create
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="broadcast-group" maxOccurs="unbounded" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element maxOccurs="1" minOccurs="0" name="discovery-groups">
+ <xsd:annotation>
+ <xsd:documentation>
+ a list of discovery groups to create
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element maxOccurs="unbounded" minOccurs="0" ref="discovery-group">
+ <xsd:annotation>
+ <xsd:documentation>
+ a discovery group specification element
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="diverts" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ a list of diverts to use
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="divert" type="divertType" maxOccurs="unbounded" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <!-- QUEUES -->
+ <xsd:element name="queues" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ a list of pre configured queues to create
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="queue" maxOccurs="unbounded" minOccurs="0">
+ <xsd:complexType>
+ <xsd:all>
+ <xsd:element name="address" type="xsd:string" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ address for the queue
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="filter" maxOccurs="1" minOccurs="0"/>
+ <xsd:element name="durable" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ whether the queue is durable (persistent)
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:all>
+ <xsd:attribute name="name" type="xsd:ID" use="required">
+ <xsd:annotation>
+ <xsd:documentation>
+ unique name of this queue
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:attribute>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="bridges" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ a list of bridges to create
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="bridge" type="bridgeType" maxOccurs="unbounded" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="ha-policy" type="haPolicyType" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ The HA policy of this server
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="cluster-connections" type="clusterConnectionChoiceType" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ a list of cluster connections
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="grouping-handler" type="groupingHandlerType" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Message Group configuration
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="paging-directory" type="xsd:string" default="data/paging" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ the directory to store paged messages in
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="bindings-directory" type="xsd:string" default="data/bindings" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ the directory to store the persisted bindings to
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="create-bindings-dir" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ true means that the server will create the bindings directory on start up
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="page-max-concurrent-io" type="xsd:int" default="5" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ The max number of concurrent reads allowed on paging
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="journal-directory" type="xsd:string" default="data/journal" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ the directory to store the journal files in
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="create-journal-dir" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ true means that the journal directory will be created
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="journal-type" default="ASYNCIO" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ the type of journal to use
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="ASYNCIO"/>
+ <xsd:enumeration value="NIO"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="journal-buffer-timeout" type="xsd:long" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ The timeout (in nanoseconds) used to flush internal buffers on the journal. The exact default value
+ depend on whether the journal is ASYNCIO or NIO.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="journal-buffer-size" type="xsd:long" default="501760" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ The size of the internal buffer on the journal in KiB.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="journal-sync-transactional" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ if true wait for transaction data to be synchronized to the journal before returning response to
+ client
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="journal-sync-non-transactional" type="xsd:boolean" default="true" maxOccurs="1"
+ minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ if true wait for non transaction data to be synced to the journal before returning response to client.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="log-journal-write-rate" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Whether to log messages about the journal write rate
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="journal-file-size" default="10485760" type="xsd:int" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ the size (in bytes) of each journal file
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="journal-min-files" type="xsd:int" default="2" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ how many journal files to pre-create
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="journal-pool-files" type="xsd:int" default="-1" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ how many journal files to pre-create
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="journal-compact-percentage" type="xsd:int" default="30" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ The percentage of live data on which we consider compacting the journal
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="journal-compact-min-files" type="xsd:int" default="10" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ The minimal number of data files before we can start compacting
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="journal-max-io" type="xsd:int" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ the maximum number of write requests that can be in the AIO queue at any one time. Default is 500 for
+ AIO and 1 for NIO.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="perf-blast-pages" type="xsd:int" default="-1" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ XXX Only meant to be used by project developers
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="run-sync-speed-test" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ XXX Only meant to be used by project developers
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="server-dump-interval" type="xsd:long" default="-1" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Interval to log server specific information (e.g. memory usage etc)
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="global-max-size" type="xsd:long" default="-1" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Global Max Size before all addresses will enter into their Full Policy configured upon messages being
+ produced.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="max-disk-usage" type="xsd:int" default="90" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Max percentage of disk usage before the system blocks or fail clients.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="disk-scan-period" type="xsd:long" default="5000" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ how often (in ms) to scan the disks for full disks.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="memory-warning-threshold" type="xsd:int" default="25" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Percentage of available memory which will trigger a warning log
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="memory-measure-interval" type="xsd:long" default="-1" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ frequency to sample JVM memory in ms (or -1 to disable memory sampling)
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="large-messages-directory" type="xsd:string" default="data/largemessages"
+ maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ the directory to store large messages
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="store" type="storeType" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ The Store Type used by the server
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="security-settings" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ a list of security settings
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:choice>
+ <xsd:element name="security-setting" maxOccurs="unbounded" minOccurs="0">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>
+ a permission to add to the matched addresses
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element name="permission" maxOccurs="unbounded" minOccurs="0">
+ <xsd:complexType>
+ <xsd:attribute name="type" type="xsd:string" use="required">
+ <xsd:annotation>
+ <xsd:documentation>
+ the type of permission
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:attribute>
+ <xsd:attribute name="roles" type="xsd:string" use="required">
+ <xsd:annotation>
+ <xsd:documentation>
+ a comma-separated list of roles to apply the permission to
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:attribute>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ <xsd:attribute name="match" type="xsd:string" use="required">
+ <xsd:annotation>
+ <xsd:documentation>
+ regular expression for matching security roles against addresses
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:attribute>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="security-setting-plugin" maxOccurs="1" minOccurs="0">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>
+ a plugin
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element name="setting" maxOccurs="unbounded" minOccurs="0">
+ <xsd:complexType>
+ <xsd:attribute name="name" type="xsd:string" use="required">
+ <xsd:annotation>
+ <xsd:documentation>
+ the name of the setting
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:attribute>
+ <xsd:attribute name="value" type="xsd:string" use="required">
+ <xsd:annotation>
+ <xsd:documentation>
+ the value for the setting
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:attribute>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ <xsd:attribute name="class-name" type="xsd:string" use="required">
+ <xsd:annotation>
+ <xsd:documentation>
+ the name of the plugin class to instantiate
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:attribute>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="address-settings" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ a list of address settings
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="address-setting" maxOccurs="unbounded" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="resource-limit-settings" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ a list of resource limit settings
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="resource-limit-setting" maxOccurs="unbounded" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="connector-services" maxOccurs="1" minOccurs="0">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="connector-service" type="connector-serviceType" maxOccurs="unbounded"
+ minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="addresses" type="addressesType" maxOccurs="1" minOccurs="0" />
+ </xsd:all>
+ </xsd:complexType>
+
+ <xsd:element name="local-bind-address" type="xsd:string">
+ <xsd:annotation>
+ <xsd:documentation>
+ local bind address that the datagram socket is bound to
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="local-bind-port" type="xsd:int" default="-1">
+ <xsd:annotation>
+ <xsd:documentation>
+ local port to which the datagram socket is bound to
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <!-- BROADCAST GROUP CONFIGURATION -->
+ <xsd:element name="broadcast-group">
+ <xsd:complexType>
+ <xsd:sequence>
+ <!-- XXX these 2 local-* here...-->
+ <xsd:element ref="local-bind-address" maxOccurs="1" minOccurs="0"/>
+ <xsd:element ref="local-bind-port" maxOccurs="1" minOccurs="0"/>
+ <xsd:element name="group-address" type="xsd:string" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ multicast address to which the data will be broadcast
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="group-port" type="xsd:int" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ UDP port number used for broadcasting
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="broadcast-period" type="xsd:long" default="2000" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ period in milliseconds between consecutive broadcasts
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="jgroups-file" type="xsd:string" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Name of JGroups configuration file. If specified, the server uses JGroups for broadcasting.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="jgroups-channel" type="xsd:string" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Name of JGroups Channel. If specified, the server uses the named channel for broadcasting.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="connector-ref" type="xsd:string" maxOccurs="unbounded" minOccurs="0"/>
+ </xsd:sequence>
+
+ <xsd:attribute name="name" type="xsd:ID" use="required">
+ <xsd:annotation>
+ <xsd:documentation>
+ a unique name for the broadcast group
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:attribute>
+
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="discovery-group">
+ <xsd:complexType>
+ <xsd:all>
+ <!-- XXX -->
+ <xsd:element name="group-address" type="xsd:string" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Multicast IP address of the group to listen on
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="group-port" type="xsd:int" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ UDP port number of the multi cast group
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="jgroups-file" type="xsd:string" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Name of a JGroups configuration file. If specified, the server uses JGroups for discovery.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="jgroups-channel" type="xsd:string" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Name of a JGroups Channel. If specified, the server uses the named channel for discovery.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="refresh-timeout" type="xsd:int" default="10000" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Period the discovery group waits after receiving the last broadcast from a particular server before
+ removing that servers connector pair entry from its list.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element ref="local-bind-address" maxOccurs="1" minOccurs="0"/>
+ <xsd:element ref="local-bind-port" maxOccurs="1" minOccurs="0"/>
+ <xsd:element name="initial-wait-timeout" type="xsd:int" default="10000" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ time to wait for an initial broadcast to give us at least one node in the cluster
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:all>
+
+ <xsd:attribute name="name" type="xsd:ID" use="required">
+ <xsd:annotation>
+ <xsd:documentation>
+ a unique name for the discovery group
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:attribute>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="discovery-group-ref">
+ <xsd:complexType>
+ <xsd:attribute name="discovery-group-name" type="xsd:IDREF"/>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:complexType name="class-name-sequenceType">
+ <xsd:annotation>
+ <xsd:documentation>
+ unlimited sequence of <class-name/>
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element maxOccurs="unbounded" minOccurs="1" name="class-name" type="xsd:string">
+ <xsd:annotation>
+ <xsd:documentation>
+ the fully qualified name of the interceptor class
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="paramType">
+ <xsd:attribute name="key" type="xsd:string" use="required">
+ <xsd:annotation>
+ <xsd:documentation>
+ Key of a configuration parameter
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:attribute>
+ <xsd:attribute name="value" type="xsd:string" use="required">
+ <xsd:annotation>
+ <xsd:documentation>
+ Value of a configuration parameter
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:attribute>
+ </xsd:complexType>
+
+ <!-- BRIDGE CONFIGURATION -->
+ <xsd:complexType name="bridgeType">
+ <xsd:sequence>
+ <xsd:element name="queue-name" type="xsd:IDREF" maxOccurs="1" minOccurs="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ name of queue that this bridge consumes from
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="forwarding-address" type="xsd:string" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ address to forward to. If omitted original address is used
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="ha" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ whether this bridge supports fail-over
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element ref="filter" maxOccurs="1" minOccurs="0"/>
+
+ <xsd:element name="transformer-class-name" type="xsd:string" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ optional name of transformer class
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="min-large-message-size" type="xsd:int" default="102400" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Any message larger than this size is considered a large message (to be sent in
+ chunks)
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="check-period" type="xsd:long" default="30000" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ The period (in milliseconds) a bridge's client will check if it failed to receive a ping from the
+ server. -1 disables this check.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="connection-ttl" type="xsd:long" default="60000" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ how long to keep a connection alive in the absence of any data arriving from the client. This should
+ be greater than the ping period.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="retry-interval" type="xsd:long" default="2000" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ period (in ms) between successive retries
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="retry-interval-multiplier" type="xsd:double" default="1" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ multiplier to apply to successive retry intervals
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="max-retry-interval" type="xsd:long" default="2000" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Limit to the retry-interval growth (due to retry-interval-multiplier)
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="initial-connect-attempts" type="xsd:int" default="-1" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ maximum number of initial connection attempts, -1 means 'no limits'
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="reconnect-attempts" type="xsd:int" default="-1" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ maximum number of retry attempts, -1 means 'no limits'
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="failover-on-server-shutdown" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ should failover be prompted if target server is cleanly shutdown?
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="use-duplicate-detection" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ should duplicate detection headers be inserted in forwarded messages?
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="confirmation-window-size" type="xsd:int" maxOccurs="1" minOccurs="0" default="1048576">
+ <xsd:annotation>
+ <xsd:documentation>
+ Once the bridge has received this many bytes, it sends a confirmation
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="producer-window-size" type="xsd:int" maxOccurs="1" minOccurs="0" default="-1">
+ <xsd:annotation>
+ <xsd:documentation>
+ Producer flow control
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="user" type="xsd:string" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ username, if unspecified the cluster-user is used
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="password" type="xsd:string" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ password, if unspecified the cluster-password is used
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="reconnect-attempts-same-node" default="10" type="xsd:int" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Upon reconnection this configures the number of time the same node on the topology will be retried
+ before reseting the server locator and using the initial connectors
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:choice>
+ <xsd:element name="static-connectors" maxOccurs="1" minOccurs="1">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="connector-ref" type="xsd:string" maxOccurs="unbounded" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="discovery-group-ref" maxOccurs="1" minOccurs="1">
+ <xsd:complexType>
+ <xsd:attribute name="discovery-group-name" type="xsd:IDREF" use="required">
+ <xsd:annotation>
+ <xsd:documentation>
+ name of discovery group used by this bridge
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:attribute>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:sequence>
+
+ <xsd:attribute name="name" type="xsd:ID" use="required">
+ <xsd:annotation>
+ <xsd:documentation>
+ unique name for this bridge
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:attribute>
+ </xsd:complexType>
+
+
+ <!-- CLUSTER CONNECTION CONFIGURATION -->
+
+ <xsd:complexType name="clusterConnectionChoiceType">
+ <xsd:sequence>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="cluster-connection-uri" type="cluster-connectionUriType"/>
+ <xsd:element name="cluster-connection" type="cluster-connectionType">
+ </xsd:element>
+ </xsd:choice>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="cluster-connectionUriType">
+ <xsd:attribute name="address" type="xsd:string" use="required">
+ <xsd:annotation>
+ <xsd:documentation>
+ uri of the cluster connection
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:attribute>
+ <xsd:attribute name="name" type="xsd:string" use="required">
+ <xsd:annotation>
+ <xsd:documentation>
+ name of the cluster connection
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:attribute>
+ </xsd:complexType>
+
+ <xsd:complexType name="cluster-connectionType">
+ <xsd:sequence>
+ <xsd:element name="address" type="xsd:string" maxOccurs="1" minOccurs="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ name of the address this cluster connection applies to
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="connector-ref" type="xsd:string" maxOccurs="1" minOccurs="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ Name of the connector reference to use.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="check-period" type="xsd:long" default="30000" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ The period (in milliseconds) used to check if the cluster connection has failed to receive pings from
+ another server
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="connection-ttl" type="xsd:long" default="60000" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ how long to keep a connection alive in the absence of any data arriving from the client
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="min-large-message-size" type="xsd:int" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Messages larger than this are considered large-messages
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="call-timeout" type="xsd:long" default="30000" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ How long to wait for a reply
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="retry-interval" type="xsd:long" default="500" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ period (in ms) between successive retries
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="retry-interval-multiplier" type="xsd:double" default="1" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ multiplier to apply to the retry-interval
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="max-retry-interval" type="xsd:long" default="2000" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Maximum value for retry-interval
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="initial-connect-attempts" type="xsd:int" default="-1" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ How many attempts should be made to connect initially
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="reconnect-attempts" type="xsd:int" default="-1" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ How many attempts should be made to reconnect after failure
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="use-duplicate-detection" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ should duplicate detection headers be inserted in forwarded messages?
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="forward-when-no-consumers" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ DEPRECATED: use message-load-balancing-type instead. Select STRICT to mimic
+ forward-when-no-consumers=true
+ and ON_DEMAND to mimic forward-when-no-consumers=false.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="message-load-balancing" default="ON_DEMAND" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ how should messages be load balanced between servers in a cluster?
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="OFF"/>
+ <xsd:enumeration value="STRICT"/>
+ <xsd:enumeration value="ON_DEMAND"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="max-hops" type="xsd:int" default="1" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ maximum number of hops cluster topology is propagated
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="confirmation-window-size" type="xsd:int" default="1048576" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ The size (in bytes) of the window used for confirming data from the server connected to.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="producer-window-size" type="xsd:int" maxOccurs="1" minOccurs="0" default="-1">
+ <xsd:annotation>
+ <xsd:documentation>
+ Producer flow control
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="call-failover-timeout" type="xsd:long" default="-1" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ How long to wait for a reply if in the middle of a fail-over. -1 means wait forever.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="notification-interval" type="xsd:long" default="1000" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ how often the cluster connection will notify the cluster of its existence right after joining the
+ cluster
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="notification-attempts" type="xsd:int" default="2" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ how many times this cluster connection will notify the cluster of its existence right after joining
+ the cluster
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="scale-down-connector" type="xsd:string" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ The connector to use for scaling down or when as backup in SCALE_DOWN mode
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:choice>
+ <xsd:element name="static-connectors" maxOccurs="1" minOccurs="0">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="connector-ref" type="xsd:string" maxOccurs="unbounded" minOccurs="0"/>
+ </xsd:sequence>
+ <xsd:attribute name="allow-direct-connections-only" default="false" type="xsd:boolean" use="optional">
+ <xsd:annotation>
+ <xsd:documentation>
+ restricts cluster connections to the listed connector-ref's
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:attribute>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="discovery-group-ref" maxOccurs="1" minOccurs="0">
+ <xsd:complexType>
+ <xsd:attribute name="discovery-group-name" type="xsd:IDREF" use="required">
+ <xsd:annotation>
+ <xsd:documentation>
+ XXX -- this is a duplicate...
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:attribute>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:ID" use="required">
+ <xsd:annotation>
+ <xsd:documentation>
+ unique name for this cluster connection
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:attribute>
+ <xsd:attribute name="uri" type="xsd:string" use="optional">
+ <xsd:annotation>
+ <xsd:documentation>
+ The URI for the cluster connection options
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:attribute>
+ </xsd:complexType>
+
+
+ <xsd:complexType name="cluster-connection-uri-type">
+ <xsd:attribute name="name" type="xsd:ID" use="required">
+ <xsd:annotation>
+ <xsd:documentation>
+ unique name for this cluster connection
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:attribute>
+ <xsd:attribute name="uri" type="xsd:string" use="required">
+ <xsd:annotation>
+ <xsd:documentation>
+ The URI for the cluster connection options
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:attribute>
+ </xsd:complexType>
+
+ <!-- DIVERT CONFIGURATION TYPE -->
+ <xsd:complexType name="divertType">
+ <xsd:all>
+ <xsd:element name="transformer-class-name" type="xsd:string" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ an optional class name of a transformer
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="exclusive" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ whether this is an exclusive divert
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="routing-name" type="xsd:string" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ the routing name for the divert
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="address" type="xsd:string" maxOccurs="1" minOccurs="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ the address this divert will divert from
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element name="forwarding-address" type="xsd:string" maxOccurs="1" minOccurs="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ the forwarding address for the divert
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element ref="filter" maxOccurs="1" minOccurs="0"/>
+ </xsd:all>
+
+ <xsd:attribute name="name" type="xsd:ID" use="required">
+ <xsd:annotation>
+ <xsd:documentation>
+ a unique name for the divert
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:attribute>
+
+ </xsd:complexType>
+
+ <xsd:complexType name="storeType">
+ <xsd:choice>
+ <xsd:element name="file-store" type="fileStoreType" minOccurs="0" maxOccurs="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ Use a file based store for peristing journal, paging and large messages
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="database-store" type="databaseStoreType" minOccurs="0" maxOccurs="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ Use a database for persisting journal, paging and large messages
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+
+ <xsd:complexType name="fileStoreType">
+ </xsd:complexType>
+
+ <xsd:complexType name="databaseStoreType">
+ <xsd:all>
+ <xsd:element name="jdbc-driver-class-name" type="xsd:string" minOccurs="1" maxOccurs="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ The JDBC Driver class name
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="jdbc-connection-url" type="xsd:string" minOccurs="1" maxOccurs="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ The JDBC Connection URL e.g. jdbc:mysql://localhost:3306/
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="message-table-name" type="xsd:string" minOccurs="1" maxOccurs="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ The table name used to store message journal entries
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="bindings-table-name" type="xsd:string" minOccurs="1" maxOccurs="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ The table name used to store bindings journal entries
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="large-message-table-name" type="xsd:string" minOccurs="1" maxOccurs="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ The table name used to large message files
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:all>
+ </xsd:complexType>
+
+ <xsd:complexType name="haPolicyType">
+ <xsd:choice>
+ <xsd:element name="live-only" type="haLiveOnlyPolicyType" minOccurs="0" maxOccurs="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ A live only server with no HA capabilities apart from scale down.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="replication" type="haReplicationType" minOccurs="0" maxOccurs="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ Configuration for a replicated server, either master, slave or colocated.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="shared-store" type="haSharedStoreType" minOccurs="0" maxOccurs="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ Configuration for a shared store server, either master, slave or colocated.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+
+ <xsd:complexType name="haReplicationType">
+ <xsd:choice>
+ <xsd:element name="master" type="replicatedPolicyType" minOccurs="0" maxOccurs="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ A live server configured to replicate.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="slave" type="replicaPolicyType" minOccurs="0" maxOccurs="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ A backup server configured to replicate.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="colocated" type="haColocationReplicationType" minOccurs="0" maxOccurs="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ a replicated lives server that will allow requests to create colocated replicated backup servers.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+
+
+ <xsd:complexType name="haColocationReplicationType">
+ <xsd:all>
+ <xsd:element name="request-backup" type="xsd:boolean" minOccurs="0" maxOccurs="1" default="false">
+ <xsd:annotation>
+ <xsd:documentation>
+ If true then the server will request a backup on another node
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="backup-request-retries" type="xsd:int" minOccurs="0" maxOccurs="1" default="-1">
+ <xsd:annotation>
+ <xsd:documentation>
+ How many times the live server will try to request a backup, -1 means for ever.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="backup-request-retry-interval" type="xsd:long" minOccurs="0" maxOccurs="1" default="5000">
+ <xsd:annotation>
+ <xsd:documentation>
+ How long to wait for retries between attempts to request a backup server.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="max-backups" type="xsd:int" minOccurs="0" maxOccurs="1" default="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ Whether or not this live server will accept backup requests from other live servers.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="backup-port-offset" type="xsd:int" minOccurs="0" maxOccurs="1" default="100">
+ <xsd:annotation>
+ <xsd:documentation>
+ The offset to use for the Connectors and Acceptors when creating a new backup server.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="excludes" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ the connectors that shouldn't have their ports offset, typically remote connectors or the
+ connector used in the cluster connection if scalinmg down
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="connector-ref" type="xsd:string" maxOccurs="unbounded" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="master" type="replicatedPolicyType" minOccurs="0" maxOccurs="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ The configuration for the live replicated server.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="slave" type="replicaPolicyType" minOccurs="0" maxOccurs="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ The configuration for any slaves created.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:all>
+ </xsd:complexType>
+
+ <xsd:complexType name="haColocationSharedStoreType">
+ <xsd:all>
+ <xsd:element name="request-backup" type="xsd:boolean" minOccurs="0" maxOccurs="1" default="false">
+ <xsd:annotation>
+ <xsd:documentation>
+ If true then the server will request a backup on another node
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="backup-request-retries" type="xsd:int" minOccurs="0" maxOccurs="1" default="-1">
+ <xsd:annotation>
+ <xsd:documentation>
+ How many times the live server will try to request a backup, -1 means for ever.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="backup-request-retry-interval" type="xsd:long" minOccurs="0" maxOccurs="1" default="5000">
+ <xsd:annotation>
+ <xsd:documentation>
+ How long to wait for retries between attempts to request a backup server.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="max-backups" type="xsd:int" minOccurs="0" maxOccurs="1" default="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ Whether or not this live server will accept backup requests from other live servers.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="backup-port-offset" type="xsd:int" minOccurs="0" maxOccurs="1" default="100">
+ <xsd:annotation>
+ <xsd:documentation>
+ The offset to use for the Connectors and Acceptors when creating a new backup server.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="master" type="sharedStoreMasterPolicyType" minOccurs="0" maxOccurs="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ The configuration for the live shared store server.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="slave" type="sharedStoreSlavePolicyType" minOccurs="0" maxOccurs="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ The configuration for any shared store backups created.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:all>
+ </xsd:complexType>
+
+ <xsd:complexType name="haSharedStoreType">
+ <xsd:choice>
+ <xsd:element name="master" type="sharedStoreMasterPolicyType" minOccurs="0" maxOccurs="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ A shared store live server configuration.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="slave" type="sharedStoreSlavePolicyType" minOccurs="0" maxOccurs="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ A shared store backup server configuration.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="colocated" type="haColocationSharedStoreType" minOccurs="0" maxOccurs="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ A shared store colocated configuration
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+
+ <xsd:complexType name="haLiveOnlyPolicyType">
+ <xsd:all>
+ <xsd:element name="scale-down" type="scaleDownType" minOccurs="0" maxOccurs="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ The scale down configuration of this live server.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:all>
+ </xsd:complexType>
+ <xsd:complexType name="replicatedPolicyType">
+ <xsd:all>
+ <xsd:element name="group-name" type="xsd:string" minOccurs="0" maxOccurs="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ used for replication, if set, (remote) backup servers will only pair with live servers with matching
+ group-name
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="cluster-name" type="xsd:string" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Name of the cluster configuration to use for replication. This setting is only necessary in case you
+ configure multiple cluster connections. It is used by a replicating backups and by live servers that
+ may attempt fail-back.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="check-for-live-server" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Whether to check the cluster for a (live) server using our own server ID when starting
+ up. This option is only necessary for performing 'fail-back' on replicating
+ servers. Strictly speaking this setting only applies to live servers and not to
+ backups.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="initial-replication-sync-timeout" type="xsd:long" default="30000" maxOccurs="1"
+ minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ The amount of time to wait for the replica to acknowledge it has received all the necessary data from
+ the replicating server at the final step of the initial replication synchronization process.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:all>
+ </xsd:complexType>
+ <xsd:complexType name="replicaPolicyType">
+ <xsd:all>
+ <xsd:element name="group-name" type="xsd:string" minOccurs="0" maxOccurs="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ used for replication, if set, (remote) backup servers will only pair with live servers with matching
+ group-name
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="cluster-name" type="xsd:string" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Name of the cluster configuration to use for replication. This setting is only necessary in case you
+ configure multiple cluster connections. It is used by a replicating backups and by live servers that
+ may attempt fail-back.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="max-saved-replicated-journals-size" type="xsd:int" default="2" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ This specifies how many times a replicated backup server can restart after moving its files on start.
+ Once there are this number of backup journal files the server will stop permanently after if fails
+ back.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="scale-down" type="scaleDownType" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ if provided then this backup will scale down rather than becoming live after fail over.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="restart-backup" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Will this server, if a backup, restart once it has been stopped because of failback or scaling down.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="allow-failback" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Whether a server will automatically stop when a another places a request to take over
+ its place. The use case is when a regular server stops and its backup takes over its
+ duties, later the main server restarts and requests the server (the former backup) to
+ stop operating.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="failback-delay" type="xsd:long" default="5000" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ DEPRECATED: if we have to start as a replicated server this is the delay to wait before fail-back
+ occurs
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="initial-replication-sync-timeout" type="xsd:long" default="30000" maxOccurs="1"
+ minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ If we have to start as a replicated server this is the amount of time to wait for the replica to
+ acknowledge it has received all the necessary data from the replicating server at the final step
+ of the initial replication synchronization process.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:all>
+ </xsd:complexType>
+ <xsd:complexType name="colocatedReplicaPolicyType">
+ <xsd:all>
+ <xsd:element name="group-name" type="xsd:string" minOccurs="0" maxOccurs="1">
+ <xsd:annotation>
+ <xsd:documentation>
+ used for replication, if set, (remote) backup servers will only pair with live servers with matching
+ group-name
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="cluster-name" type="xsd:string" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Name of the cluster configuration to use for replication. This setting is only necessary in case you
+ configure multiple cluster connections. It is used by a replicating backups and by live servers that
+ may attempt fail-back.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="max-saved-replicated-journals-size" type="xsd:int" default="2" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ This specifies how many times a replicated backup server can restart after moving its files on start.
+ Once there are this number of backup journal files the server will stop permanently after if fails
+ back.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="scale-down" type="scaleDownType" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ if provided then this backup will scale down rather than becoming live after fail over.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="restart-backup" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Will this server, if a backup, restart once it has been stopped because of failback or scaling down.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:all>
+ </xsd:complexType>
+ <xsd:complexType name="sharedStoreMasterPolicyType">
+ <xsd:all>
+ <xsd:element name="failback-delay" type="xsd:long" default="5000" maxOccurs="1" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ DEPRECATED: delay to wait before fail-back occurs on (live's) restar
<TRUNCATED>
[4/4] activemq-artemis git commit: ARTEMIS-813 Load AddressInfo into
AddressManager
Posted by ma...@apache.org.
ARTEMIS-813 Load AddressInfo into AddressManager
Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/c175efd9
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/c175efd9
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/c175efd9
Branch: refs/heads/ARTEMIS-780
Commit: c175efd999dcb961fdf425d8efda977b45767d00
Parents: a351d90
Author: Martyn Taylor <mt...@redhat.com>
Authored: Wed Oct 19 19:16:31 2016 +0100
Committer: Martyn Taylor <mt...@redhat.com>
Committed: Fri Oct 21 13:24:26 2016 +0100
----------------------------------------------------------------------
.../core/config/CoreAddressConfiguration.java | 6 +-
.../deployers/impl/FileConfigurationParser.java | 3 +-
.../artemis/core/postoffice/AddressManager.java | 7 ++
.../artemis/core/postoffice/PostOffice.java | 8 +++
.../core/postoffice/impl/PostOfficeImpl.java | 16 +++++
.../postoffice/impl/SimpleAddressManager.java | 18 ++++++
.../artemis/core/server/ActiveMQServer.java | 13 +++-
.../core/server/impl/ActiveMQServerImpl.java | 49 ++++++++++++--
.../artemis/core/server/impl/AddressInfo.java | 67 ++++++++++++++++++++
.../core/config/impl/FileConfigurationTest.java | 5 +-
.../integration/addressing/AddressingTest.java | 21 ++++++
.../core/server/impl/fakes/FakePostOffice.java | 17 +++++
12 files changed, 213 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/c175efd9/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/CoreAddressConfiguration.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/CoreAddressConfiguration.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/CoreAddressConfiguration.java
index cb6d43f..e01c398 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/CoreAddressConfiguration.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/CoreAddressConfiguration.java
@@ -21,14 +21,10 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.activemq.artemis.api.config.ActiveMQDefaultConfiguration;
+import org.apache.activemq.artemis.core.server.impl.AddressInfo.RoutingType;
public class CoreAddressConfiguration implements Serializable {
- public enum RoutingType {
- MULTICAST,
- ANYCAST
- }
-
private String name = null;
private RoutingType routingType = null;
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/c175efd9/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java
index fc045b3..2dccb03 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java
@@ -64,6 +64,7 @@ import org.apache.activemq.artemis.core.server.JournalType;
import org.apache.activemq.artemis.core.server.SecuritySettingPlugin;
import org.apache.activemq.artemis.core.server.cluster.impl.MessageLoadBalancingType;
import org.apache.activemq.artemis.core.server.group.impl.GroupingHandlerConfiguration;
+import org.apache.activemq.artemis.core.server.impl.AddressInfo;
import org.apache.activemq.artemis.core.settings.impl.AddressFullMessagePolicy;
import org.apache.activemq.artemis.core.settings.impl.AddressSettings;
import org.apache.activemq.artemis.core.settings.impl.ResourceLimitSettings;
@@ -895,7 +896,7 @@ public final class FileConfigurationParser extends XMLConfigurationUtil {
CoreAddressConfiguration addressConfiguration = new CoreAddressConfiguration();
addressConfiguration.setName(name)
- .setRoutingType(CoreAddressConfiguration.RoutingType.valueOf(routingType.toUpperCase()));
+ .setRoutingType(AddressInfo.RoutingType.valueOf(routingType.toUpperCase()));
NodeList children = node.getChildNodes();
for (int j = 0; j < children.getLength(); j++) {
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/c175efd9/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/AddressManager.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/AddressManager.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/AddressManager.java
index efc1297..5519822 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/AddressManager.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/AddressManager.java
@@ -20,6 +20,7 @@ import java.util.Map;
import java.util.Set;
import org.apache.activemq.artemis.api.core.SimpleString;
+import org.apache.activemq.artemis.core.server.impl.AddressInfo;
import org.apache.activemq.artemis.core.transaction.Transaction;
/**
@@ -50,4 +51,10 @@ public interface AddressManager {
Map<SimpleString, Binding> getBindings();
Set<SimpleString> getAddresses();
+
+ AddressInfo addAddressInfo(AddressInfo addressInfo);
+
+ AddressInfo removeAddressInfo(SimpleString address);
+
+ AddressInfo getAddressInfo(SimpleString address);
}
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/c175efd9/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/PostOffice.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/PostOffice.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/PostOffice.java
index 4c0c4b0..f719966 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/PostOffice.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/PostOffice.java
@@ -27,6 +27,7 @@ import org.apache.activemq.artemis.core.server.Queue;
import org.apache.activemq.artemis.core.server.QueueCreator;
import org.apache.activemq.artemis.core.server.RoutingContext;
import org.apache.activemq.artemis.core.server.ServerMessage;
+import org.apache.activemq.artemis.core.server.impl.AddressInfo;
import org.apache.activemq.artemis.core.transaction.Transaction;
/**
@@ -42,6 +43,12 @@ import org.apache.activemq.artemis.core.transaction.Transaction;
*/
public interface PostOffice extends ActiveMQComponent {
+ AddressInfo addAddressInfo(AddressInfo addressInfo);
+
+ AddressInfo removeAddressInfo(SimpleString address);
+
+ AddressInfo getAddressInfo(SimpleString address);
+
void addBinding(Binding binding) throws Exception;
Binding removeBinding(SimpleString uniqueName, Transaction tx, boolean deleteData) throws Exception;
@@ -113,4 +120,5 @@ public interface PostOffice extends ActiveMQComponent {
Set<SimpleString> getAddresses();
+
}
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/c175efd9/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java
index cc06603..9b7ed0c 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java
@@ -69,6 +69,7 @@ import org.apache.activemq.artemis.core.server.RouteContextList;
import org.apache.activemq.artemis.core.server.RoutingContext;
import org.apache.activemq.artemis.core.server.ServerMessage;
import org.apache.activemq.artemis.core.server.group.GroupingHandler;
+import org.apache.activemq.artemis.core.server.impl.AddressInfo;
import org.apache.activemq.artemis.core.server.impl.RoutingContextImpl;
import org.apache.activemq.artemis.core.server.impl.ServerMessageImpl;
import org.apache.activemq.artemis.core.server.management.ManagementService;
@@ -418,6 +419,21 @@ public class PostOfficeImpl implements PostOffice, NotificationListener, Binding
// PostOffice implementation -----------------------------------------------
+ @Override
+ public AddressInfo addAddressInfo(AddressInfo addressInfo) {
+ return addressManager.addAddressInfo(addressInfo);
+ }
+
+ @Override
+ public AddressInfo removeAddressInfo(SimpleString address) {
+ return addressManager.removeAddressInfo(address);
+ }
+
+ @Override
+ public AddressInfo getAddressInfo(SimpleString addressName) {
+ return addressManager.getAddressInfo(addressName);
+ }
+
// TODO - needs to be synchronized to prevent happening concurrently with activate()
// (and possible removeBinding and other methods)
// Otherwise can have situation where createQueue comes in before failover, then failover occurs
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/c175efd9/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/SimpleAddressManager.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/SimpleAddressManager.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/SimpleAddressManager.java
index 9f26b0b..2994f9e 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/SimpleAddressManager.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/SimpleAddressManager.java
@@ -30,6 +30,7 @@ import org.apache.activemq.artemis.core.postoffice.Binding;
import org.apache.activemq.artemis.core.postoffice.Bindings;
import org.apache.activemq.artemis.core.postoffice.BindingsFactory;
import org.apache.activemq.artemis.core.server.ActiveMQMessageBundle;
+import org.apache.activemq.artemis.core.server.impl.AddressInfo;
import org.apache.activemq.artemis.core.transaction.Transaction;
import org.jboss.logging.Logger;
@@ -40,6 +41,8 @@ public class SimpleAddressManager implements AddressManager {
private static final Logger logger = Logger.getLogger(Page.class);
+ private final ConcurrentMap<SimpleString, AddressInfo> addressInfoMap = new ConcurrentHashMap<>();
+
/**
* HashMap<Address, Binding>
*/
@@ -178,4 +181,19 @@ public class SimpleAddressManager implements AddressManager {
return prevBindings != null;
}
+
+ @Override
+ public AddressInfo addAddressInfo(AddressInfo addressInfo) {
+ return addressInfoMap.putIfAbsent(addressInfo.getName(), addressInfo);
+ }
+
+ @Override
+ public AddressInfo removeAddressInfo(SimpleString address) {
+ return addressInfoMap.remove(address);
+ }
+
+ @Override
+ public AddressInfo getAddressInfo(SimpleString addressName) {
+ return addressInfoMap.get(addressName);
+ }
}
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/c175efd9/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServer.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServer.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServer.java
index 477f839..8bac182 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServer.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServer.java
@@ -39,6 +39,7 @@ import org.apache.activemq.artemis.core.server.cluster.ClusterManager;
import org.apache.activemq.artemis.core.server.cluster.ha.HAPolicy;
import org.apache.activemq.artemis.core.server.group.GroupingHandler;
import org.apache.activemq.artemis.core.server.impl.Activation;
+import org.apache.activemq.artemis.core.server.impl.AddressInfo;
import org.apache.activemq.artemis.core.server.impl.ConnectorsService;
import org.apache.activemq.artemis.core.server.management.ManagementService;
import org.apache.activemq.artemis.core.server.reload.ReloadManager;
@@ -375,10 +376,12 @@ public interface ActiveMQServer extends ActiveMQComponent {
void stop(boolean failoverOnServerShutdown) throws Exception;
+ AddressInfo getAddressInfo(SimpleString address);
+
/*
- * add a ProtocolManagerFactory to be used. Note if @see Configuration#isResolveProtocols is tur then this factory will
- * replace any factories with the same protocol
- * */
+ * add a ProtocolManagerFactory to be used. Note if @see Configuration#isResolveProtocols is tur then this factory will
+ * replace any factories with the same protocol
+ * */
void addProtocolManagerFactory(ProtocolManagerFactory factory);
/*
@@ -407,4 +410,8 @@ public interface ActiveMQServer extends ActiveMQComponent {
boolean addClientConnection(String clientId, boolean unique);
void removeClientConnection(String clientId);
+
+ AddressInfo addAddressInfo(AddressInfo addressInfo);
+
+ AddressInfo removeAddressInfo(SimpleString address);
}
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/c175efd9/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
index 98abce0..513c431 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
@@ -54,6 +54,7 @@ import org.apache.activemq.artemis.core.client.impl.ClientSessionFactoryImpl;
import org.apache.activemq.artemis.core.config.BridgeConfiguration;
import org.apache.activemq.artemis.core.config.Configuration;
import org.apache.activemq.artemis.core.config.ConfigurationUtils;
+import org.apache.activemq.artemis.core.config.CoreAddressConfiguration;
import org.apache.activemq.artemis.core.config.CoreQueueConfiguration;
import org.apache.activemq.artemis.core.config.DivertConfiguration;
import org.apache.activemq.artemis.core.config.StoreConfiguration;
@@ -1961,6 +1962,9 @@ public class ActiveMQServerImpl implements ActiveMQServer {
// Deploy the rest of the stuff
+ // Deploy predefined addresses
+ deployAddressesFromConfiguration();
+
// Deploy any predefined queues
deployQueuesFromConfiguration();
@@ -2039,11 +2043,26 @@ public class ActiveMQServerImpl implements ActiveMQServer {
}
}
- private void deployQueuesFromConfiguration() throws Exception {
- for (CoreQueueConfiguration config : configuration.getQueueConfigurations()) {
+ private void deployAddressesFromConfiguration() throws Exception {
+ for (CoreAddressConfiguration config : configuration.getAddressConfigurations()) {
+ AddressInfo info = new AddressInfo(SimpleString.toSimpleString(config.getName()));
+ info.setRoutingType(config.getRoutingType());
+ info.setDefaultDeleteOnNoConsumers(config.getDefaultDeleteOnNoConsumers());
+ info.setDefaultMaxConsumers(config.getDefaultMaxConsumers());
+
+ addAddressInfo(info);
+ deployQueuesFromListCoreQueueConfiguration(config.getQueueConfigurations());
+ }
+ }
+
+ private void deployQueuesFromListCoreQueueConfiguration(List<CoreQueueConfiguration> queues) throws Exception {
+ for (CoreQueueConfiguration config : queues) {
deployQueue(SimpleString.toSimpleString(config.getAddress()), SimpleString.toSimpleString(config.getName()), SimpleString.toSimpleString(config.getFilterString()), config.isDurable(), false);
}
}
+ private void deployQueuesFromConfiguration() throws Exception {
+ deployQueuesFromListCoreQueueConfiguration(configuration.getQueueConfigurations());
+ }
private void checkForPotentialOOMEInAddressConfiguration() {
long totalMaxSizeBytes = 0;
@@ -2134,7 +2153,22 @@ public class ActiveMQServerImpl implements ActiveMQServer {
}
}
- private Queue createQueue(final SimpleString address,
+ @Override
+ public AddressInfo addAddressInfo(AddressInfo addressInfo) {
+ return postOffice.addAddressInfo(addressInfo);
+ }
+
+ @Override
+ public AddressInfo removeAddressInfo(SimpleString address) {
+ return postOffice.removeAddressInfo(address);
+ }
+
+ @Override
+ public AddressInfo getAddressInfo(SimpleString address) {
+ return postOffice.removeAddressInfo(address);
+ }
+
+ private Queue createQueue(final SimpleString addressName,
final SimpleString queueName,
final SimpleString filterString,
final SimpleString user,
@@ -2143,6 +2177,7 @@ public class ActiveMQServerImpl implements ActiveMQServer {
final boolean ignoreIfExists,
final boolean transientQueue,
final boolean autoCreated) throws Exception {
+
final QueueBinding binding = (QueueBinding) postOffice.getBinding(queueName);
if (binding != null) {
if (ignoreIfExists) {
@@ -2158,14 +2193,16 @@ public class ActiveMQServerImpl implements ActiveMQServer {
final long queueID = storageManager.generateID();
final QueueConfig.Builder queueConfigBuilder;
- if (address == null) {
+ if (addressName == null) {
queueConfigBuilder = QueueConfig.builderWith(queueID, queueName);
} else {
- queueConfigBuilder = QueueConfig.builderWith(queueID, queueName, address);
-
+ queueConfigBuilder = QueueConfig.builderWith(queueID, queueName, addressName);
}
final QueueConfig queueConfig = queueConfigBuilder.filter(filter).pagingManager(pagingManager).user(user).durable(durable).temporary(temporary).autoCreated(autoCreated).build();
final Queue queue = queueFactory.createQueueWith(queueConfig);
+
+ addAddressInfo(new AddressInfo(queue.getAddress()));
+
if (transientQueue) {
queue.setConsumersRefCount(new TransientQueueManagerImpl(this, queue.getName()));
} else if (queue.isAutoCreated()) {
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/c175efd9/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/AddressInfo.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/AddressInfo.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/AddressInfo.java
new file mode 100644
index 0000000..03c3fa0
--- /dev/null
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/AddressInfo.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.activemq.artemis.core.server.impl;
+
+import org.apache.activemq.artemis.api.config.ActiveMQDefaultConfiguration;
+import org.apache.activemq.artemis.api.core.SimpleString;
+
+public class AddressInfo {
+
+ public enum RoutingType {
+ MULTICAST, ANYCAST
+ }
+
+ private final SimpleString name;
+
+ private RoutingType routingType = RoutingType.MULTICAST;
+
+ private boolean defaultDeleteOnNoConsumers;
+
+ private int defaultMaxConsumers;
+
+ public AddressInfo(SimpleString name) {
+ this.name = name;
+ }
+
+ public RoutingType getRoutingType() {
+ return routingType;
+ }
+
+ public void setRoutingType(RoutingType routingType) {
+ this.routingType = routingType;
+ }
+
+ public boolean isDefaultDeleteOnNoConsumers() {
+ return defaultDeleteOnNoConsumers;
+ }
+
+ public void setDefaultDeleteOnNoConsumers(boolean defaultDeleteOnNoConsumers) {
+ this.defaultDeleteOnNoConsumers = defaultDeleteOnNoConsumers;
+ }
+
+ public int getDefaultMaxConsumers() {
+ return defaultMaxConsumers;
+ }
+
+ public void setDefaultMaxConsumers(int defaultMaxConsumers) {
+ this.defaultMaxConsumers = defaultMaxConsumers;
+ }
+
+ public SimpleString getName() {
+ return name;
+ }
+}
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/c175efd9/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java
index d004a22..ce924c0 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java
@@ -46,13 +46,14 @@ import org.apache.activemq.artemis.core.security.Role;
import org.apache.activemq.artemis.core.server.JournalType;
import org.apache.activemq.artemis.core.server.SecuritySettingPlugin;
import org.apache.activemq.artemis.core.server.cluster.impl.MessageLoadBalancingType;
+import org.apache.activemq.artemis.core.server.impl.AddressInfo;
import org.apache.activemq.artemis.core.server.impl.LegacyLDAPSecuritySettingPlugin;
import org.apache.activemq.artemis.core.settings.impl.SlowConsumerPolicy;
import org.junit.Assert;
import org.junit.Test;
-import static org.apache.activemq.artemis.core.config.CoreAddressConfiguration.RoutingType.ANYCAST;
-import static org.apache.activemq.artemis.core.config.CoreAddressConfiguration.RoutingType.MULTICAST;
+import static org.apache.activemq.artemis.core.server.impl.AddressInfo.RoutingType.ANYCAST;
+import static org.apache.activemq.artemis.core.server.impl.AddressInfo.RoutingType.MULTICAST;
public class FileConfigurationTest extends ConfigurationImplTest {
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/c175efd9/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/addressing/AddressingTest.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/addressing/AddressingTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/addressing/AddressingTest.java
new file mode 100644
index 0000000..43d6071
--- /dev/null
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/addressing/AddressingTest.java
@@ -0,0 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.activemq.artemis.tests.integration.addressing;
+
+public class AddressingTest {
+
+}
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/c175efd9/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/server/impl/fakes/FakePostOffice.java
----------------------------------------------------------------------
diff --git a/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/server/impl/fakes/FakePostOffice.java b/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/server/impl/fakes/FakePostOffice.java
index 6f23e34..9424fc3 100644
--- a/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/server/impl/fakes/FakePostOffice.java
+++ b/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/server/impl/fakes/FakePostOffice.java
@@ -33,6 +33,7 @@ import org.apache.activemq.artemis.core.server.Queue;
import org.apache.activemq.artemis.core.server.QueueCreator;
import org.apache.activemq.artemis.core.server.RoutingContext;
import org.apache.activemq.artemis.core.server.ServerMessage;
+import org.apache.activemq.artemis.core.server.impl.AddressInfo;
import org.apache.activemq.artemis.core.server.impl.MessageReferenceImpl;
import org.apache.activemq.artemis.core.transaction.Transaction;
@@ -60,6 +61,22 @@ public class FakePostOffice implements PostOffice {
}
@Override
+ public AddressInfo addAddressInfo(AddressInfo addressInfo) {
+ return null;
+ }
+
+
+ @Override
+ public AddressInfo removeAddressInfo(SimpleString address) {
+ return null;
+ }
+
+ @Override
+ public AddressInfo getAddressInfo(SimpleString addressName) {
+ return null;
+ }
+
+ @Override
public void addBinding(final Binding binding) throws Exception {
}
[3/4] activemq-artemis git commit: ARTEMIS-790 Added Configuration
conversion tooL
Posted by ma...@apache.org.
ARTEMIS-790 Added Configuration conversion tooL
Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/764f983b
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/764f983b
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/764f983b
Branch: refs/heads/ARTEMIS-780
Commit: 764f983bd01548de73d9b5891defaf09ae3b91dd
Parents: c175efd
Author: Martyn Taylor <mt...@redhat.com>
Authored: Fri Oct 21 10:51:21 2016 +0100
Committer: Martyn Taylor <mt...@redhat.com>
Committed: Fri Oct 21 13:24:26 2016 +0100
----------------------------------------------------------------------
artemis-tools/pom.xml | 56 +
.../config/XMLConfigurationMigration.java | 237 ++
.../migrate/config/addressing/Address.java | 73 +
.../tools/migrate/config/addressing/Queue.java | 50 +
.../src/main/resources/META-INF/MANIFEST.MF | 2 +
.../config/XMLConfigurationMigrationTest.java | 47 +
.../test/resources/artemis-configuration.xsd | 2591 ++++++++++++++++++
.../src/test/resources/artemis-server.xsd | 46 +
artemis-tools/src/test/resources/broker.xml | 64 +
.../src/test/resources/replace/broker.xml | 64 +
.../src/test/resources/replace/broker2.xml | 64 +
pom.xml | 1 +
12 files changed, 3295 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/764f983b/artemis-tools/pom.xml
----------------------------------------------------------------------
diff --git a/artemis-tools/pom.xml b/artemis-tools/pom.xml
new file mode 100644
index 0000000..9ce22fd
--- /dev/null
+++ b/artemis-tools/pom.xml
@@ -0,0 +1,56 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.activemq</groupId>
+ <artifactId>artemis-pom</artifactId>
+ <version>1.5.0-SNAPSHOT</version>
+ </parent>
+
+ <name>ActiveMQ Artemis Tools</name>
+ <groupId>org.apache.activemq.tools</groupId>
+ <artifactId>artemis-tools</artifactId>
+ <packaging>jar</packaging>
+
+ <properties>
+ <activemq.basedir>${project.basedir}/..</activemq.basedir>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
+ </archive>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/764f983b/artemis-tools/src/main/java/org/apache/activemq/artemis/tools/migrate/config/XMLConfigurationMigration.java
----------------------------------------------------------------------
diff --git a/artemis-tools/src/main/java/org/apache/activemq/artemis/tools/migrate/config/XMLConfigurationMigration.java b/artemis-tools/src/main/java/org/apache/activemq/artemis/tools/migrate/config/XMLConfigurationMigration.java
new file mode 100644
index 0000000..56833ea
--- /dev/null
+++ b/artemis-tools/src/main/java/org/apache/activemq/artemis/tools/migrate/config/XMLConfigurationMigration.java
@@ -0,0 +1,237 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.activemq.artemis.tools.migrate.config;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathFactory;
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.activemq.artemis.tools.migrate.config.addressing.Address;
+import org.apache.activemq.artemis.tools.migrate.config.addressing.Queue;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+public class XMLConfigurationMigration {
+
+ private static XMLConfigurationMigration migration;
+
+ private final Document document;
+
+ public static void main(String[] args) throws Exception {
+
+ if (args.length == 0) {
+ System.err.println("Invalid args");
+ printUsage();
+ }
+ else {
+ File input = new File(args[0]);
+ if (input.isDirectory()) {
+ System.out.println("Scanning directory: " + input.getAbsolutePath());
+ recursiveTransform(input);
+ }
+ else {
+ if (args.length != 2) {
+ System.err.println("Invalid args");
+ printUsage();
+ }
+ else {
+ transform(input, new File(args[1]));
+ }
+ }
+ }
+ }
+
+ private static void recursiveTransform(File root) throws Exception {
+ for ( File file : root.listFiles())
+ {
+ scanAndTransform(file);
+ }
+ }
+
+
+ public static void scanAndTransform(File pFile) throws Exception {
+ try {
+ for (File f : pFile.listFiles()) {
+ if (f.isDirectory()) {
+ scanAndTransform(f);
+ } else {
+ try {
+ if (f.getName().endsWith("xml")) {
+ File file = new File(f.getAbsolutePath() + ".new");
+ if (transform(f, file)) {
+ File r = new File(f.getAbsolutePath());
+
+ f.renameTo(new File(f.getAbsolutePath() + ".bk"));
+ file.renameTo(r);
+ }
+ }
+ }
+ catch (Exception e) {
+ //continue
+ }
+ }
+ }
+ }
+ catch (NullPointerException e) {
+ System.out.println(pFile.getAbsoluteFile());
+ }
+ }
+
+ public static void printUsage() {
+ System.out.println("Please specify a directory to scan, or input and output file");
+ }
+
+ public static boolean transform(File input, File output) throws Exception {
+
+ migration = new XMLConfigurationMigration(input);
+ try {
+ if (!input.exists()) {
+ System.err.println("Input file not found: " + input);
+ }
+
+ if (migration.convertQueuesToAddresses()) {
+ Properties properties = new Properties();
+ properties.put(OutputKeys.INDENT, "yes");
+ properties.put("{http://xml.apache.org/xslt}indent-amount", "3");
+ properties.put(OutputKeys.ENCODING, "UTF-8");
+ migration.write(output, properties);
+ return true;
+ }
+ }
+ catch (Exception e)
+ {
+ System.err.println("Error tranforming document");
+ e.printStackTrace();
+ }
+ return false;
+ }
+
+ public XMLConfigurationMigration(File input) throws Exception {
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setIgnoringElementContentWhitespace(true);
+
+ DocumentBuilder db = factory.newDocumentBuilder();
+ this.document = db.parse(input);
+ }
+
+ public boolean convertQueuesToAddresses() throws Exception {
+
+ Map<String, Address> addresses = new HashMap<>();
+
+ String xPathQueues = "/configuration/core/queues";
+ String xPathQueue = "/configuration/core/queues/queue";
+ String xPathAttrName = "@name";
+ String xPathAddress = "address";
+ String xPathFilter = "filter/@string";
+ String xPathDurable = "durable";
+
+ XPath xPath = XPathFactory.newInstance().newXPath();
+
+ NodeList xpathResult = (NodeList) xPath.evaluate(xPathQueue, document, XPathConstants.NODESET);
+ if (xpathResult == null || xpathResult.getLength() == 0) {
+ // doesn't require change
+ return false;
+ }
+
+ for (int i = 0; i < xpathResult.getLength(); i++) {
+ Node queueNode = xpathResult.item(i);
+
+ Queue queue = new Queue();
+ queue.setName(xPath.evaluate(xPathAttrName, queueNode, XPathConstants.STRING).toString());
+ queue.setDurable(xPath.evaluate(xPathDurable, queueNode, XPathConstants.STRING).toString());
+ queue.setFilter(xPath.evaluate(xPathFilter, queueNode, XPathConstants.STRING).toString());
+
+ String addressName = xPath.evaluate(xPathAddress, queueNode, XPathConstants.STRING).toString();
+ Address address;
+
+ if (addresses.containsKey(addressName)) {
+ address = addresses.get(addressName);
+ }
+ else {
+ address = new Address();
+ address.setName(addressName);
+ addresses.put(addressName, address);
+ }
+ address.getQueues().add(queue);
+ }
+
+ Node queues = ((Node) xPath.evaluate(xPathQueues, document, XPathConstants.NODE));
+
+ if (queues != null) {
+ Node core = queues.getParentNode();
+ core.removeChild(queues);
+
+ Element a = document.createElement("addresses");
+ for (Address addr : addresses.values()) {
+ Element eAddr = document.createElement("address");
+ eAddr.setAttribute("name", addr.getName());
+ eAddr.setAttribute("type", addr.getRoutingType());
+
+ if (addr.getQueues().size() > 0) {
+ Element eQueues = document.createElement("queues");
+ for (Queue queue : addr.getQueues()) {
+ Element eQueue = document.createElement("queue");
+ eQueue.setAttribute("name", queue.getName());
+ eQueue.setAttribute("max-consumers", addr.getDefaultMaxConsumers());
+ eQueue.setAttribute("delete-on-no-consumers", addr.getDefaultDeleteOnNoConsumers());
+
+ if (queue.getDurable() != null && !queue.getDurable().isEmpty()) {
+ Element eDurable = document.createElement("durable");
+ eDurable.setTextContent(queue.getDurable());
+ eQueue.appendChild(eDurable);
+ }
+
+ if (queue.getFilter() != null && !queue.getFilter().isEmpty()) {
+ Element eFilter = document.createElement("filter");
+ eFilter.setAttribute("string", queue.getFilter());
+ eQueue.appendChild(eFilter);
+ }
+
+ eQueues.appendChild(eQueue);
+ }
+ eAddr.appendChild(eQueues);
+ }
+ a.appendChild(eAddr);
+ }
+ core.appendChild(a);
+ }
+
+ document.normalize();
+ return true;
+ }
+
+ public void write(File output, Properties outputProperties) throws TransformerException {
+ Transformer transformer = TransformerFactory.newInstance().newTransformer();
+ transformer.setOutputProperties(outputProperties);
+ StreamResult streamResult = new StreamResult(output);
+ transformer.transform(new DOMSource(document), streamResult);
+ }
+}
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/764f983b/artemis-tools/src/main/java/org/apache/activemq/artemis/tools/migrate/config/addressing/Address.java
----------------------------------------------------------------------
diff --git a/artemis-tools/src/main/java/org/apache/activemq/artemis/tools/migrate/config/addressing/Address.java b/artemis-tools/src/main/java/org/apache/activemq/artemis/tools/migrate/config/addressing/Address.java
new file mode 100644
index 0000000..c483c75
--- /dev/null
+++ b/artemis-tools/src/main/java/org/apache/activemq/artemis/tools/migrate/config/addressing/Address.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.activemq.artemis.tools.migrate.config.addressing;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Address {
+
+ private String name;
+
+ private String routingType = "multicast";
+
+ private String defaultMaxConsumers = "-1";
+
+ private String defaultDeleteOnNoConsumers = "false";
+
+ private List<Queue> queues = new ArrayList<>();
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getRoutingType() {
+ return routingType;
+ }
+
+ public void setRoutingType(String routingType) {
+ this.routingType = routingType;
+ }
+
+ public String getDefaultMaxConsumers() {
+ return defaultMaxConsumers;
+ }
+
+ public void setDefaultMaxConsumers(String defaultMaxConsumers) {
+ this.defaultMaxConsumers = defaultMaxConsumers;
+ }
+
+ public String getDefaultDeleteOnNoConsumers() {
+ return defaultDeleteOnNoConsumers;
+ }
+
+ public void setDefaultDeleteOnNoConsumers(String defaultDeleteOnNoConsumers) {
+ this.defaultDeleteOnNoConsumers = defaultDeleteOnNoConsumers;
+ }
+
+ public List<Queue> getQueues() {
+ return queues;
+ }
+
+ public void setQueues(List<Queue> queues) {
+ this.queues = queues;
+ }
+}
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/764f983b/artemis-tools/src/main/java/org/apache/activemq/artemis/tools/migrate/config/addressing/Queue.java
----------------------------------------------------------------------
diff --git a/artemis-tools/src/main/java/org/apache/activemq/artemis/tools/migrate/config/addressing/Queue.java b/artemis-tools/src/main/java/org/apache/activemq/artemis/tools/migrate/config/addressing/Queue.java
new file mode 100644
index 0000000..f88b8ef
--- /dev/null
+++ b/artemis-tools/src/main/java/org/apache/activemq/artemis/tools/migrate/config/addressing/Queue.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.activemq.artemis.tools.migrate.config.addressing;
+
+public class Queue {
+
+ String name;
+
+ String filter;
+
+ String durable;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getFilter() {
+ return filter;
+ }
+
+ public void setFilter(String filter) {
+ this.filter = filter;
+ }
+
+ public String getDurable() {
+ return durable;
+ }
+
+ public void setDurable(String durable) {
+ this.durable = durable;
+ }
+}
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/764f983b/artemis-tools/src/main/resources/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/artemis-tools/src/main/resources/META-INF/MANIFEST.MF b/artemis-tools/src/main/resources/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..72543bf
--- /dev/null
+++ b/artemis-tools/src/main/resources/META-INF/MANIFEST.MF
@@ -0,0 +1,2 @@
+Manifest-Version: 1.0
+Main-Class: org.apache.activemq.artemis.tools.migrate.config.XMLConfigurationMigration
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/764f983b/artemis-tools/src/test/java/org/apache/activemq/artemis/tools/migrate/config/XMLConfigurationMigrationTest.java
----------------------------------------------------------------------
diff --git a/artemis-tools/src/test/java/org/apache/activemq/artemis/tools/migrate/config/XMLConfigurationMigrationTest.java b/artemis-tools/src/test/java/org/apache/activemq/artemis/tools/migrate/config/XMLConfigurationMigrationTest.java
new file mode 100644
index 0000000..f68e9c2
--- /dev/null
+++ b/artemis-tools/src/test/java/org/apache/activemq/artemis/tools/migrate/config/XMLConfigurationMigrationTest.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.activemq.artemis.tools.migrate.config;
+
+import javax.xml.transform.OutputKeys;
+import java.io.File;
+import java.util.Properties;
+
+import org.junit.Test;
+
+public class XMLConfigurationMigrationTest {
+
+ @Test
+ public void testQueuesReplacedWithAddresses() throws Exception {
+ File brokerXml = new File(this.getClass().getClassLoader().getResource("broker.xml").toURI());
+ XMLConfigurationMigration tool = new XMLConfigurationMigration(brokerXml);
+
+ File output = new File("target/out.xml");
+ tool.convertQueuesToAddresses();
+
+ Properties properties = new Properties();
+ properties.put(OutputKeys.INDENT, "yes");
+ properties.put("{http://xml.apache.org/xslt}indent-amount", "3");
+ properties.put(OutputKeys.ENCODING, "UTF-8");
+ tool.write(output, properties);
+ }
+
+ @Test
+ public void scanAndReplaceTest() throws Exception {
+ File dir = new File(this.getClass().getClassLoader().getResource("replace").getPath());
+ XMLConfigurationMigration.scanAndTransform(dir);
+ }
+}