6 Dec 2009, 4:01pm
Projects:
by

5 comments

  • Sitebricks And SiteMesh On Google App Engine

    For the past couple of weeks, I’ve been trying various web framework stacks to be used with Google App Engine. The ones that I gave a go, and gave a pass for various reasons, were Stapler (the enchilada that powers Hudson), Spring, and RestEasy + htmleasy.

    The search continued and I came across Sitebricks, still in its alpha phase but it looks really promising. Simple and straightforward, nothing too magicky, and I got it working with GAE/J in no time.

    To guide others who might want to give Sitebricks on Google App Engine a try, here’s what I did: (and please note that this is a miminalist guide, enough to get a simple page up and running)

    1. Using Google Plugin for Eclipse, create a new Google Web Application Project with Google App Engine enabled and Google Web Toolkit disabled.
    2. Since Sitebricks didn’t have any official release yet, I had to build the jar from the sitebricks-0.7 tag using
      mvn install -Dmaven.test.skip=true
      . Unfortunately some of the unit tests on the trunk failed so I just skipped them, hey it’s still in alpha.
    3. The above command downloaded all the dependency jars and generated a Sitebricks SNAPSHOT jar at <M2_REPO>/com/google/sitebricks . Copy the following jars to the Eclipse project’s /war/WEB-INF/lib directory and add them to the build path.
      • sitebricks-0.7.jar
      • guice-2.0.jar
      • guice-servlet-2.0.jar
      • google-collections-1.0-rc3.jar
      • aopalliance-1.0.jar
      • mvel2-2.0.14.jar
      • dom4j-1.6.1.jar
      • commons-io-1.4.jar
    4. Create the following files in src/your/package/name.
      GuiceInit.java

      public class GuiceInit extends GuiceServletContextListener {
      
          @Override
          public Injector getInjector() {
              return Guice.createInjector(new SitebricksModule() {
                  @Override
                  protected void configureSitebricks() {
                      scan(FooBar.class.getPackage());
                  }
              });
          }
      }
      

      FooBar.java

      @At("/barkleyzone")
      public class FooBar {
      
          public String getQuote() {
              return "I have nothing against old people; I want to be one myself one day";
          }
      
          public String getName() {
              return "Charles Barkley";
          }
      }
      
    5. Create FooBar.html in /war.

      <div>
          ${name} said "${quote}".
      </div>
      
    6. Add GuiceInit servlet context listener and GuiceFilter to /war/WEB-INF/web.xml.

      <filter>
          <filter-name>webFilter</filter-name>
          <filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
      </filter>
      <filter-mapping>
          <filter-name>webFilter</filter-name>
          <url-pattern>/*</url-pattern>
      </filter-mapping>
      <listener>
          <listener-class>your.package.name.GuiceInit</listener-class>
      </listener>
      
    7. Enable sessions by adding this line in /war/WEB-INF/appengine-web.xml .
      <sessions-enabled>true</sessions-enabled>
      
    8. Use Eclipse Run -> Run As -> Web Application to start the application and visit http://localhost:8080/barkleyzone and you should see this message:
      Charles Barkley said "I have nothing against old people; I want to be one myself one day."
      

    As for a page layout / templating solution, SiteMesh has always been a personal favourite.

    1. Download sitemesh-2.4.2.jar, place it in /war/WEB-INF/lib directory and add it to the build path.
    2. Create /war/templates/main.jsp .

      <%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
      <html>
      <head>
      <title>Test</title>
      </head>
      <body>
          <decorator:body/>
      </body>
      </html>
      
    3. Create /war/WEB-INF/decorators.xml .

      <decorators defaultdir="/templates/">
          <decorator name="main" page="main.jsp">
              <pattern>/*</pattern>
          </decorator>
      </decorators>
      
    4. Add SiteMeshFilter to /war/WEB-INF/web.xml .

      <filter>
          <filter-name>sitemesh</filter-name>
          <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
      </filter>
      <filter-mapping>
          <filter-name>sitemesh</filter-name>
          <url-pattern>/*</url-pattern>
      </filter-mapping>
      
    5. Use Eclipse to stop and start the application, view the HTML source of http://localhost:8080/barkleyzone and you should see the HTML layout wrapping the original div element.

    Related Posts:

    Hi, thanks for posting this! Very cool indeed.

    as of r117 you don’t need to skip the tests–both unit and acceptance tests are green now for sitebricks.

    9 Dec 2009, 2:11pm
    by Cliffano Subagio

    reply

    Thanks for letting me know dhanji. I’ll give the trunk a try.

    Have you had a look at Gaelyk?
    http://gaelyk.appspot.com
    Pretty easy to get started with Gaelyk for writing applications on Google App Engine.

    9 Dec 2009, 2:12pm
    by Cliffano Subagio

    reply

    No, in fact this is the first time I heard about Gaelyk. Thanks for the info, Guillaume! I’ll give it a shot.

    22 Dec 2009, 10:01pm
    by Cliffano Subagio

    reply
     

    Leave a Reply

    Your email address will not be published. Required fields are marked *

    *

    You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

     

    Recent Posts

    Recent Comments

    • Cliffano Subagio: Good to hear about your opportunity to visit Japan, I’m sure you will have a great...
    • Kayla: I’m going to Japan for two week this summer. Our sister city is Tsubame, Japan and my school has an...
    • poseidonfu: thanks,Very effective
    • anonymous: I really enjoyed both the last lecture and the book. I don’t think that theres anyone that I look up...
    • dioni: The thing I hate about HK is how people shove and push in the queue. Can’t they be civilized?!! I kept...

    Most Commented Posts

    Linkroll