Since you are using Embedded, your class needs to be loaded by the same ClassLoader that loads Tomcat.
You might want to look at the examples for loading Tomcat from ant in commons-modeler, as an alternative way of doing what you want. "Alonso Dominguez" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] 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]
