
# -------------------------------------------------------------------
# $Id$
#
# This is the configuration file for Turbine.
#
# Note that strings containing "," (comma) characters must backslash
# escape the comma (i.e. '\,')
#
# -------------------------------------------------------------------

# -------------------------------------------------------------------
#
#  L O G S
#
# -------------------------------------------------------------------

log4j.file = /WEB-INF/conf/Log4j.properties

# -------------------------------------------------------------------
#
#  M A I L  S E R V E R
#
# -------------------------------------------------------------------
# Your mail server for outgoing email.
#
# Default: null
# -------------------------------------------------------------------

mail.server=localhost

# -------------------------------------------------------------------
# SMTP-From header for your outgoing messages
#
# All failed delivery messages will be returned to this address.
# If unset, these messages will be sent to the address in the
# From header (standard behaviour)
#
# Default: null
# -------------------------------------------------------------------

mail.smtp.from=localhost@localhost

# -------------------------------------------------------------------
#
#  M O D U L E  C A C H I N G
#
# -------------------------------------------------------------------
# This determines whether or not to cache the modules in memory.  For
# development, turn this off.  For production, turn this on.
#
# Default: false
# -------------------------------------------------------------------

module.cache=false

# If module.cache=true, then how large should we make the hashtables
# by default.

action.cache.size=20
layout.cache.size=10
navigation.cache.size=10
page.cache.size=5
screen.cache.size=50
scheduledjob.cache.size=10

# -------------------------------------------------------------------
#
#  M O D U L E  P A C K A G E S
#
# -------------------------------------------------------------------
# This is the "classpath" for Turbine.  In order to locate your own
# modules, you should add them to this path.  For example, if you have
# com.company.actions, com.company.screens, com.company.navigations,
# then this setting would be "com.company,org.apache.turbine.modules".
# This path is searched in order.  For example, Turbine comes with a
# screen module named "Login".  If you wanted to have your own screen
# module named "Login", then you would specify the path to your
# modules before the others.
#
# Default: org.apache.turbine.modules
# -------------------------------------------------------------------

module.packages=com.upstate.turbine.modules,org.apache.turbine.modules

# -------------------------------------------------------------------
#
#  F R A M E W O R K  S E T T I N G S
#
# -------------------------------------------------------------------
# These are settings that control the behaviour of the framework,
# such as determining whether a template system is in use, what
# the default templates and screens are and session handling settings.
# -------------------------------------------------------------------

# Used to set the template homepage if you are using a template
# layout.  This is the template that will be displayed to the user
# when no specific template is requested.  This is normally executed
# as the first template the user sees when they access the system.
#
# Default: Index.vm

template.homepage=Index.vm

# This is the default screen to show to people when they first access
# the system.  This is only used if there is no value for
# template.homepage.  This is for use when you are not using a
# templating system such as Velocity or JSP.
#
# Default: Login

screen.homepage=

# This is the template that is shown on an incorrect login attempt.
# Setting this property will override any value of screen.login specfied
# below.
#
# Default: Login.vm

template.login=Login.vm

# This is the page that is shown on an incorrect login attempt.  It is
# referenced in the LoginUser action. This is only used if there is no value
# for template.login.  This is for use when you are not using a
# templating system such as Velocity or JSP.
#
# Default: Login

screen.login=

# This is the template that is used by the respective Template based
# ErrorScreen for displaying the error. If you are not using a Template based
# ErrorScreen, then this is ignored.
#
# Default: Error.vm

template.error=Error.vm

# This is the default error screen.
#
# Default: VelocityErrorScreen

screen.error=VelocityErrorScreen

# This is the screen that is displayed when the user's web page is in
# an invalid state.
#
# Default: error.InvalidState

screen.invalidstate=error.InvalidState

# Set the default Doctype.  The default Doctype can be set by using
# the single strings: Html40Strict, Html40Transitional, or
# Html40Frameset.  Additionally the default can be supplied as two
# strings separated by a comma giving the DTD and URI.
#
# Default: ignored if not set to some value.

