<?xml version="1.0"?>
<!--
  ~ 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.
  -->

<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">

<Configure class="org.mortbay.jetty.webapp.WebAppContext">


  <New id="validation_mail" class="org.mortbay.jetty.plus.naming.Resource">
    <Arg>mail/Session</Arg>
    <Arg>
      <New class="org.mortbay.naming.factories.MailSessionReference">
        <Set name="user"></Set>
        <Set name="password"></Set>
        <Set name="properties">
          <New class="java.util.Properties">
            <Put name="mail.smtp.host">localhost</Put>
            <Put name="mail.from">continuum@localhost</Put>
            <Put name="mail.senderName">Continuum</Put>
            <Put name="mail.debug">true</Put>
          </New>
        </Set>
      </New>
    </Arg>
  </New>

  <New id="continuum" class="org.mortbay.jetty.plus.naming.Resource">
    <Arg>jdbc/continuum</Arg>
    <Arg>
      <New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource">
        <Set name="serverName">localhost</Set>
        <Set name="databaseName">continuum</Set>
        <Set name="user">root</Set>
        <Set name="password"></Set>
      </New>
    </Arg>
  </New>
  <New id="continuum_shutdown" class="org.mortbay.jetty.plus.naming.Resource">
    <Arg>jdbc/continuum_shutdown</Arg>
    <Arg>
      <New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource">
        <Set name="serverName">localhost</Set>
        <Set name="databaseName">continuum</Set>
        <Set name="user">root</Set>
        <Set name="password"></Set>
      </New>
    </Arg>
  </New>
  <New id="users" class="org.mortbay.jetty.plus.naming.Resource">
    <Arg>jdbc/users</Arg>
    <Arg>
      <New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource">
        <Set name="serverName">localhost</Set>
        <Set name="databaseName">users</Set>
        <Set name="user">root</Set>
        <Set name="password"></Set>
      </New>
    </Arg>
  </New>
  <New id="users_shutdown" class="org.mortbay.jetty.plus.naming.Resource">
    <Arg>jdbc/users_shutdown</Arg>
    <Arg>
      <New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource">
        <Set name="serverName">localhost</Set>
        <Set name="databaseName">users</Set>
        <Set name="user">root</Set>
        <Set name="password"></Set>
      </New>
    </Arg>
  </New>

</Configure>

