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

#
# The properties defined in this file will be made available through system
# properties at the very beginning of the Karaf's boot process.
#


# Log level when the pax-logging service is not available
# This level will only be used while the pax-logging service bundle
# is not fully available.
# To change log levels, please refer to the org.ops4j.pax.logging.cfg file
# instead.
org.ops4j.pax.logging.DefaultServiceLog.level=ERROR

#
# Name of this karaf instance.
#
karaf.name=root

#
# Default repository where bundles will be loaded from before using
# other maven repositories.  For the full maven configuration, see
# the org.ops4j.pax.url.mvn.cfg file.
#
karaf.default.repository=system

#
# Location of a shell script that will be run when starting a shell
# session.  This script can be used to create aliases and define
# additional commands.
#
karaf.shell.init.script=${karaf.home}/etc/shell.init.script

#
# Default role name used for console authorization (JMX, SSH and WEB)
# The syntax is the following:
#   [classname:]principal
# where classname is the class name of the principal object
# (defaults to org.apache.karaf.jaas.modules.RolePrincipal)
# and principal is the name of the principal of that class
# (defaults to admin).
#
# Note that this value can be overriden using the various ConfigAdmin
# configurations for JMX, SSH or the WebConsole.
#
karaf.admin.role=admin



#
# Set this empty property to avoid errors when validating xml documents.
#
xml.catalog.files=

#
# Suppress the bell in the console when hitting backspace to many times
# for example
#
jline.nobell=true

#
# Default port for the OSGI HTTP Service
#
org.osgi.service.http.port=8181

#
# Allow usage of ${servicemix.home} as an alias for ${karaf.home}
#
servicemix.home=${karaf.home}

#
# Activemq configuration
#
activemq.port = 61616
activemq.host = localhost
activemq.url = tcp://${activemq.host}:${activemq.port}


#
# Activemq JMX configuration
#
activemq.jmx.url=service:jmx:rmi:///jndi/rmi://localhost:1099/karaf-${karaf.name}
activemq.jmx.user=smx
activemq.jmx.password=smx

#
# Activemq Webconsole configuration
#
webconsole.type=properties
webconsole.jms.url=${activemq.url}
webconsole.jmx.url=service:jmx:rmi:///jndi/rmi://localhost:1099/karaf-${karaf.name}
webconsole.jmx.user=smx
webconsole.jmx.password=smx


javax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
javax.xml.transform.TransformerFactory=org.apache.xalan.processor.TransformerFactoryImpl

#
# CXF Log configuration
#
org.apache.cxf.Logger=org.apache.cxf.common.logging.Slf4jLogger

# Workaround for KARAF-1117: Jetty will use a JUL logger.
org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.JavaUtilLog
