Terracotta

From Resin 3.0

(Difference between revisions)
Jump to: navigation, search
(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, adding the following .  Add these lines to both versions of 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-terracotta>/lib/dso-boot/<dso-boot-jar></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.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 &lt;path-to-boot-jar&gt; and &lt;path-to-terracotta&gt;.
 +
</li>
 +
<li>
 +
Remove the line <pre><http address="*" port="8080"/></pre> from &lt;server-default&gt; 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>
<li>Invoke two Resin instances, using the two different resin.confs</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)

  1. Download Resin from http://www.caucho.com/download
  2. Unzip Resin. From now on, we'll refer to the location of the Resin root directory as $RESIN
  3. Download Terracotta from http://www.terracotta.org
  4. Unzip Terracotta. From now on, we'll refer to the location of the Terracotta root directory as $TERRACOTTA
  5. Create the example webapp directory structure:
    mkdir -p $RESIN/webapps/terracotta/WEB-INF/classes/example/
  6. 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>
    
  7. 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>");
        }
      }
    }
  8. 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>
    
  9. 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.

  10. Edit resin.conf, making the following changes:
    1. <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>.

    2. Remove the line
      <http address="*" port="8080"/>
      from <server-default> section.
    3. Remove the default server line
      <server id="" address="127.0.0.1" port="6800"/>
    4. 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>
      
  11. Start the Terracotta server:
    $TERRACOTTA/bin/start-tc-server.sh -f $RESIN/tc-config.xml
  12. Start both Resin servers:
    cd $RESIN
    java -jar lib/resin.jar -server a start
    java -jar lib/resin.jar -server b start
    
Personal tools