default.doctype=Html40Transitional

# This is the default action to log a user in.  If you write your own
# implementation of the login action, make sure that you change this
# to reflect the new name.

action.login=LoginUser

# This is the default action to log a user out. If you write your own
# implementation of the logout action, make sure that you change this
# to reflect the new name.

action.logout=LogoutUser

# This is the default action to validate whether or not a session is
# valid.  For example, if you want to make sure if a user has already
# logged in or not.
#
# Default: SessionValidator

action.sessionvalidator=sessionvalidator.TemplateSessionValidator

# This is the timeout in seconds for sessions. If left commented out, the
# servlet container's default timeout will be left as is.

# session.timeout=1800

# This is the default action that builds up the AccessControlList for
# the individual users session.

action.accesscontroller=AccessController

# -------------------------------------------------------------------
#
#  J N D I  C O N T E X T S
#
# -------------------------------------------------------------------

# This indicates whether Turbine should try to create JNDI contexts.
#
# Default: false
#
# contexts=true

# These are the JNDI context properties.  Each context's properties
# are defined by the properties beginning with context.name.
#
# Default: none
#
# Example: The following will create a JNDI context named "name" in
# the data.contexts Hashtable.  It will point at the RMI registry on
# localhost running on port 1099, and will use
# com.sun.jndi.rmi.registry.RegistryContextFactory as the initial
# context factory:
#
# context.name.java.naming.provider.url=rmi://localhost:1099
# context.name.java.naming.factory.initial=com.sun.jndi.rmi.registry.RegistryContextFactory

# -------------------------------------------------------------------
#
#  P E E R S
#
# -------------------------------------------------------------------
# Supplies Turbine with information about the database schema, which
# can simplify any required Peer classes.
#
# Default: org.apache.turbine.util.db.map.TurbineMapBuilder
# -------------------------------------------------------------------

database.maps.builder=org.apache.turbine.util.db.map.TurbineMapBuilder

# -------------------------------------------------------------------
#
#  M E S S A G E S
#
# -------------------------------------------------------------------
# Note that strings containing "," (comma) characters must backslash
# escape the comma (i.e. '\,')

# The message that can be displayed before a user logs in.

login.message=Thank you for your visit. Please log into the system.

# The message that can be displayed when no screen is defined.

login.message.noscreen=There has been an error. Your session is valid but the screen variable is not defined.

# The message that can be displayed when a user enters an incorrect
# password or username.

login.error=Sorry your username or password is incorrect!

# The message that can be displayed when a user logs out.

logout.message=Thank you for using the system. Please come back soon.

# -------------------------------------------------------------------
#
#  S E C U R E  S O C K E T S  L A Y E R
#
# -------------------------------------------------------------------
# Whether the web server is able to use SSL.  Links in Turbine can
# check this property to determine if SSL can be used.
#
# Default: true
# -------------------------------------------------------------------

use.ssl=true

