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

####################################
# OFBiz Startup Application Settings
####################################

# --- OFBiz startup loaders (comma separated)
ofbiz.start.loaders=rmi

# --- OFBiz home directory. Default is current directory
#ofbiz.home=

# --- logs directory relative to ofbiz.home. Default is runtime/logs
#ofbiz.log.dir=

# --- Derby directory relative to ofbiz.home. Default is runtime/data/derby
#derby.system.home=

# --- Container config file relative to ofbiz.home.
#     Default is framework/base/config/ofbiz-containers.xml
#ofbiz.container.config=

# --- Network host, port and key used by the AdminClient to communicate
#     with AdminServer for shutting down OFBiz or inquiring on status
#     Default ofbiz.admin.host 127.0.0.1
#     Default ofbiz.admin.port 10523
#     Default ofbiz.admin.key so3du5kasd5dn
#ofbiz.admin.host=
#ofbiz.admin.port=
#ofbiz.admin.key=

# -- Enable the JVM shutdown hook. Default is true
#ofbiz.enable.hook=false

# -- Auto-Shutdown after load. Default is false
#ofbiz.auto.shutdown=true

# --- Tells AWT not not require a head (X11). Default is true
#java.awt.headless=false

# -- The locale for this OFBiz instance. Default depends on JVM environment
#ofbiz.locale.default=en

# -- The time zone for this OFBiz instance. Default depends on JVM environment
#ofbiz.timeZone.default=GMT
