Example.
To configure an application server cluster using Resin:
1) Install and configure resin
2) Install and configure TrackStudio on both nodes
3) Define cluster configuration: trackstudio.cluster and trackstudio.cluster.name
4) Set trackstudio.indexDir and trackstudio.uploadDir
5) Create front.conf and back.conf in [RESIN_HOME]/conf
<resin xmlns="http://caucho.com/ns/resin">
<server>
<http id='frontend' port='8080'/>
<cluster id='backend'>
<srun id='a' host='127.0.0.1' port='6802'/>
<srun id='b' host='127.0.0.1' port='6803'/>
</cluster>
<access-log path='log/access.log'>
<rollover-period>2W</rollover-period>
</access-log>
<host id=''>
<web-app id='/'>
<servlet>
<servlet-name>backend</servlet-name>
<servlet-class>com.caucho.servlets.LoadBalanceServlet
</servlet-class>
<init>
<cluster>backend</cluster>
</init>
</servlet>
<servlet-mapping url-pattern='/*' servlet-name='backend'/>
</web-app>
</host>
</server>
</resin>
<!--
- Resin 3.0 configuration file.
-->
<resin xmlns="http://caucho.com/ns/resin"
xmlns:resin="http://caucho.com/ns/resin/core">
<!--
- Logging configuration for the JDK logging API.
-->
<log name='' level='info' path='stdout:' timestamp='[%H:%M:%S.%s] '/>
<log name='com.caucho.java' level='fine' path='stdout:'
timestamp='[%H:%M:%S.%s] '/>
<log name='com.caucho.loader' level='config' path='stdout:'
timestamp='[%H:%M:%S.%s] '/>
<!--
- For production sites, change dependency-check-interval to something
- like 600s, so it only checks for updates every 10 minutes.
-->
<dependency-check-interval>2s</dependency-check-interval>
<!--
- You can change the compiler to "javac" or jikes.
- The default is "internal" only because it's the most
- likely to be available.
-->
<javac compiler="internal" args=""/>
<!-- Security providers.
- <security-provider>
- com.sun.net.ssl.internal.ssl.Provider
- </security-provider>
-->
<!--
- If starting bin/resin as root on Unix, specify the user name
- and group name for the web server user.
-
- <user-name>resin</user-name>
- <group-name>resin</group-name>
-->
<!--
- Configures threads shared among all HTTP and SRUN ports.
-->
<thread-pool>
<!-- Maximum number of threads. -->
<thread-max>128</thread-max>
<!-- Minimum number of spare connection threads. -->
<spare-thread-min>25</spare-thread-min>
</thread-pool>
<!--
- Configures the minimum free memory allowed before Resin
- will force a restart.
-->
<min-free-memory>1M</min-free-memory>
<server>
<!-- adds all .jar files under the resin/lib directory -->
<class-loader>
<tree-loader path="$resin-home/lib"/>
</class-loader>
<!-- Configures the keepalive -->
<keepalive-max>500</keepalive-max>
<keepalive-timeout>120s</keepalive-timeout>
<!--
- The local cluster, used for load balancing and distributed
- backup.
-->
<cluster>
<srun id='a' host='127.0.0.1' port='6802' index='1'/>
<srun id='b' host='127.0.0.1' port='6803' index='2'/>
<cluster-store type="tcp" path="cluster"/>
</cluster>
<!--
- Enables/disables exceptions when the browser closes a connection.
-->
<ignore-client-disconnect>true</ignore-client-disconnect>
<!--
- Enables the cache
-->
<cache path="cache" memory-size="10M"/>
<!--
- Defaults applied to each web-app.
-->
<web-app-default>
<session-config>
<session-timeout>120</session-timeout>
<cluster-store/>
</session-config>
<!--
- Sets timeout values for cacheable pages, e.g. static pages.
-->
<cache-mapping url-pattern="/" expires="5s"/>
<cache-mapping url-pattern="*.gif" expires="60s"/>
<cache-mapping url-pattern="*.jpg" expires="60s"/>
<!--
- Servlet to use for directory display.
-->
<servlet servlet-name="directory"
servlet-class="com.caucho.servlets.DirectoryServlet"/>
</web-app-default>
<!--
- Sample database pool configuration
-
- The JDBC name is java:comp/env/jdbc/test
-
<database>
<jndi-name>jdbc/mysql</jndi-name>
<driver type="org.gjt.mm.mysql.Driver">
<url>jdbc:mysql://localhost:3306/test</url>
<user></user>
<password></password>
</driver>
<prepared-statement-cache-size>8
</prepared-statement-cache-size>
<max-connections>20</max-connections>
<max-idle-time>30s</max-idle-time>
</database>
-->
<!--
- Default host configuration applied to all virtual hosts.
-->
<host-default>
<class-loader>
<compiling-loader path='webapps/WEB-INF/classes'/>
<library-loader path='webapps/WEB-INF/lib'/>
</class-loader>
<!--
- With another web server, like Apache, this can be commented out
- because the web server will log this information.
-->
<access-log path='logs/access.log'
format='%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"'
rollover-period='1W'/>
<!-- creates the webapps directory for .war expansion -->
<web-app-deploy path='webapps'/>
<!-- creates the deploy directory for .ear expansion -->
<ear-deploy path='deploy'>
<ear-default>
<!-- Configure this for the ejb server
-
- <ejb-server>
- <config-directory>WEB-INF</config-directory>
- <data-source>jdbc/test</data-source>
- </ejb-server>
-->
</ear-default>
</ear-deploy>
<!-- creates the deploy directory for .rar expansion -->
<resource-deploy path='deploy'/>
<!-- creates a second deploy directory for .war expansion -->
<web-app-deploy path='deploy'/>
</host-default>
<!-- includes the web-app-default for default web-app behavior -->
<resin:import path="${resinHome}/conf/app-default.xml"/>
<!-- configures the default host, matching any host name -->
<host id=''>
<document-directory>doc</document-directory>
<!-- configures the root web-app -->
<web-app id='/'>
<!-- adds xsl to the search path -->
<class-loader>
<simple-loader path="$host-root/xsl"/>
</class-loader>
<servlet-mapping url-pattern="/servlet/*" servlet-name="invoker"/>
</web-app>
</host>
</server>
</resin>6) Start instances:
bin/httpd -conf conf/front.conf -server frontend bin/httpd -conf conf/back.conf -server a bin/httpd -conf conf/back.conf -server b
7) Now TrackStudio is available on http://127.0.0.1:8080/TrackStudio
More details on resin configuration is available at http://www.caucho.com/resin-3.0/config/balance.xtp