# -------------------------------------------------------------------
#
#  S E R V I C E S
#
# -------------------------------------------------------------------
# Classes for Turbine Services should be defined here.
# Format: services.[name].classname=[implementing class]
#
# To specify properties of a service use the following syntax:
# service.[name].[property]=[value]
#
# The order that these services is listed is important! The
# order that is stated here is the order in which the services
# will be initialized. Keep this is mind if you have services
# that depend on other services during initialization.
# -------------------------------------------------------------------
services.CryptoService.classname=org.apache.turbine.services.crypto.TurbineCryptoService
services.ComponentService.classname=org.apache.turbine.services.component.TurbineComponentService
services.FactoryService.classname=org.apache.turbine.services.factory.TurbineFactoryService
services.PoolService.classname=org.apache.turbine.services.pool.TurbinePoolService
services.RunDataService.classname=org.apache.turbine.services.rundata.TurbineRunDataService
services.ServletService.classname=org.apache.turbine.services.servlet.TurbineServletService
services.AssemblerBrokerService.classname=org.apache.turbine.services.assemblerbroker.TurbineAssemblerBrokerService
services.LocalizationService.classname=org.apache.turbine.services.localization.TurbineLocalizationService
services.MimeTypeService.classname=org.apache.turbine.services.mimetype.TurbineMimeTypeService
services.GlobalCacheService.classname=org.apache.turbine.services.cache.TurbineGlobalCacheService
#services.SchedulerService.classname=org.apache.turbine.services.schedule.TurbineSchedulerService
services.UniqueIdService.classname=org.apache.turbine.services.uniqueid.TurbineUniqueIdService
services.UploadService.classname=org.apache.turbine.services.upload.TurbineUploadService
services.SecurityService.classname=org.apache.turbine.services.security.db.DBSecurityService
services.PullService.classname=org.apache.turbine.services.pull.TurbinePullService
services.TemplateService.classname=org.apache.turbine.services.template.TurbineTemplateService

# Turn on the appropriate template service.
services.VelocityService.classname=org.apache.turbine.services.velocity.TurbineVelocityService



# -------------------------------------------------------------------
#
#  R U N   D A T A   S E R V I C E
#
# -------------------------------------------------------------------
# Default implementations of base interfaces for request processing.
# Additional configurations can be defined by using other keys
# in the place of the <default> key.
# -------------------------------------------------------------------

services.RunDataService.default.run.data=org.apache.turbine.services.rundata.DefaultTurbineRunData
services.RunDataService.default.parameter.parser=org.apache.turbine.util.parser.DefaultParameterParser
services.RunDataService.default.cookie.parser=org.apache.turbine.util.parser.DefaultCookieParser

# -------------------------------------------------------------------
#
#  C A C H E   S E R V I C E
#
# -------------------------------------------------------------------

# Interval at which the cache will be checked. The default is
# 5000ms or 5 seconds.

services.GlobalCacheService.cache.check.frequency = 5000

# -------------------------------------------------------------------
#
#  A S S E M B L E R  B R O K E R  S E R V I C E
#
# -------------------------------------------------------------------
# A list of AssemblerFactory classes that will be registered
# with TurbineAssemblerBrokerService
# -------------------------------------------------------------------

services.AssemblerBrokerService.screen=org.apache.turbine.services.assemblerbroker.util.java.JavaScreenFactory
services.AssemblerBrokerService.action=org.apache.turbine.services.assemblerbroker.util.java.JavaActionFactory
services.AssemblerBrokerService.layout=org.apache.turbine.services.assemblerbroker.util.java.JavaLayoutFactory
services.AssemblerBrokerService.page=org.apache.turbine.services.assemblerbroker.util.java.JavaPageFactory
services.AssemblerBrokerService.navigation=org.apache.turbine.services.assemblerbroker.util.java.JavaNavigationFactory
services.AssemblerBrokerService.scheduledjob=org.apache.turbine.services.assemblerbroker.util.java.JavaScheduledJobFactory

# -------------------------------------------------------------------
#
#  T E M P L A T E  S E R V I C E
#
# -------------------------------------------------------------------

# Roughly, the number of templates in each category.
#
# Defaults: layout=2, navigation=10, screen=50

services.TemplateService.layout.cache.size=2
services.TemplateService.navigation.cache.size=10
services.TemplateService.screen.cache.size=50

# -------------------------------------------------------------------
#
#  P U L L  S E R V I C E
#
# -------------------------------------------------------------------
# These are the properties for the Pull Service, the service
# that works in conjuction with the Turbine Pull Model API.
# -------------------------------------------------------------------
services.PullService.earlyInit= true

# This determines whether the non-request tools are refreshed
# on each request (request tools aren't ever, because they're
# instantiated for the request only anyway).
services.PullService.tools.per.request.refresh=true

