#
# 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.
#
#

connectionfactory.connectionfactory = amqp://${perftests.messaging-hostport-plain}/?jms.username=${perftests.messaging-user}&jms.password=${perftests.messaging-password}&jms.forceAsyncAcks=true
connectionfactory.sslconnectionfactory = amqps://${perftests.messaging-hostport-tls}/?jms.username=${perftests.messaging-user}&jms.password=${perftests.messaging-password}&jms.forceAsyncAcks=true

connectionfactory.connectionfactory_noprefetch = amqp://${perftests.messaging-hostport-plain}/?jms.username=${perftests.messaging-user}&jms.password=${perftests.messaging-password}&jms.forceAsyncAcks=true&jms.prefetchPolicy.all=0
connectionfactory.sslconnectionfactory_noprefetch = amqps://${perftests.messaging-hostport-tls}/?jms.username=${perftests.messaging-user}&jms.password=${perftests.messaging-password}&jms.forceAsyncAcks=true&jms.prefetchPolicy.all=0

queue.controllerqueue = controllerqueue

jdbcDriverClass=org.apache.derby.jdbc.EmbeddedDriver
# writes to a results database in ./perftestResultsDb by default.
jdbcUrl=jdbc:derby:${perftests.results-directory};create=true
