Terracotta
From Resin 3.0
(Difference between revisions)
(checkpoint) |
(checkpoint) |
||
Line 93: | Line 93: | ||
<li>Create the Terracotta boot jar: | <li>Create the Terracotta boot jar: | ||
<pre>$TERRACOTTA/bin/make-boot-jar.sh -f $RESIN/tc-config.xml</pre> | <pre>$TERRACOTTA/bin/make-boot-jar.sh -f $RESIN/tc-config.xml</pre> | ||
+ | Note the path of the boot jar created by this command. You will use it in the next step. | ||
</li> | </li> | ||
− | <li>Edit resin.conf, | + | <li>Edit resin.conf, making the following changes: |
+ | <ol> | ||
+ | <li> | ||
<pre> | <pre> | ||
<jvm-arg>-Dcom.sun.management.jmxremote</jvm-arg> | <jvm-arg>-Dcom.sun.management.jmxremote</jvm-arg> | ||
− | <jvm-arg>-Xbootclasspath/p:<path-to | + | <jvm-arg>-Xbootclasspath/p:<path-to-boot-jar></jvm-arg> |
<jvm-arg>-Dtc.install-root=<path-to-terracotta></jvm-arg> | <jvm-arg>-Dtc.install-root=<path-to-terracotta></jvm-arg> | ||
<jvm-arg>-Dtc.config=localhost:9510</jvm-arg> | <jvm-arg>-Dtc.config=localhost:9510</jvm-arg> | ||
+ | </pre> | ||
+ | Make sure to replace the <path-to-boot-jar> and <path-to-terracotta>. | ||
+ | </li> | ||
+ | <li> | ||
+ | Remove the line <pre><http address="*" port="8080"/></pre> from <server-default> section. | ||
+ | </li> | ||
+ | <li> | ||
+ | Remove the default server line <pre><server id="" address="127.0.0.1" port="6800"/></pre> | ||
+ | </li> | ||
+ | <li> | ||
+ | Add two servers: | ||
+ | <pre> | ||
+ | <server id="a" address="127.0.0.1" port="6800"> | ||
+ | <http address="*" port="8080"/> | ||
+ | </server> | ||
+ | |||
+ | <server id="b" address="127.0.0.1" port="6801"> | ||
+ | <http address="*" port="8081"/> | ||
+ | </server> | ||
+ | </pre> | ||
+ | </li> | ||
+ | </ol> | ||
+ | </li> | ||
+ | <li>Start the Terracotta server: <pre>$TERRACOTTA/bin/start-tc-server.sh -f $RESIN/tc-config.xml</pre></li> | ||
+ | <li>Start both Resin servers: | ||
+ | <pre> | ||
+ | cd $RESIN | ||
+ | java -jar lib/resin.jar -server a start | ||
+ | java -jar lib/resin.jar -server b start | ||
</pre> | </pre> | ||
</li> | </li> | ||
− | |||
</ol> | </ol> |
Revision as of 17:29, 16 April 2008
Terracotta and Resin
WARNING: THE FOLLOWING IS INCOMPLETE AND IN PROGRESS!
(The following has been tested with Resin 3.1.5 and Terracotta 2.5.4)
- Download Resin from http://www.caucho.com/download
- Unzip Resin. From now on, we'll refer to the location of the Resin root directory as $RESIN
- Download Terracotta from http://www.terracotta.org
- Unzip Terracotta. From now on, we'll refer to the location of the Terracotta root directory as $TERRACOTTA
- Create the example webapp directory structure:
mkdir -p $RESIN/webapps/terracotta/WEB-INF/classes/example/
- Create the configuration file
$RESIN/webapps/terracotta/WEB-INF/resin-web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://caucho.com/ns/resin"> <servlet servlet-name="hello-servlet" servlet-class="example.HelloWorldServlet"/> <servlet-mapping url-pattern="/*" servlet-name="hello-servlet"/> </web-app>
- Create the HelloWorld Servlet
/usr/local/share/resin/webapps/terracotta/WEB-INF/classes/example/HelloWorldServlet.java
package example; import java.io.*; import java.text.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorldServlet extends HttpServlet { // this is the variable that Terracotta will distribute private ArrayList<Calendar> _accessTimes = new ArrayList<Calendar>(); @Override public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Calendar now = Calendar.getInstance(); synchronized(_accessTimes) { _accessTimes.add((Calendar) now.clone()); DateFormat format = new SimpleDateFormat("yyyy.MM.dd G 'at' HH:mm:ss z"); resp.setContentType("text/html"); PrintWriter out = resp.getWriter(); out.println("<html>"); out.println("<body>"); for (Calendar calendar : _accessTimes) { out.println("<br/>" + format.format(calendar.getTime())); } out.println("</body>"); out.println("</html>"); } } }
- Create the Terracotta configuration file
$RESIN/tc-config.xml
<?xml version="1.0" encoding="UTF-8"?> <tc:tc-config xmlns:tc="http://www.terracotta.org/config"> <application> <dso> <roots> <root> <field-name>example.HelloWorldServlet._accessTimes</field-name> </root> </roots> <locks> <autolock> <method-expression>* example.HelloWorldServlet*.*(..)</method-expression> <lock-level>write</lock-level> </autolock> </locks> <instrumented-classes> <include><class-expression>example..*</class-expression></include> </instrumented-classes> <additional-boot-jar-classes> <include>java.util.TimeZone</include> <include>sun.util.calendar.ZoneInfo</include> </additional-boot-jar-classes> </dso> </application> </tc:tc-config>
- Create the Terracotta boot jar:
$TERRACOTTA/bin/make-boot-jar.sh -f $RESIN/tc-config.xml
Note the path of the boot jar created by this command. You will use it in the next step.
- Edit resin.conf, making the following changes:
-
<jvm-arg>-Dcom.sun.management.jmxremote</jvm-arg> <jvm-arg>-Xbootclasspath/p:<path-to-boot-jar></jvm-arg> <jvm-arg>-Dtc.install-root=<path-to-terracotta></jvm-arg> <jvm-arg>-Dtc.config=localhost:9510</jvm-arg>
Make sure to replace the <path-to-boot-jar> and <path-to-terracotta>.
-
Remove the line
<http address="*" port="8080"/>
from <server-default> section. -
Remove the default server line
<server id="" address="127.0.0.1" port="6800"/>
-
Add two servers:
<server id="a" address="127.0.0.1" port="6800"> <http address="*" port="8080"/> </server> <server id="b" address="127.0.0.1" port="6801"> <http address="*" port="8081"/> </server>
-
- Start the Terracotta server:
$TERRACOTTA/bin/start-tc-server.sh -f $RESIN/tc-config.xml
- Start both Resin servers:
cd $RESIN java -jar lib/resin.jar -server a start java -jar lib/resin.jar -server b start