# These are tools that are placed in the context by the service
# These tools will be made available to all your
# templates. You list the tools in the following way:
#
# tool.<scope>.<id> = <classname>
#
# <scope>      is the tool scope: global, request, session
#              or persistent (see below for more details)
# <id>         is the name of the tool in the context
#
# You can configure the tools in this way:
# tool.<id>.<parameter> = <value>
#
# So if you find "global", "request", "session" or "persistent" as second
# part, it is a configuration to put a tool into the toolbox, else it is a
# tool specific configuration.
#
# For example:
#
# tool.global.ui    = org.apache.turbine.util.pull.UIManager
# tool.global.mm    = org.apache.turbine.util.pull.MessageManager
# tool.request.link = org.apache.turbine.services.pull.tools.TemplateLink
# tool.request.page = org.apache.turbine.util.template.TemplatePageAttributes
#
# Then:
#
# tool.ui.skin = default
#
# configures the value of "skin" for the "ui" tool.
#
# Tools are accessible in all templates by the <id> given
# to the tool. So for the above listings the UIManager would
# be available as $ui, the MessageManager as $mm, the TemplateLink
# as $link and the TemplatePageAttributes as $page.
#
# You should avoid using tool names called "global", "request",
# "session" or "persistent" because of clashes with the possible Scopes.
#
# Scopes:
#
#   global:     tool is instantiated once and that instance is available
#               to all templates for all requests. Tool must be threadsafe.
#
#   request:    tool is instantiated once for each request (although the
#               PoolService is used to recycle instances). Tool need not
#               be threadsafe.
#
#   session:    tool is instantiated once for each user session, and is
#               stored in the user's temporary hashtable. Tool should be
#               threadsafe.
#
#   persistent: tool is instantitated once for each use session, and
#               is stored in the user's permanent hashtable. This means
#               for a logged in user the tool will be persisted in the
#               user's objectdata. Tool should be threadsafe and
#               Serializable.
#
# Defaults: none

tool.request.link=org.apache.turbine.service.pull.tools.TemplateLink
tool.request.page=org.apache.turbine.util.template.HtmlPageAttributes
tool.request.content=org.apache.turbine.service.pull.tools.ContentTool
#tool.request.l10n=org.apache.turbine.services.localization.LocalizationTool


# -------------------------------------------------------------------
#
#  V E L O C I T Y  S E R V I C E
#
# -------------------------------------------------------------------
services.VelocityService.earlyInit= true

# The location of Velocity configuration file, relative to webapp root
# These properties will override the default properties set by Velocity.
# You should specify the path to the templates directories as well as
# the path to the log file and they should also be relative to webapp root

services.VelocityService.template.extension=vm
services.VelocityService.default.page = VelocityPage
services.VelocityService.default.screen=DefaultScreen
services.VelocityService.default.layout = VelocityECSLayout
services.VelocityService.default.navigation=VelocityNavigation
services.VelocityService.default.error.screen = VelocityErrorScreen
services.VelocityService.default.layout.template = /Default.vm

services.VelocityService.runtime.log=/logs/velocity.log
#services.VelocityService.input.encoding=UTF-8
services.VelocityService.velocimacro.library = GlobalMacros.vm

services.VelocityService.resource.loader = file
services.VelocityService.file.resource.loader.description = Velocity File Resource Loader
services.VelocityService.file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
services.VelocityService.file.resource.loader.path = /templates/app
services.VelocityService.file.resource.loader.cache = true
services.VelocityService.file.resource.loader.modificationCheckInterval = 2

services.VelocityService.resource.loader = classpath
services.VelocityService.classpath.resource.loader.description = Velocity Classpath Resource Loader
services.VelocityService.classpath.resource.loader.class = org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader

# -------------------------------------------------------------------
#
#  J S P  S E R V I C E
#
# -------------------------------------------------------------------

services.JspService.template.extension=jsp
services.JspService.default.page = JspPage
services.JspService.default.screen=BaseJspScreen
services.JspService.default.layout = JspLayout
services.JspService.default.navigation=BaseJspNavigation
services.JspService.default.error.screen = JspErrorScreen
services.JspService.default.layout.template = Default.jsp

