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