Hi there!

I'm working to embed a Tomcat server as a servlet container inside an
Avalon Framework with a Loom engine. I looked for information how to
launch the Catalina service from Java and finally I wrote the next
file:

package org.jlabase.framework.tomcat.startup;

import java.io.File;
import java.net.InetAddress;
import org.apache.catalina.*;
import org.apache.catalina.connector.*;
import org.apache.catalina.realm.*;
import org.apache.catalina.startup.*;
import org.apache.tomcat.util.*;
import org.jlabase.framework.tomcat.*;

/**
 * @author <a href="mailto:[EMAIL PROTECTED]">A. Alonso Dominguez</a>
 * @version 1.0
 */
public class TomcatImpl implements Tomcat {
        private String path = null;
        private Embedded catalina = null;
        private Host host = null;
        private Context rootContext;
        private int port = 8080;
        
        public String getPath() {
                return path;
        }
        public void setPath(String value) {
                path = value;
        }
        
        public int getPort() {
                return port;
        }
        public void setPort(int value) {
                port = value;
        }
        
        public void start() throws Exception {
                Engine engine = null;
                
                // Create an embedded server
                catalina = new Embedded();
                catalina.setCatalinaHome(getPath());
                // Set the MemoryRealm
                MemoryRealm mr = new MemoryRealm();
                catalina.setRealm(mr);
                // Create an engine
                engine = catalina.createEngine();
                engine.setDefaultHost("localhost");
                
                // Create a default virtual host
                host = catalina.createHost("localhost", getPath() + "/webapps");
                engine.addChild(host);
                
                // Create the ROOT context
                rootContext = catalina.createContext("", getPath() + 
"/webapps/ROOT");
                rootContext.setReloadable(false);
                rootContext.addWelcomeFile("index.jsp");
                host.addChild(rootContext);
                
                // Create the Manager context
                Context managerCtx = catalina.createContext("/manager", 
getPath() +
"/webapps/manager");
                managerCtx.setPrivileged(true);
                host.addChild(managerCtx);
                
                // Assemble the container hierarchy
                catalina.addEngine(engine);
                
                // TODO Repair the Connector bug
                String addr = null;
                Connector connector = null;
                InetAddress address = null;
                try {
                        connector = new Connector();
                        connector.setSecure(false);
                        address = InetAddress.getLocalHost();
                        if(address != null) {
                                IntrospectionUtils.setProperty(connector, 
"address", address.toString());
                        }
                        IntrospectionUtils.setProperty(connector, "port", new
Integer(getPort()).toString());
                }
                catch(Exception e) {
                        e.printStackTrace();
                }
                connector.setEnableLookups(false);
                catalina.addConnector(connector);
                catalina.start();   // Starts the embedded server
        }
        
        public void stop() throws Exception {
                catalina.stop();
        }
        
        public static void main(String args[]) {
                System.out.println("Creating server instance...");
                TomcatImpl tomcat = new TomcatImpl();
                tomcat.setPath(
                        new File(System.getProperty("jlbframework.tomcat.home", 
                                System.getProperty("basedir", 
"."))).getAbsolutePath()
                );
                
                try {
                        System.out.println("Using CATALINA_HOME = " + 
tomcat.getPath());
                        System.out.println("Starting server on port " + 
tomcat.getPort());
                        tomcat.start();
                        //tomcat.catalina.setAwait(true);
                }
                catch(Exception e) {
                        e.printStackTrace();
                }
        }
        
}

My intention is to configure the Catalina service from this class and
use a simple Ant-like script in Maven to launch the main method of
this class. So, my next step was write the maven.xml file, this is:

<project xmlns:ant="jelly:ant" xmlns:j="jelly:core"
xmlns:u="jelly:util" default="loom:sar">
  
  <goal name="jlbframework:tomcat-init">
    <ant:path id="tomcat.classpath">
      <j:forEach var="artifact" items="${pom.artifacts}">
        <j:set var="dependency" value="${artifact.dependency}" />
        <j:if test="${dependency.getProperty('sar.bundle')=='true'}">
          <ant:fileset