services.JspService.templates = /templates/app
services.JspService.buffer.size = 8192

# -------------------------------------------------------------------
#
#  U P L O A D  S E R V I C E
#
# -------------------------------------------------------------------

# Whether the files should be automatically picked up by
# ParameterParser.

services.UploadService.automatic=true

#
# The directory where files will be temporarily stored.
#
services.UploadService.repository=.

#
# The maximum size of a request that will be processed.
#
services.UploadService.size.max=1048576

#
# The maximum size of a request that will have it's elements cached in
# memory by TurbineUploadService class.
#
services.UploadService.size.threshold=10240

# -------------------------------------------------------------------
#
#  L O C A L I Z A T I O N  S E R V I C E
#
# -------------------------------------------------------------------

# Default ResourceBundle and language/country codes used by the
# TurbineLocalizationService.
#
locale.default.bundle=MyBundle
locale.default.language=en
locale.default.country=US

#
# This will set the charset= portion of the ContentType: header.
# Leave commented out unless you want to return stuff as a different
# charset.
#
# locale.default.charset=

# -------------------------------------------------------------------
#
#  M I M E T Y P E  S E R V I C E
#
# -------------------------------------------------------------------

# This property specifies a file containing mappings between MIME
# content types and the corresponding file name extensions. The
# service itself contains a hardcoded set of most common mappings.
# The file must use the same syntax as the mime.types file of
# the Apache Server, i.e.
# <mimetype> <ext1> <ext2>...
#
#services.MimeTypeService.mime.types=/WEB-INF/conf/mime.types

# This property specifies a file containing mappings between locales
# and the corresponding character encodings. The service itself
# contains a hardcoded set of most common mappings.
# The file should use the Java property file syntax, i.e.
# <lang_country_variant>=<charset>
#
#services.MimeTypeService.charsets=/WEB-INF/conf/charset.properties

# -------------------------------------------------------------------
#
#  S C H E D U L E R  S E R V I C E
#
# -------------------------------------------------------------------

#
# Set enabled to true to start the scheduler.  The scheduler can be
# stopped and started after Turbine has been intialized.  See the
# javadocs for org.apache.turbine.services.schedule.TurbineScheduler
# for the methods calls.
#
# Default = false
#

services.SchedulerService.enabled=false

# Determines if the scheduler service should be initialized early.  This
# Should always be set to true!!!!

services.SchedulerService.earlyInit=true

# -------------------------------------------------------------------
#
#  C R Y P T O   S E R V I C E
#
# -------------------------------------------------------------------

#
# Standard Unix crypt(3) password encryption.
#
services.CryptoService.algorithm.unix  = org.apache.turbine.services.crypto.provider.UnixCrypt
#
# This providers allows access to the Java Message Digest encryption algorithms
#
services.CryptoService.algorithm.java  = org.apache.turbine.services.crypto.provider.JavaCrypt
#
# This is a simple, cleartext "encryption" provider.
#
services.CryptoService.algorithm.cleartext  = org.apache.turbine.services.crypto.provider.ClearCrypt
#
# Use this provider if you upgrade from Turbine 2.1 to current. It provides bug-to-bug
# compatibility for passwords created with the old Security Service. See the javadocs for
# OldJavaCrypt
#
services.CryptoService.algorithm.oldjava  = org.apache.turbine.services.crypto.provider.OldJavaCrypt
#
# This is the default crypto provider. It implements the normal Java MessageDigest ciphers
# You need not to have this, it is the default if no algorithms are given. The default
# provider gives you all the Java MessageDigest Ciphers
#
services.CryptoService.algorithm.default  = org.apache.turbine.services.crypto.provider.JavaCrypt
# -------------------------------------------------------------------
#
#  S E C U R I T Y  S E R V I C E
#
# -------------------------------------------------------------------

