<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
  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 web-app 
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>


    <!-- General description of your web application -->

    <display-name>HDFS Proxy</display-name>
    <description>
      get data from grid forward war
    </description>

    <context-param>
      <param-name>webmaster</param-name>
      <param-value>zhiyong1@yahoo-inc.com</param-value>
      <description>
        The EMAIL address of the administrator to whom questions
        and comments about this application should be addressed.
      </description>
    </context-param>
          
    <filter>
	   	<filter-name>ldapIpDirFilter</filter-name>
	   	<filter-class>org.apache.hadoop.hdfsproxy.LdapIpDirFilter</filter-class>
		</filter>

		<filter-mapping>
        <filter-name>ldapIpDirFilter</filter-name>
				<url-pattern>/*</url-pattern>
    </filter-mapping>



    
    <servlet>
    	<servlet-name>proxyForward</servlet-name>
      <description>forward data access to specifc servlets</description>
      <servlet-class>org.apache.hadoop.hdfsproxy.ProxyForwardServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>proxyForward</servlet-name>
        <url-pattern>/listPaths/*</url-pattern>
    </servlet-mapping>
	  <servlet-mapping>
        <servlet-name>proxyForward</servlet-name>
        <url-pattern>/data/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>proxyForward</servlet-name>
        <url-pattern>/streamFile/*</url-pattern>
    </servlet-mapping>
    
    <servlet>
    	<servlet-name>fileForward</servlet-name>
      <description>forward file data access to streamFile</description>
      <servlet-class>org.apache.hadoop.hdfsproxy.ProxyFileForward</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>fileForward</servlet-name>
        <url-pattern>/file/*</url-pattern>
    </servlet-mapping>
    
    

		<welcome-file-list>
		  <welcome-file>index.html</welcome-file>
		</welcome-file-list>

    <!-- Define the default session timeout for your application,
         in minutes.  From a servlet or JSP page, you can modify
         the timeout for a particular session dynamically by using
         HttpSession.getMaxInactiveInterval(). -->

    <session-config>
      <session-timeout>30</session-timeout>    <!-- 30 minutes -->
    </session-config>    


</web-app>








