Sunday, May 18, 2008

in the belly of the beast

I write this from my Google tent, pitched in the Google courtyard, connected to the intarnets using Google's network; and of course using Google software. I'm here for wherecamp catching up on all things related to geo and the web. Observations of the campus: +1 for the heated toilet seats +1 for the yummy soy yogurt +1 for the schweet tent swag with the Google logo and the slogan "I'm feeling lucky." odd moment - watching Google employees pile out of cars on a Saturday night to do their laundry at the Google campus Observations on wherecamp: People are posting and editing the wiki here and here.

Saturday, May 10, 2008

Embedded tomcat and launch4j FTW

I've been meaning to get around to this for years. Using this example, I compiled it with my webapps and then used lauch4j to create a windows executable wrapper. Throw in a jre and some data and I'm good to go. Now I just give the live demos to the sales people and clients on a USB stick without having to go through the install or setting it up on a web server. Here's the code example:
import org.apache.catalina.*;
import org.apache.catalina.connector.*;
import org.apache.catalina.realm.*;
import org.apache.catalina.startup.*;


public class EmbeddedTomcat
{
  // Instance variables:
  private String    name;
  private int       portNumber;
  private Embedded  embedded;
  private Engine    baseEngine;
  private Host      baseHost;
  private Connector httpConnector;
 
  /** Creates a new instance of EmbeddedTomcat */
  public EmbeddedTomcat(
    String name,
    int    portNumber)
  {
    this.name = name;
    this.portNumber = portNumber;
 
    init();
  }
 
  private void init()
  {
    MemoryRealm realm;
    Context     context;
    String      baseEngineName;
    String      hostName;
 
    embedded = new Embedded();
 
    // set default logger and realm
    /*
       FileLogger fileLog = new FileLogger();
       fileLog.setDirectory(".");
       fileLog.setPrefix(name);
       fileLog.setSuffix(".log");
       fileLog.setTimestamp(true);
       embedded.setLogger(fileLog);
     */
    realm = new MemoryRealm();
    embedded.setRealm(realm);
 
    // create an Engine
    baseEngine = embedded.createEngine();
 
    // set Engine properties
    baseEngineName = name + "Engine";
    hostName = name + "Host";
 
    baseEngine.setName(baseEngineName);
    baseEngine.setDefaultHost(hostName);
 
    baseHost = embedded.createHost(hostName, "webapps");
    baseEngine.addChild(baseHost);
 
    // RootContext
    context = addContext("", "ROOT");
 
    // ManagerContext
    context = addContext("/manager", "manager");
    context.setPrivileged(true);
    

   /* This is where you add your webapps*/

    //  GeoBrowserContext
    context = addContext("/geobrowser", "geobrowser");
    context.setPrivileged(true);
    
    // add new Engine to set of Engine for embedded server
    embedded.addEngine(baseEngine);
 
    // create Connector 
    httpConnector = embedded.createConnector((java.net.InetAddress) null,
        portNumber, false);
 
    // add new Connector to set of Connectors for embedded server, associated
    // with Engine
    embedded.addConnector(httpConnector);
  }
  
  
 
  public void start()
  {
    // start server
    try
    {
      embedded.start();
    }
    catch (org.apache.catalina.LifecycleException ex)
    {
      ex.printStackTrace();
 
      //fileLog.log("Startup failed");
      //fileLog.log(ex.getMessage());
    }
  }
  
  public void stop()
  {
    // start server
    try
    {
      embedded.stop();
    }
    catch (org.apache.catalina.LifecycleException ex)
    {
      ex.printStackTrace();
 
      //fileLog.log("Startup failed");
      //fileLog.log(ex.getMessage());
    }
  }
 
  public Context addContext(
    String path,
    String docBase)
  {
    Context c;
 
    c = embedded.createContext(path, docBase);
    baseHost.addChild(c);
 
    return c;
  }
 
  public static void main(String[] args)
  {
    new EmbeddedTomcat("RedSpider", 8080).start();
  }
}