costin 00/12/28 16:20:29 Modified: . build.xml src/share/org/apache/tomcat/context AutoSetup.java src/share/org/apache/tomcat/modules/config WebAppsConfig.java src/share/org/apache/tomcat/startup Main.java Tomcat.java src/share/org/apache/tomcat/util FileUtil.java Added: src/share/org/apache/tomcat/startup StopTomcat.java src/tests build.xml Removed: src/share/org/apache/tomcat/task Expand.java GTest.java StartTomcat.java StopTomcat.java Log: - expand was used in 2 places - moved the shared code to FileUtil - removed unused code - moved code specific to the sanity-test application to tests. Same for build.xml. - moved StopTomcat in startup pagkage. It should be replaced with a more secure system ( independent of ajp12 ) before a release. Revision Changes Path 1.100 +7 -22 jakarta-tomcat/build.xml Index: build.xml =================================================================== RCS file: /home/cvs/jakarta-tomcat/build.xml,v retrieving revision 1.99 retrieving revision 1.100 diff -u -r1.99 -r1.100 --- build.xml 2000/12/28 23:19:44 1.99 +++ build.xml 2000/12/29 00:20:20 1.100 @@ -25,7 +25,6 @@ <!-- External packages we depend on --> <property name="ant.home" value="../jakarta-ant"/> - <property name="j2ee.home" value="../j2ee/build/unix"/> <property name="jaxp" value="../jaxp-1.0.1"/> <property name="servlet22.jar" value="bin/servlet22.jar"/> @@ -74,6 +73,10 @@ <fileset dir="${ant.home}/bin"/> </copy> <copy tofile="${tomcat.build}/lib/ant.jar" file="${ant.home}/lib/ant.jar"/> + <copy tofile="${tomcat.build}/lib/jaxp.jar" + file="${ant.home}/lib/jaxp.jar"/> + <copy tofile="${tomcat.build}/lib/parser.jar" + file="${ant.home}/lib/parser.jar"/> <copy tofile="${tomcat.build}/lib/jaxp.jar" file="${jaxp}/jaxp.jar"/> <copy tofile="${tomcat.build}/lib/parser.jar" file="${jaxp}/parser.jar"/> @@ -284,28 +287,10 @@ </target> - <!-- ==================== Build the internal test app ==================== --> - <target name="sanity-test"> - <mkdir dir="${tomcat.dist}/lib/test"/> - <mkdir dir="${tomcat.dist}/lib/test/Golden"/> - <copy todir="${tomcat.dist}/lib/test/Golden"> - <fileset dir="src/tests/share/tests/jsp/Golden"/> - </copy> - - <!-- Test application --> - <mkdir dir="${tomcat.build}/webapps/test"/> - <copy todir="${tomcat.build}/webapps/test"> - <fileset dir="src/tests/webpages"/> - </copy> - <javac srcdir="src/tests/webpages/WEB-INF/classes" optimize="${optimize}" destdir="${tomcat.build}/webapps/test/WEB-INF/classes" classpath="${tomcat.build}/classes;${servlet22.jar}"/> - <copy todir="${tomcat.dist}/webapps/test"> - <fileset dir="${tomcat.build}/webapps/test"/> - </copy> - - <jar jarfile="${tomcat.dist}/webapps/test.war" basedir="${tomcat.dist}/webapps/test" includes="**"/> - <delete dir="${tomcat.dist}/webapps/test"/> + <!-- ==================== Build the internal test app =================== --> - + <target name="sanity-test"> + <ant antfile="src/tests/build.xml" target="sanity-test"/> </target> <!-- ==================== Copy the files to distribution format ======== --> 1.22 +1 -42 jakarta-tomcat/src/share/org/apache/tomcat/context/AutoSetup.java Index: AutoSetup.java =================================================================== RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/context/AutoSetup.java,v retrieving revision 1.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- AutoSetup.java 2000/12/28 23:19:47 1.21 +++ AutoSetup.java 2000/12/29 00:20:20 1.22 @@ -66,8 +66,6 @@ import java.net.*; import java.util.*; -import org.apache.tomcat.task.Expand; - /** * Prepare a context manager - expand wars in webapps and * automaticly install contexts @@ -122,7 +120,7 @@ appDir.mkdirs(); // Expand war file try { - expand(home + "/webapps/" + name, + FileUtil.expand(home + "/webapps/" + name, home + "/webapps/" + fname); } catch( IOException ex) { log("expanding webapp " + name, ex); @@ -171,43 +169,4 @@ } } } - - private void expand( String src, String dest) - throws IOException - { - File srcF=new File( source); - File dir=new File( dest ); - - ZipInputStream zis = new ZipInputStream(new FileInputStream(srcF)); - ZipEntry ze = null; - - while ((ze = zis.getNextEntry()) != null) { - try { - File f = new File(dir, ze.getName()); - // create intermediary directories - sometimes zip don't add them - File dirF=new File(f.getParent()); - dirF.mkdirs(); - - if (ze.isDirectory()) { - f.mkdirs(); - } else { - byte[] buffer = new byte[1024]; - int length = 0; - FileOutputStream fos = new FileOutputStream(f); - - while ((length = zis.read(buffer)) >= 0) { - fos.write(buffer, 0, length); - } - - fos.close(); - } - } catch( FileNotFoundException ex ) { - //loghelper.log("FileNotFoundException: " + - // ze.getName(), Logger.ERROR ); - throw ex; - } - } - - } - } 1.2 +2 -5 jakarta-tomcat/src/share/org/apache/tomcat/modules/config/WebAppsConfig.java Index: WebAppsConfig.java =================================================================== RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/modules/config/WebAppsConfig.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- WebAppsConfig.java 2000/12/04 21:18:44 1.1 +++ WebAppsConfig.java 2000/12/29 00:20:21 1.2 @@ -67,7 +67,6 @@ import org.apache.tomcat.util.xml.*; import org.apache.tomcat.helper.*; -import org.apache.tomcat.task.Expand; /** * @@ -280,11 +279,9 @@ // To update you need to "remove" the context first!!! appDir.mkdirs(); // Expand war file - Expand expand=new Expand(); - expand.setSrc( dir.getAbsolutePath() + name ); - expand.setDest( dir.getAbsolutePath() + fname); try { - expand.execute(); + FileUtil.expand(dir.getAbsolutePath() + name, + dir.getAbsolutePath() + fname ); } catch( IOException ex) { log("expanding webapp " + name, ex); // do what ? 1.17 +2 -2 jakarta-tomcat/src/share/org/apache/tomcat/startup/Main.java Index: Main.java =================================================================== RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/startup/Main.java,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- Main.java 2000/12/28 23:19:50 1.16 +++ Main.java 2000/12/29 00:20:21 1.17 @@ -202,8 +202,8 @@ Object proxy=cls.newInstance(); processArgs( proxy, args ); - IntrospectionUtils.setAttribute( proxy, - "parentClassLoader", parentL ); + // IntrospectionUtils.setAttribute( proxy, + // "parentClassLoader", parentL ); // setAttribute( proxy, "serverClassPath", urls ); IntrospectionUtils.execute( proxy, "execute" ); return; 1.47 +2 -2 jakarta-tomcat/src/share/org/apache/tomcat/startup/Tomcat.java Index: Tomcat.java =================================================================== RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/startup/Tomcat.java,v retrieving revision 1.46 retrieving revision 1.47 diff -u -r1.46 -r1.47 --- Tomcat.java 2000/12/28 23:19:51 1.46 +++ Tomcat.java 2000/12/29 00:20:23 1.47 @@ -51,8 +51,8 @@ public void stop() throws Exception { System.out.println(sm.getString("tomcat.stop")); try { - org.apache.tomcat.task.StopTomcat task= - new org.apache.tomcat.task.StopTomcat(); + StopTomcat task= + new StopTomcat(); task.setConfig( configFile ); task.execute(); 1.1 jakarta-tomcat/src/share/org/apache/tomcat/startup/StopTomcat.java Index: StopTomcat.java =================================================================== /* * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * [Additional notices, if required by prior licensing conditions] * */ package org.apache.tomcat.startup; import org.apache.tomcat.core.*; import org.apache.tomcat.util.*; import org.apache.tomcat.helper.*; import org.apache.tomcat.util.xml.*; import org.apache.tomcat.util.log.*; import java.io.*; import java.net.*; import java.util.*; // Used to stop tomcat //import org.apache.tomcat.service.PoolTcpConnector; //import org.apache.tomcat.service.connector.Ajp12ConnectionHandler; import org.apache.tomcat.modules.server.Ajp12Interceptor; /** * This task will stop tomcat * * @author Costin Manolache */ public class StopTomcat { static final String DEFAULT_CONFIG="conf/server.xml"; private static StringManager sm = StringManager.getManager("org.apache.tomcat.resources"); String configFile; String tomcatHome; Log loghelper = new Log("tc_log", "StopTomcat"); public StopTomcat() { } // -------------------- Parameters -------------------- public void setConfig( String s ) { configFile=s; } /** -f option */ public void setF( String s ) { configFile=s; } public void setH( String s ) { tomcatHome=s; System.getProperties().put("tomcat.home", s); } public void setHome( String s ) { tomcatHome=s; System.getProperties().put("tomcat.home", s); } // -------------------- Ant execute -------------------- public void execute() throws Exception { System.out.println(sm.getString("tomcat.stop")); try { stopTomcat(); // stop serving } catch (TomcatException te) { if (te.getRootCause() instanceof java.net.ConnectException) System.out.println(sm.getString("tomcat.connectexception")); else throw te; } return; } // -------------------- Implementation -------------------- /** Stop tomcat using the configured cm * The manager is set up using the same configuration file, so * it will have the same port as the original instance ( no need * for a "log" file). * It uses the Ajp12 connector, which has a built-in "stop" method, * that will change when we add real callbacks ( it's equivalent * with the previous RMI method from almost all points of view ) */ void stopTomcat() throws TomcatException { XmlMapper xh=new XmlMapper(); xh.setDebug( 0 ); ContextManager cm=new ContextManager(); ServerXmlHelper sxml=new ServerXmlHelper(); sxml.setConnectorHelper( xh ); String tchome=sxml.getTomcatInstall(); // load server.xml File f = null; if (configFile != null) f=new File(configFile); else f=new File(tchome, DEFAULT_CONFIG); cm.setInstallDir( tchome); try { xh.readXml(f,cm); } catch( Exception ex ) { throw new TomcatException("Fatal exception reading " + f, ex); } execute( cm ); } /** This particular implementation will search for an AJP12 connector ( that have a special stop command ). */ public void execute(ContextManager cm) throws TomcatException { // Find Ajp12 connector int portInt=8007; InetAddress address=null; BaseInterceptor ci[]=cm.getContainer().getInterceptors(); for( int i=0; i<ci.length; i++ ) { Object con=ci[i]; if( con instanceof Ajp12Interceptor ) { Ajp12Interceptor tcpCon=(Ajp12Interceptor) con; portInt=tcpCon.getPort(); address=tcpCon.getAddress(); } } // use Ajp12 to stop the server... try { if (address == null) address = InetAddress.getLocalHost(); Socket socket = new Socket(address, portInt); OutputStream os=socket.getOutputStream(); byte stopMessage[]=new byte[2]; stopMessage[0]=(byte)254; stopMessage[1]=(byte)15; os.write( stopMessage ); socket.close(); } catch(Exception ex ) { throw new TomcatException("Error stopping Tomcat with Ajp12 on " + address + ":" + portInt, ex); } } } 1.17 +42 -5 jakarta-tomcat/src/share/org/apache/tomcat/util/FileUtil.java Index: FileUtil.java =================================================================== RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/FileUtil.java,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- FileUtil.java 2000/12/08 23:18:53 1.16 +++ FileUtil.java 2000/12/29 00:20:27 1.17 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/FileUtil.java,v 1.16 2000/12/08 23:18:53 costin Exp $ - * $Revision: 1.16 $ - * $Date: 2000/12/08 23:18:53 $ + * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/FileUtil.java,v 1.17 2000/12/29 00:20:27 costin Exp $ + * $Revision: 1.17 $ + * $Date: 2000/12/29 00:20:27 $ * * ==================================================================== * @@ -64,8 +64,8 @@ package org.apache.tomcat.util; -import java.io.File; -import java.io.IOException; +import java.io.*; +import java.util.zip.*; import org.apache.tomcat.util.log.*; @@ -346,6 +346,43 @@ return null; } + public static void expand( String src, String dest) + throws IOException + { + File srcF=new File( src); + File dir=new File( dest ); + + ZipInputStream zis = new ZipInputStream(new FileInputStream(srcF)); + ZipEntry ze = null; + + while ((ze = zis.getNextEntry()) != null) { + try { + File f = new File(dir, ze.getName()); + // create intermediary directories - sometimes zip don't add them + File dirF=new File(f.getParent()); + dirF.mkdirs(); + + if (ze.isDirectory()) { + f.mkdirs(); + } else { + byte[] buffer = new byte[1024]; + int length = 0; + FileOutputStream fos = new FileOutputStream(f); + + while ((length = zis.read(buffer)) >= 0) { + fos.write(buffer, 0, length); + } + + fos.close(); + } + } catch( FileNotFoundException ex ) { + //loghelper.log("FileNotFoundException: " + + // ze.getName(), Logger.ERROR ); + throw ex; + } + } + + } } 1.1 jakarta-tomcat/src/tests/build.xml Index: build.xml =================================================================== <?xml version="1.0"?> <!-- Emacs indentation & editting support <antstructure output="ant.dtd"/> <!DOCTYPE ant SYSTEM "ant.dtd" > --> <project name="Tomcat-test" default="main" basedir="."> <!-- Compilation properties --> <property name="build.compiler" value="classic"/> <property name="optimize" value="false" /> <property name="debug" value="off" /> <!-- Directories --> <property name="tomcat.home" value="../../../build/tomcat"/> <!-- External packages we depend on --> <property name="ant.home" value="../jakarta-ant" /> <property name="jaxp" value="../jaxp1.0.1" /> <!-- set it if not specified as -D or in parent antfile --> <property name="servlet.jar" value="${tomcat.home}/lib/servlet.jar" /> <!-- ==================== Initialization - guessing config ========== --> <target name="init"> </target> <!-- ==================== Copy static files ==================== --> <target name="prepare" depends="init"> </target> <!-- ==================== Build the internal test app ================== --> <target name="sanity-test" > <mkdir dir="${tomcat.dist}/lib/test"/> <mkdir dir="${tomcat.dist}/lib/test/Golden"/> <copy todir="${tomcat.dist}/lib/test/Golden"> <fileset dir="src/tests/share/tests/jsp/Golden"/> </copy> <!-- Test application --> <mkdir dir="${tomcat.build}/webapps/test"/> <copy todir="${tomcat.build}/webapps/test"> <fileset dir="src/tests/webpages"/> </copy> <javac srcdir="src/tests/webpages/WEB-INF/classes" optimize="${optimize}" destdir="${tomcat.build}/webapps/test/WEB-INF/classes" classpath="${tomcat.build}/classes;${servlet22.jar}" /> <javac srcdir="src/tests/share/gtest" optimize="${optimize}" destdir="${tomcat.build}/webapps/test/WEB-INF/classes" classpath="${tomcat.build}/classes" /> <copy todir="${tomcat.dist}/webapps/test"> <fileset dir="${tomcat.build}/webapps/test"/> </copy> <jar jarfile="${tomcat.dist}/webapps/test.war" basedir="${tomcat.dist}/webapps/test" includes="**"/> <delete dir="${tomcat.dist}/webapps/test"/> </target> <!-- ==================== Admin & agreagate ==================== --> <target name="clean-classes" depends="init"> <deltree dir="${tomcat.build}/classes/org"/> </target> <target name="clean" depends="init"> <deltree dir="${tomcat.build}"/> <deltree dir="${tomcat.home}"/> </target> <target name="all" depends=""/> <target name="main" depends=""/> </project>