<?xml version="1.0" encoding="UTF-8"?>
<!-- 
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.
 -->
<!-- Sample context.xml showing how to tweak logging and some parameters. -->
<!-- See the Install Guide for more information about this file. -->
<Context path="/taverna-server">
	<!-- Sample logging configuration. -->
	<Valve className="org.apache.catalina.valves.AccessLogValve" />

	<!-- Controls whether URs are logged. -->
	<Parameter name="usage.logFile" value="%{WEBAPPROOT}/usage.log"
		description="Full path to name of file that usage records for executed workflow runs will be dumped to. To make it relative to the webapp root, prefix with '%{WEBAPPROOT}/'." />
	<Parameter name="usage.disableDB" value="no"
		description="Set to yes to disable writing of URs to the database." />

	<!-- For email-dispatched notifications. -->
	<Parameter name="email.host" value="localhost"
		description="Where the SMTP server for sending notification emails is located."/>
	<Parameter name="email.from" value="taverna.server@localhost"
		description="Who to send notification emails as."/>
</Context>
