## CWS Deployment with Hessian

Hessian-based Cayenne Web Service is a regular Java web application that contains Cayenne mapping file and persistent objects. What makes it a web service is a HessianServlet mapped via web.xml that handles requests from Cayenne Client Tier applications.

| Client tier Java classes have to be present on the server together with server DataObjects. So you'll end up with two sets of objects mapped to the same set of entities. Hopefully we will get rid of this inconvenience in the future releases.

### A typical CWS application .war file:

    myapp/
      WEB-INF/
         web.xml
         lib/
            cayenne.jar
            hessian.jar
            my-db-driver.jar
            someother.jar
         classes/
            cayenne.xml
            DataMap.map.xml
            DataNode.driver.xml

            com/mycompany/PersistentObject1.class
            com/mycompany/auto/_PersistentObject1.class

            com/mycompany/client/PersistentObject1.class
            com/mycompany/client/auto/_PersistentObject1.class

### Configuring Deployment Parameters in web.xml

Cayenne service configuration is done via `web.xml`:

- (optional) Configuring session timout other than the default (timeout value is in minutes):

      <session-config>
         <session-timeout>10</session-timeout>
      </session-config>

- Declaring a HessianServlet

      <servlet>
         <servlet-name>cayenne</servlet-name>
         <servlet-class>org.apache.cayenne.remote.hessian.service.HessianServlet</servlet-class>

         <!-- optional - XMPPBridge setup for peer-to-peer notifications -->
         <!--
         <init-param>
            <param-name>cayenne.RemoteService.EventBridge.factory</param-name>
            <param-value>org.apache.cayenne.event.XMPPBridgeFactory</param-value>
         </init-param>
         <init-param>
            <param-name>cayenne.XMPPBridge.xmppHost</param-name>
            <param-value>localhost</param-value>
         </init-param>
         <init-param>
            <param-name>cayenne.XMPPBridge.xmppPort</param-name>
            <param-value>5222</param-value>
         </init-param>
         <init-param>
            <param-name>cayenne.XMPPBridge.xmppChatService</param-name>
            <param-value>conference</param-value>
         </init-param>
         -->
      </servlet>

      <servlet-mapping>
        <servlet-name>cayenne</servlet-name>
        <url-pattern>/cayenne</url-pattern>
      </servlet-mapping>

- (Optional) Configuring HTTP basic authentication:

      <security-constraint>
         <web-resource-collection>
            <web-resource-name>Cayenne Web Service</web-resource-name>
            <url-pattern>/cayenne</url-pattern>
         </web-resource-collection>
         <auth-constraint>
            <role-name>remote-app</role-name>
         </auth-constraint>
      </security-constraint>

      <login-config>
         <auth-method>BASIC</auth-method>
         <realm-name>CWS Realm</realm-name>
      </login-config>

      <security-role>
         <description>All CWS client applications</description>
         <role-name>remote-app</role-name>
      </security-role>