#
# This is the class that implements the UserManager interface to
# manage User objects. Default is the UserManager from the
# DBSecurityService.
# Override this setting if you want your User information stored
# on a different medium (LDAP directory is a good example).
#
# Adjust this setting if you change the Setting of the SecurityService class (see above).

# Default: org.apache.turbine.services.security.db.DBUserManager
services.SecurityService.user.manager = org.apache.turbine.services.security.db.DBUserManager

#
# These are the default classes used by the Security Service to
# provide User, Group, Role and Permission objects.
# You want to override this setting only if you want your
# implementation to provide application specific addtional
# functionality.
#
# For LDAP use:
# services.SecurityService.user.class=org.apache.turbine.services.security.ldap.LDAPUser
# LDAP does not yet provide custom Group, User and Role objects so you
# must use it with the default TurbineGroup, TurbineRole and
# TurbinePermission objects.
#
# Class for User. Default: org.apache.turbine.om.security.TurbineUser
services.SecurityService.user.class=org.apache.turbine.om.security.TurbineUser
# Class for Group. Default: org.apache.turbine.om.security.TurbineGroup
services.SecurityService.group.class=org.apache.turbine.om.security.TurbineGroup
# Class for Role. Default: org.apache.turbine.om.security.TurbineRole
services.SecurityService.role.class=org.apache.turbine.om.security.TurbineRole
# Class for Permission. Default: org.apache.turbine.om.security.TurbinePermission
services.SecurityService.permission.class=org.apache.turbine.om.security.TurbinePermission

#
# This is the class that implements the ACL interface.
# You want to override this setting only if you want your ACL
# implementation to provide application specific addtional
# functionality.
#

# Default: org.apache.turbine.util.security.TurbineAccessControlList
services.SecurityService.acl.class = org.apache.turbine.util.security.TurbineAccessControlList

#
# This setting is DBSecurityService specific - this class is consulted for the names
# of the columns in the users' tables for the purpose of creating join queries.
# If you use your own User implementation in conjunction with DBSecurityService,
# it's peer class must implement org.apache.turbine.om.security.peer.UserPeer interface,
# and you need to specify the name of the peer class here.
#
# Default: org.apache.turbine.om.security.peer.TurbineUserPeer
#
services.SecurityService.userPeer.class=org.apache.turbine.om.security.peer.TurbineUserPeer

#
# This is used by the SecurityService to make the password checking
# secure. When enabled, passwords are transformed by a one-way
# function into a sequence of bytes that is base64 encoded.
# It is impossible to guess the plain-text form of the password
# from the representation. When user logs in, the entered password
# is transformed the same way and then compared with stored value.
#
# Default: false
#

services.SecurityService.secure.passwords=false

#
# This property lets you choose what digest algorithm will be used
# for encrypting passwords. Check documentation of your JRE for
# available algorithms.
#
# Default: SHA
#

services.SecurityService.secure.passwords.algorithm=SHA

# Configuration for the LDAP Security Service implementation

#services.SecurityService.ldap.security.athentication=simple
#services.SecurityService.ldap.port=<LDAP PORT>
#services.SecurityService.ldap.host=<LDAP HOST>
#services.SecurityService.ldap.admin.username=<ADMIN USERNAME>
#services.SecurityService.ldap.admin.password=<ADMIN PASSWORD>
#services.SecurityService.ldap.user.basesearch=<SEARCH PATTERN>
#services.SecurityService.ldap.user.search.filter=<SEARCH FILTER>
#services.SecurityService.ldap.dn.attribute=userPrincipalName
#services.SecurityService.ldap.provider=com.sun.jndi.ldap.LdapCtxFactory

#
# This property specifies the type of security authentication
#
# Default: simple
#

# services.SecurityService.ldap.security.authentication=simple

#
# The host name where the LDAP server is listenting.
#
# Default: localhost
#

# services.SecurityService.ldap.host=localhost

#
# The port number where the LDAP server is listenting.
#
# Default: 389
#

