<!--

    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-configuration.xsd">
    <core xmlns="urn:activemq:core">
        <paging-directory>./target/artemis/paging</paging-directory>
        <bindings-directory>./target/artemis/bindings</bindings-directory>
        <journal-directory>./target/artemis/journal</journal-directory>
        <large-messages-directory>./target/artemis/large-messages</large-messages-directory>

        <connectors>
            <connector name="activemq">tcp://localhost:61617</connector>
        </connectors>
        <acceptors>
            <acceptor name="activemq">tcp://localhost:61617</acceptor>
        </acceptors>

        <max-disk-usage>-1</max-disk-usage>
        <security-enabled>false</security-enabled>

        <addresses>
            <address name="outbound">
                <anycast>
                    <queue name="outbound"/>
                </anycast>
            </address>
        </addresses>
    </core>
</configuration>
