<?xml version="1.0"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

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

<web-app>
  <display-name>Open For Business - Marketing Manager</display-name>
  <description>Marketing Manager Module of the Open For Business Project</description>

  <context-param>
    <param-name>entityDelegatorName</param-name>
    <param-value>default</param-value>
    <description>The Name of the Entity Delegator to use, defined in entityengine.xml</description>
  </context-param>
  <context-param>
    <param-name>localDispatcherName</param-name>
    <param-value>marketing</param-value>
    <description>A unique name used to identify/recognize the local dispatcher for the Service Engine</description>
  </context-param>
  <context-param>
    <param-name>scriptLocationPath</param-name>
    <param-value>/WEB-INF/bsh</param-value>
    <description>BeanShell Script Location</description>
  </context-param>
  <context-param>
    <param-name>mainDecoratorLocation</param-name>
    <param-value>component://marketing/widget/CommonScreens.xml</param-value>
    <description>The location of the main-decorator screen to use for this webapp; referred to as a context variable in screen def XML files.</description>
  </context-param>

    <filter>
        <filter-name>ContextFilter</filter-name>
        <display-name>ContextFilter</display-name>
        <filter-class>org.ofbiz.webapp.control.ContextFilter</filter-class>
        <init-param>
            <param-name>disableContextSecurity</param-name>
            <param-value>N</param-value>
        </init-param>
        <init-param>
            <param-name>allowedPaths</param-name>
            <param-value>/error:/control:/select:/index.html:/index.jsp:/default.html:/default.jsp:/images:/includes/maincss.css</param-value>
        </init-param>
        <init-param>
            <param-name>errorCode</param-name>
            <param-value>403</param-value>
        </init-param>
        <init-param>
            <param-name>redirectPath</param-name>
            <param-value>/control/main</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>ContextFilter</filter-name>
            <url-pattern>/*</url-pattern>
    </filter-mapping>

  <listener><listener-class>org.ofbiz.webapp.control.ControlEventListener</listener-class></listener>
  <listener><listener-class>org.ofbiz.webapp.control.LoginEventListener</listener-class></listener>
  <!-- NOTE: not all app servers support mounting implementations of the HttpSessionActivationListener interface -->
  <!-- <listener><listener-class>org.ofbiz.webapp.control.ControlActivationEventListener</listener-class></listener> -->

  <servlet>
    <servlet-name>ControlServlet</servlet-name>
    <display-name>ControlServlet</display-name>
    <description>Main Control Servlet</description>
    <servlet-class>org.ofbiz.webapp.control.ControlServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>ControlServlet</servlet-name>
    <url-pattern>/control/*</url-pattern>
  </servlet-mapping>

  <session-config>
    <session-timeout>60</session-timeout>    <!-- in minutes -->
  </session-config>

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
<!--
  <error-page>
    <error-code>403</error-code>
    <location>/error/error403.jsp</location>
  </error-page>
  <error-page>
    <error-code>404</error-code>
    <location>/error/error404.jsp</location>
  </error-page>
  <error-page>
    <error-code>410</error-code>
    <location>/error/error.jsp</location>
  </error-page>
  <error-page>
    <error-code>500</error-code>
    <location>/error/error.jsp</location>
  </error-page>
-->

<!-- HTTP Response Code definitions:
| "400"   ; Bad Request
| "401"   ; Unauthorized
| "402"   ; Payment Required
| "403"   ; Forbidden
| "404"   ; Not Found
| "405"   ; Method Not Allowed
| "406"   ; Not Acceptable
| "407"   ; Proxy Authentication Required
| "408"   ; Request Time-out
| "409"   ; Conflict
| "410"   ; Gone
| "411"   ; Length Required
| "412"   ; Precondition Failed
| "413"   ; Request Entity Too Large
| "414"   ; Request-URI Too Large
| "415"   ; Unsupported Media Type
| "500"   ; Internal Server Error
| "501"   ; Not Implemented
| "502"   ; Bad Gateway
| "503"   ; Service Unavailable
| "504"   ; Gateway Time-out
| "505"   ; HTTP Version not supported
-->

<!--
  <security-constraint>
    <web-resource-collection>
      <web-resource-name>Entire Site</web-resource-name>
      <description>Entire Site</description>
      <url-pattern>/*</url-pattern>
    </web-resource-collection>
-->
    <!-- For enabling SSL, specify CONFIDENTIAL or INTEGRAL. -->
<!--
    <user-data-constraint>
      <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
  </security-constraint>
-->
</web-app>