# services.SecurityService.ldap.port=389

#
# The user name of the admin user. The admin user should be able to
# read from the LDAP repository.
# Characteres '/' are replaced by '=' and '%' are replaced by ','.
#
# Default: none
#

# services.SecurityService.ldap.admin.username=turbineUserUniqueId/turbine%dc/example%dc/com

#
# The password of the admin user.
#
# Default: none
#

# services.SecurityService.ldap.admin.password=turbine

#
# The class name of the ldap provider.
#
# Default: com.sun.jndi.ldap.LdapCtxFactory
#

# services.SecurityService.ldap.provider=com.sun.jndi.ldap.LdapCtxFactory

#
# The directory base to search.
# '/' are replaced by '=' and '%' are replaced by ','.
#
# Default: none
#

# services.SecurityService.ldap.basesearch=dc/example%dc/com

#
# The unique id. It must be an integer field and it is required only when
# the users are in LDAP but the groups, roles and permissions are in the
# Database.
#
# services.SecurityService.ldap.user.userid=

#
# This property maps the username with an attribute in LDAP.
#
# Default: turbineUserUniqueId
#

# services.SecurityService.ldap.user.username=turbineUserUniqueId

#
# This property maps the firstname with an attribute in LDAP.
#
# Default: turbineUserFirstName
#

# services.SecurityService.ldap.user.firstname=turbineUserFirstName

#
# This property maps the lastname with an attribute in LDAP.
#
# Default: turbineUserLastName
#

# services.SecurityService.ldap.user.lastname=turbineUserLastName

#
# This property maps the email with an attribute in LDAP.
#
# Default: turbineUserMailAddress
#

# services.SecurityService.ldap.user.email=turbineUserMailAddress

#
# This property maps the userPassword with an attribute in LDAP.
#
# Default: none
#

# services.SecurityService.ldap.user.password=userPassword


# -------------------------------------------------------------------
#
#  X M L R P C  S E R V I C E
#
# -------------------------------------------------------------------
# This property specifies which class should be used to parse
# xml for XmlRpc functionality.
#
# Default: org.apache.xerces.parsers.SAXParser

services.XmlRpcService.parser=org.apache.xerces.parsers.SAXParser

# This property specifies which network interface the server part of
# XmlRpc should bind to (if it is active).  If not specified, the
# server will bind to all addresses configured for your host.
#
# Default: 127.0.0.1

#services.XmlRpcService.address=127.0.0.1

# This property specifies which TCP port the web server part of
# XmlRpc should listen on (if it is active).
#
# Default: 12345

services.XmlRpcService.port=12345

# If any classes are specified here, the Service will create an
# instance of them here and start up a listener on the specified
# port.
#
# Note that the handlers demonstrated are not very useful.  You
# will have to invent your own services.  They do however
# illustrate that any class with a default constructor can be
# added here
#
# The handler parameter without further extension determines
# the default handler for the service
#
# Default: no classes are specified by default

#services.XmlRpcService.handler.$default=java.util.Hashtable
#services.XmlRpcService.handler.stringhandler=java.lang.String

# The following properties allow the transfer of data between
# separate Turbine applications running on different servers.
# This allows B2B type behavior such as sending database
# updates in the form of XML or whatever type of data
# that needs to be shared between Turbine applications
# running on separate servers.

services.XmlRpcService.handler.file = org.apache.turbine.services.xmlrpc.util.FileHandler
services.XmlRpcService.paranoid = false
services.XmlRpcService.acceptClient = 192.168.1.*
services.XmlRpcService.denyClient =

# Do we want a secure server

services.XmlRpcService.secure.server = false

# Secure server options

services.XmlRpcService.secure.server.option.java.protocol.handler.pkgs = \
    com.sun.net.ssl.internal.www.protocol

services.XmlRpcService.secure.server.option.security.provider = \
    com.sun.net.ssl.internal.ssl.Provider