dir="${maven.repo.local}/${dependency.artifactDirectory}/jars"
prefix="lib">
            <ant:echo>Adding artifact: ${dependency.artifact} to the
Tomcat classpath.</ant:echo>
            <ant:include name="${dependency.artifact}" />
          </ant:fileset>
        </j:if>
      </j:forEach>
      <ant:pathelement path="${jlbframework.tomcat.home}/conf" />
    </ant:path>  
  </goal>
  
  <goal name="jlbframework:tomcat-start"
prereqs="jar:jar,jlbframework:tomcat-init">
    <ant:echo>Starting Tomcat in stand-alone mode...</ant:echo>
    <ant:java jar="${maven.build.dir}/${maven.final.name}.jar"
fork="true" maxmemory="15M" failonerror="true"
      classpathref="tomcat.classpath">
      <ant:sysproperty key="basedir" value="${basedir}" />
      <ant:sysproperty key="jlbframework.home" value="${jlbframework.home}" />
      <ant:sysproperty key="jlbframework.tomcat.home"
value="${jlbframework.tomcat.home}" />
    </ant:java>
  </goal>
  
</project>

And this are the contents of the project.properties file:

jlbframework.home=${basedir}/../..
jlbframework.tomcat.home=${basedir}

maven.xdoc.date=left
maven.xdoc.version=${pom.currentVersion}

maven.eclipse.resources.addtoclasspath=true

maven.jar.mainclass=org.jlabase.framework.tomcat.startup.TomcatImpl

Well, after all I tried to launch tomcat using the goal
'jlbframework:tomcat-start' and this what I get:

...
jar:jar:

jlbframework:tomcat-init:
    [echo] Adding artifact: commons-el-1.0.jar to the Tomcat classpath.
    [echo] Adding artifact: commons-logging-1.0.4.jar to the Tomcat classpath.
    [echo] Adding artifact: commons-modeler-1.1M1.jar to the Tomcat classpath.
    [echo] Adding artifact: catalina-5.5.9.jar to the Tomcat classpath.
    [echo] Adding artifact: tomcat-util-5.5.9.jar to the Tomcat classpath.
    [echo] Adding artifact: servlet-api-5.0.18.jar to the Tomcat classpath.
    [echo] Adding artifact: servlets-default-5.5.9.jar to the Tomcat classpath.
    [echo] Adding artifact: jsp-api-5.0.18.jar to the Tomcat classpath.
    [echo] Adding artifact: catalina-optional-5.5.9.jar to the Tomcat classpath.
    [echo] Adding artifact: jasper-compiler-5.5.9.jar to the Tomcat classpath.
    [echo] Adding artifact: jasper-compiler-jdt-5.5.9.jar to the
Tomcat classpath.
    [echo] Adding artifact: jasper-runtime-5.5.9.jar to the Tomcat classpath.
    [echo] Adding artifact: naming-factory-5.0.18.jar to the Tomcat classpath.
    [echo] Adding artifact: naming-resources-5.5.9.jar to the Tomcat classpath.
    [echo] Adding artifact: tomcat-coyote-5.5.9.jar to the Tomcat classpath.
    [echo] Adding artifact: tomcat-http-5.5.9.jar to the Tomcat classpath.

jlbframework:tomcat-start:
    [echo] Starting Tomcat in stand-alone mode...
    [java] Exception in thread "main" java.lang.NoClassDefFoundError:
org/apache/catalina/Realm

BUILD FAILED
File...... 
/home/alonso/projects/jlabase/jlabase-framework/modules/jlbframework-tomcat-module/maven.xml
Element... ant:java
Line...... 22
Column.... 39
Java returned: 1
Total time: 25 seconds
Finished at: Wed Apr 20 14:50:28 CEST 2005

So, finally Java doesn't founds the Tomcat API. Can anyone help me with this?

Regards,
Alonso

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to