Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to embed Tomcat 6?

I'm currently running my webapps on Tomcat 6 in production, and would like to evaluate running Tomcat in embedded mode.

Is there a good tutorial or other resource besides what's in the api documentation?

like image 403
otto.poellath Avatar asked Mar 12 '09 19:03

otto.poellath


1 Answers

Code speaks for itself. See the pom.xml snippet and the class to run tomcat.

    <dependency>         <groupId>org.apache.tomcat</groupId>         <artifactId>catalina</artifactId>         <version>6.0.18</version>         <scope>test</scope>     </dependency>     <dependency>         <groupId>org.apache.tomcat</groupId>         <artifactId>coyote</artifactId>         <version>6.0.18</version>         <scope>test</scope>     </dependency>     <dependency>         <groupId>org.apache.tomcat</groupId>         <artifactId>jasper</artifactId>         <version>6.0.18</version>         <scope>test</scope>     </dependency>   public class RunWebApplicationTomcat {      private String path = null;     private Embedded container = null;     private Log logger = LogFactory.getLog(getClass());      /**      * The directory to create the Tomcat server configuration under.      */     private String catalinaHome = "tomcat";      /**      * The port to run the Tomcat server on.      */     private int port = 8089;      /**      * The classes directory for the web application being run.      */     private String classesDir = "target/classes";      /**      * The web resources directory for the web application being run.      */     private String webappDir = "mywebapp";      /**      * Creates a single-webapp configuration to be run in Tomcat on port 8089. If module name does      * not conform to the 'contextname-webapp' convention, use the two-args constructor.      *       * @param contextName without leading slash, for example, "mywebapp"      * @throws IOException      */     public RunWebApplicationTomcat(String contextName) {         Assert.isTrue(!contextName.startsWith("/"));         path = "/" + contextName;     }      /**      * Starts the embedded Tomcat server.      *       * @throws LifecycleException      * @throws MalformedURLException if the server could not be configured      * @throws LifecycleException if the server could not be started      * @throws MalformedURLException      */     public void run(int port) throws LifecycleException, MalformedURLException {         this.port = port;         // create server         container = new Embedded();         container.setCatalinaHome(catalinaHome);         container.setRealm(new MemoryRealm());          // create webapp loader         WebappLoader loader = new WebappLoader(this.getClass().getClassLoader());          if (classesDir != null) {             loader.addRepository(new File(classesDir).toURI().toURL().toString());         }          // create context         // TODO: Context rootContext = container.createContext(path, webappDir);         Context rootContext = container.createContext(path, webappDir);         rootContext.setLoader(loader);         rootContext.setReloadable(true);          // create host         // String appBase = new File(catalinaHome, "webapps").getAbsolutePath();         Host localHost = container.createHost("localHost", new File("target").getAbsolutePath());         localHost.addChild(rootContext);          // create engine         Engine engine = container.createEngine();         engine.setName("localEngine");         engine.addChild(localHost);         engine.setDefaultHost(localHost.getName());         container.addEngine(engine);          // create http connector         Connector httpConnector = container.createConnector((InetAddress) null, port, false);         container.addConnector(httpConnector);          container.setAwait(true);          // start server         container.start();          // add shutdown hook to stop server         Runtime.getRuntime().addShutdownHook(new Thread() {             public void run() {                 stopContainer();             }         });     }     /**      * Stops the embedded Tomcat server.      */     public void stopContainer() {         try {             if (container != null) {                 container.stop();             }         } catch (LifecycleException exception) {             logger.warn("Cannot Stop Tomcat" + exception.getMessage());         }     }      public String getPath() {         return path;     }      public void setPath(String path) {         this.path = path;     }      public static void main(String[] args) throws Exception {         RunWebApplicationTomcat inst = new RunWebApplicationTomcat("mywebapp");         inst.run(8089);     }      public int getPort() {         return port;     }  } 
like image 169
Antonio Avatar answered Sep 16 '22 13:09

Antonio