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

# Path to java executable
${wrapper.java.command}


wrapper.java.mainclass=org.apache.directory.server.wrapper.ApacheDsTanukiWrapper
wrapper.max_failed_invocations=1

wrapper.java.classpath.1=../lib/*.jar

# Java Library Path (location of Wrapper.DLL or libwrapper.so)
wrapper.java.library.path.1=../lib

# Java Additional Parameters
wrapper.java.additional.1=-Dlog4j.configuration=${double.quote}file:///%INSTANCE_DIRECTORY%/conf/log4j.properties${double.quote}
wrapper.java.additional.2=-Dapacheds.var.dir=${double.quote}%INSTANCE_DIRECTORY%${double.quote}
wrapper.java.additional.3=-Dapacheds.log.dir=${double.quote}%INSTANCE_DIRECTORY%/log${double.quote}
wrapper.java.additional.4=-Dapacheds.run.dir=${double.quote}%INSTANCE_DIRECTORY%/run${double.quote}
wrapper.java.additional.5=-Dapacheds.instance=${double.quote}%INSTANCE%${double.quote}

# Initial Java Heap Size (in MB)
#wrapper.java.initmemory=1024

# Maximum Java Heap Size (in MB)
#wrapper.java.maxmemory=2048

# Application parameters.  Add parameters as needed starting from 1
wrapper.app.parameter.1=${double.quote}%INSTANCE_DIRECTORY%${double.quote}
wrapper.app.parameter.2=%APACHEDS_COMMAND%

#********************************************************************
# Wrapper Logging Properties
#********************************************************************
# Format of output for the console.  (See docs for formats)
wrapper.console.format=PM

# Log Level for console output.  (See docs for log levels)
wrapper.console.loglevel=INFO

# Log file to use for wrapper output logging.
wrapper.logfile=%INSTANCE_DIRECTORY%/log/wrapper.log

# Format of output for the log file.  (See docs for formats)
wrapper.logfile.format=LPTM

# Log Level for log file output.  (See docs for log levels)
wrapper.logfile.loglevel=INFO

# Maximum size that the log file will be allowed to grow to before
#  the log is rolled. Size is specified in bytes.  The default value
#  of 0, disables log rolling.  May abbreviate with the 'k' (kb) or
#  'm' (mb) suffix.  For example: 10m = 10 megabytes.
wrapper.logfile.maxsize=1m

# Maximum number of rolled log files which will be allowed before old
#  files are deleted.  The default value of 0 implies no limit.
wrapper.logfile.maxfiles=5

# Log Level for sys/event log output.  (See docs for log levels)
wrapper.syslog.loglevel=NONE

# Number of seconds to allow between the time that the Wrapper 
#  launches the JVM process and the time that the JVM side of the 
#  Wrapper responds that the application has started.
wrapper.startup.timeout=120

# Number of seconds to allow between the Wrapper pinging the JVM and 
#  the response from the JVM.
wrapper.ping.timeout=240

#********************************************************************
# Wrapper Windows NT/2000/XP Service Properties
#********************************************************************
# WARNING - Do not modify any of these properties when an application
#  using this configuration file has been installed as a service.
#  Please uninstall the service before modifying this section.  The
#  service can then be reinstalled.

# Title to use when running as a console
wrapper.console.title=apacheds-%INSTANCE%

# Name of the service
wrapper.ntservice.name=apacheds-%INSTANCE%

# Display name of the service
wrapper.ntservice.displayname=ApacheDS - %INSTANCE%

# Description of the service
wrapper.ntservice.description=ApacheDS %INSTANCE% server instance

# Service dependencies.  Add dependencies as needed starting from 1
#wrapper.ntservice.dependency.1=

# Mode in which the service is installed.  AUTO_START or DEMAND_START
wrapper.ntservice.starttype=AUTO_START

# Allow the service to interact with the desktop.
wrapper.ntservice.interactive=false