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

#
# Framework config properties.
#

# To override the packages the framework exports by default from the
# class path, set this variable.
#org.osgi.framework.system.packages=

# To append packages to the default set of exported system packages,
# set this value.
#org.osgi.framework.system.packages.extra=

# The following property makes specified packages from the class path
# available to all bundles. You should avoid using this property.
#org.osgi.framework.bootdelegation=sun.*,com.sun.*

# The following property explicitly specifies the location of the bundle
# cache, which defaults to "felix-cache" in the current working directory.
# If this value is not absolute, then the felix.cache.rootdir controls
# how the absolute location is calculated. (See next property)
#org.osgi.framework.storage=${dollar}{felix.cache.rootdir}/felix-cache

# The following property is used to convert a relative bundle cache
# location into an absolute one by specifying the root to prepend to
# the relative cache path. The default for this property is the
# current working directory.
#felix.cache.rootdir=${dollar}{user.dir}

# The following property controls whether the bundle cache is flushed
# the first time the framework is initialized. Possible values are
# "none" and "onFirstInit"; the default is "none".
#org.osgi.framework.storage.clean=onFirstInit

felix.auto.start.1= \
 file:bundle/org.apache.felix.shell-1.0.2.jar \
 file:bundle/org.apache.felix.shell.tui-1.0.2.jar \
 file:bundle/org.apache.felix.bundlerepository-1.2.1.jar 
felix.log.level=1

# Sets the initial start level of the framework upon startup.
#org.osgi.framework.startlevel=1

# Sets the start level of newly installed bundles.
#felix.startlevel.bundle=1

# Invalid fragment bundles throw an 'exception' by default, but
# uncomment the follow line to have them log a 'warning' instead.
#felix.fragment.validation=warning

# Felix installs a stream and content handler factories by default,
# uncomment the following line to not install them.
#felix.service.urlhandlers=false

#
# Bundle config properties.
#

org.osgi.service.http.port=8080
osgi.shell.telnet=on
obr.repository.url=http://felix.apache.org/obr/releases.xml