services.XmlRpcService.secure.server.option.security.protocol = TLS

# You probably want to keep your key stores and trust stores
# clear out of your webapp.

services.XmlRpcService.secure.server.option.javax.net.ssl.keyStore = /tmp/keystore
services.XmlRpcService.secure.server.option.javax.net.ssl.keyStoreType = jks
services.XmlRpcService.secure.server.option.javax.net.ssl.keyStorePassword = password
services.XmlRpcService.secure.server.option.javax.net.ssl.trustStore = /tmp/truststore
services.XmlRpcService.secure.server.option.javax.net.ssl.trustStoreType = jks
services.XmlRpcService.secure.server.option.javax.net.ssl.trustStorePassword = password

services.XmlRpcService.secure.server.option.sun.ssl.keymanager.type = SunX509
services.XmlRpcService.secure.server.option.sun.ssl.trust.manager.type = SunX509

# These values should be set to 'all' for debugging purposes.

services.XmlRpcService.secure.server.option.javax.net.debug = none
services.XmlRpcService.secure.server.option.java.security.debug = none

# -------------------------------------------------------------------
#
#  P O O L  S E R V I C E
#
# -------------------------------------------------------------------

# Default capacity of pools of the Object pooling service.
#
# Default: 128
services.PoolService.pool.capacity = 128

# Class specific capacities used instead of the default if specified.
#
#services.PoolService.pool.capacity.org.apache.turbine.services.rundata.DefaultTurbineRunData=512

# -------------------------------------------------------------------
#
#  F A C T O R Y  S E R V I C E
#
# -------------------------------------------------------------------

# A comma separated list of classloaders (very optional)
#
# Example: org.foo.bar.MyClassLoader, org.ack.joe.YourClassLoader
#
#services.FactoryService.class.loaders=

# Customized factories to be used instead of the default factory.
# E.g. to instantiate XML parsers, SSL sockets, etc., which require
# specific instantiation not supported by the default factory.
# The property name is prefixed with "factory" followed by the
# name of the production class. The value is the class name of
# the factory implementing the Factory interface. The factory
# will be instantiated by using the service itself.
#
# Examples:
#
# services.FactoryService.factory.javax.xml.parsers.DocumentBuilder=org.foo.xml.DomBuilderFactory
# services.FactoryService.factory.javax.xml.parsers.SAXParser=org.foo.xml.SaxParserFactory
# services.FactoryService.factory.java.net.ServerSocket=org.foo.net.SslServerSocketFactory

#--------------------------------------------------------------------
#
# X S L T  S E R V I C E
#
#--------------------------------------------------------------------

services.XSLTService.path = /path/to/stylesheets
services.XSLTService.cache = false

# -------------------------------------------------------------------
#
#  I N T A K E   S E R V I C E
#
# -------------------------------------------------------------------

# The location of the xml file specifying valid inputs
#
# If you need to define multiple definition files, you can should
# seperate them with commas.
#
# Default: WEB-INF/conf/intake.xml
#
services.IntakeService.xml.path=WEB-INF/conf/intake.xml

# This file is used to cache the XML definitions after they are
# parsed.  It provides for a small performance gain on startup.
#
# Note: Even if you have multiple XML definition files, you will
# only need one serialization file!
#
# Default: WEB-INF/appData.ser
#
services.IntakeService.serialize.path=WEB-INF/appData.ser

#--------------------------------------------------------------------
#
# P A R A M E T E R  P A R S E R
#
#--------------------------------------------------------------------
#
# This variable controls the case folding applied to URL variable
# names.
#
# Allowed values: none, lower, upper
# Default: lower
#

url.case.folding=lower



# -------------------------------------------------------------------
#
#  A D D I T I O N A L  P R O P E R T I E S
#
# -------------------------------------------------------------------
# The full path name to an additional properties file. Properties in
# this file will be included in this property set. Duplicate name
# values will be replaced, so be careful.
#
# Default: none
# -------------------------------------------------------------------



