---
title:  Setting Up the HTTP Module for AppServers
---

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

To use the module, you need to modify your application's `web.xml` files. Configuration is slightly different depending on the topology you are setting up.

Refer to [Common Topologies for HTTP Session Management](common_gemfire_topologies.html#common_gemfire_topologies) for more information. Modifying the war file can be done manually or with the `modify_war` script. To see the command line options for the `modify_war` script, invoke:

``` pre
$ modify_war -h
```

## <a id="weblogic_setting_up_the_module__section_9D330F0A9E934B209D77C5A5D79B741C" class="no-quick-link"></a>Manual Configuration

To modify your war or ear file manually, make the following updates:

-   **web.xml** needs a filter added as follows. If you have your own filters, the <%=vars.product_name%> Module filter **must** be the first one.

    ``` pre
    <filter>
        <filter-name>gemfire-session-filter</filter-name>
        <filter-class>
          org.apache.geode.modules.session.filter.SessionCachingFilter
        </filter-class>
        <init-param>
            <param-name>cache-type</param-name>
            <param-value>peer-to-peer</param-value>
        </init-param>
        <init-param>
            <param-name>gemfire.property.locators</param-name>
            <param-value>localhost[10334]</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>gemfire-session-filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    ```

-   Add the following jar files from the AppServer.zip to the `WEB-INF/lib` directory of the war:
    -   geode-modules jar
    -   geode-modules-session-internal jar
    -   geode-modules-session jar
    -   slf4j-api jar
    -   slf4j-jdk14 jar
-   Add the following jar files from the `$GEODE/lib` directory to the `WEB-INF/lib` directory of the war, where `$GEODE` is set to the <%=vars.product_name%> product installation:
    -   antlr jar
    -   commons-io jar
    -   commons-lang jar
    -   commons-validator jar
    -   fastutil jar
    -   geode-commons jar
    -   geode-core jar
    -   geode-json jar
    -   geode-management jar
    -   geode-logging jar
    -   geode-serialization jar
    -   javax.transaction-api jar
    -   jgroups jar
    -   log4j-api jar
    -   log4j-core jar
    -   log4j-jul jar
    -   micrometer-core jar
    -   shiro-core jar

If you are deploying an ear file:

-   Copy all the dependent files, given above, to the `lib` directory of the ear.
-   Modify each embedded war file's manifest by adding a Class-Path entry which references the shared jars added in the previous step. For example:

    ``` pre
    Manifest-Version: 1.0
    Built-By: joe
    Build-Jdk: 1.8.0_77
    Created-By: Apache Maven
    Archiver-Version: Plexus Archiver
    Class-Path: lib/geode-modules-1.0.0.jar
    lib/geode-modules-session-internal-1.0.0.jar
    lib/geode-modules-session-1.0.0.jar
    lib/slf4j-api-1.7.7.jar
    lib/slf4j-jdk14-1.7.7.jar
    lib/antlr-2.7.7.jar
    lib/fastutil-7.0.2.jar
    lib/geode-core-1.0.0.jar
    lib/geode-json-1.0.0.jar
    lib/javax.transaction-api-1.3.jar
    lib/jgroups-3.6.8.Final.jar
    lib/log4j-api-2.5.jar
    lib/log4j-core-2.5.jar
    lib/log4j-jul-2.5.jar
    ```

## <a id="weblogic_setting_up_the_module__section_20294A39368D4402AEFB3D074E8D5887" class="no-quick-link"></a>Peer-to-Peer Setup

<img src="../../images_svg/http_module_p2p_with_locator.svg" id="weblogic_setting_up_the_module__image_86E949E0F1AD4E9EB67605EFA4E97E13" class="image" />

To run <%=vars.product_name%> in a peer-to-peer configuration, use the `modify_war` script with options
`-t peer-to-peer`,  `-p gemfire.property.locators=localhost[10334]`, and `-p gemfire.propery.cache-xml-file=<moduleDir>/conf/cache-peer.xml`
to result in the following `web.xml` content:

``` pre
<filter>
    <filter-name>gemfire-session-filter</filter-name>
    <filter-class>
        org.apache.geode.modules.session.filter.SessionCachingFilter
    </filter-class>
    <init-param>
        <param-name>cache-type</param-name>
        <param-value>peer-to-peer</param-value>
    </init-param>
    <init-param>
        <param-name>gemfire.property.locators</param-name>
        <param-value>localhost[10334]</param-value>
    </init-param>
</filter>
```

## <a id="weblogic_setting_up_the_module__section_B0CEBE93564540DBA165E0F7A10FDC0B" class="no-quick-link"></a>Client/Server Setup

<img src="../../images_svg/http_module_cs_with_locator.svg" id="weblogic_setting_up_the_module__image_BDF2273487EA4FEB9895D02A6F6FD445" class="image" />

To run <%=vars.product_name%> in a client/server configuration, you make the application server operate as a <%=vars.product_name%> client. Use the `-t client-server` option to the `modify_war` script. This adds the following filter to application server's `web.xml` file:

To run <%=vars.product_name%> in a client/server configuration, you make the application server operate as a <%=vars.product_name%> client. Use the `modify_war` script with options
`-t client-server` and `-p gemfire.property.cache-xml-file=<module dir>/conf/cache-client.xml`
to result in the following `web.xml` content:

``` pre
<filter>
    <filter-name>gemfire-session-filter</filter-name>
    <filter-class>
        org.apache.geode.modules.session.filter.SessionCachingFileter
    </filter-class>
    <init-param>
        <param-name>cache-type</param-name>
        <param-value>client-server</param-value>
    </init-param>
    <init-param>
        <param-name>gemfire.property.cache-xml-file</param-name>
        <param-value>module dir/conf/cache-client.xml</param-value>
    </init-param>
</filter>
```

The `cache-client.xml` file contains a &lt;pool&gt; element pointing at the locator. Its default value is localhost\[10334\].

## <a id="weblogic_setting_up_the_module__section_2B97047AB30A4C549D91AD258657FBA6" class="no-quick-link"></a>Starting the Application Server

After you update the configuration, you are now ready to start your application server instance. Instantiate the locator first:

``` pre
$ gfsh start locator --name=locator1
```

Then start the server:

``` pre
$ gfsh start server \
    --name=server1 \
    --server-port=0 \
    --locators=localhost[10334] \
    --classpath=<moduleDir>/lib/geode-modules-1.0.0.jar:\
<moduleDir>/lib/geode-modules-session-internal-1.0.0.jar
```

Once the application server is started, the <%=vars.product_name%> client will automatically launch within the application server process.

## <a id="weblogic_setting_up_the_module__section_3E186713737E4D5383E23B41CDFED59B" class="no-quick-link"></a>Verifying that <%=vars.product_name%> Started

You can verify that <%=vars.product_name%> has successfully started by inspecting the application server log file. For example:

``` pre
info 2016/04/18 10:04:18.685 PDT <localhost-startStop-2> tid=0x1a]
Initializing <%=vars.product_name%> Modules
Java version:   1.0.0 user1 041816 2016-11-18 08:46:17 -0700
javac 1.8.0_<%=vars.min_java_update%>
Native version: native code unavailable
Source revision: 19dd8eb1907e0beb2aa3e0a17d5f12c6cbec6968
Source repository: develop
Running on: /192.0.2.0, 8 cpu(s), x86_64 Mac OS X 10.11.4
```

Information is also logged within the <%=vars.product_name%> log file, which by default is named `gemfire_modules.<date>.log`.
