Return-Path: Delivered-To: apmail-jakarta-tomcat-dev-archive@apache.org Received: (qmail 44354 invoked from network); 8 Feb 2002 12:56:10 -0000 Received: from unknown (HELO nagoya.betaversion.org) (192.18.49.131) by daedalus.apache.org with SMTP; 8 Feb 2002 12:56:10 -0000 Received: (qmail 28800 invoked by uid 97); 8 Feb 2002 12:55:57 -0000 Delivered-To: qmlist-jakarta-archive-tomcat-dev@jakarta.apache.org Received: (qmail 28738 invoked by uid 97); 8 Feb 2002 12:55:56 -0000 Mailing-List: contact tomcat-dev-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Tomcat Developers List" Reply-To: "Tomcat Developers List" Delivered-To: mailing list tomcat-dev@jakarta.apache.org Received: (qmail 28727 invoked by uid 97); 8 Feb 2002 12:55:56 -0000 Date: 8 Feb 2002 12:55:55 -0000 Message-ID: <20020208125555.8804.qmail@icarus.apache.org> From: larryi@apache.org To: jakarta-tomcat-cvs@apache.org Subject: cvs commit: jakarta-tomcat/src/share/org/apache/tomcat/startup StopTomcat.java X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N larryi 02/02/08 04:55:55 Modified: src/share/org/apache/tomcat/startup StopTomcat.java Log: Added an ajp12 option to go with the new ajp13 option and reworked the logic a bit. If either ajp12 or ajp13 is set (or the last one if both are set), that protocol will be used. If an ajpid file is not specified, the associated default will be used. If neither ajp12 or ajp13 is specified, and no ajpid file is specified, then ajp13 is tried first with failover to ajp12 if the ajp13 file is not found or shutdown isn't enabled. If an ajpid file is specified, it defaults to using ajp12. Updated the help output. Revision Changes Path 1.15 +116 -61 jakarta-tomcat/src/share/org/apache/tomcat/startup/StopTomcat.java Index: StopTomcat.java =================================================================== RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/startup/StopTomcat.java,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- StopTomcat.java 7 Feb 2002 05:09:36 -0000 1.14 +++ StopTomcat.java 8 Feb 2002 12:55:55 -0000 1.15 @@ -84,9 +84,11 @@ // explicit command line params ( for port, host or secret ) boolean commandLineParams=false; String secretFile=null; + String shutdown=null; String args[]; boolean help=false; boolean isAjp13=false; + boolean isAjp12=false; public StopTomcat() { @@ -157,6 +159,12 @@ public void setAjp13( boolean b ) { isAjp13=b; + isAjp12=!b; + } + + public void setAjp12( boolean b ) { + isAjp12=b; + isAjp13=!b; } public void setArgs( String args[] ) { @@ -187,64 +195,101 @@ // -------------------- Implementation -------------------- void stopTomcat() throws Exception { - String tchome=getTomcatHome(); + // if a parameter isn't set, try to read it from a file + if( port < 0 || host == null || secret == null ) { + String tchome=getTomcatHome(); - // read TOMCAT_HOME/conf/ajp12.id unless command line params - // specify a port/host/secret - try { - if( secretFile==null ) { - secretFile=tchome + "/conf/ajp13.id"; - File f=new File( secretFile ); - // if ajp13.id exists, use it - if( f.exists() ) { - isAjp13=true; - } else { - secretFile=tchome + "/conf/ajp12.id"; - } - } - - if( isAjp13 ) { - Properties props=new Properties(); - props.load( new FileInputStream( secretFile )); - - String line=props.getProperty( "port" ); - if( port < 0 ) { - try { - port=Integer.parseInt( line ); - } catch(NumberFormatException ex ) { - ex.printStackTrace(); + String defAjp12File=tchome + "/conf/ajp12.id"; + String defAjp13File=tchome + "/conf/ajp13.id"; + String ajpFile=secretFile; + + int portSave=port; + String hostSave=host; + String secretSave=secret; + + boolean pickAjp=(!isAjp13 && !isAjp12); + + // try to read unset parameters from appropriate file + try { + if( ajpFile==null ) { + if (isAjp13) { + ajpFile=defAjp13File; + } else if (isAjp12) { + ajpFile=defAjp12File; + } else { + File f=new File( defAjp13File ); + if( f.exists() ) { + ajpFile=defAjp13File; + isAjp13=true; + } else { + f=new File( defAjp12File ); + if( f.exists() ) { + ajpFile=defAjp12File; + isAjp12=true; + } + } } + } else if( pickAjp ) { + // default to ajp12 if file specifed with no protocal + isAjp12=true; } + + if( isAjp13 ) { + Properties props=new Properties(); + props.load( new FileInputStream( ajpFile )); + + String line=props.getProperty( "port" ); + if( port < 0 ) { + try { + port=Integer.parseInt( line ); + } catch(NumberFormatException ex ) { + ex.printStackTrace(); + } + } - line=props.getProperty( "address" ); - if( host==null ) host=line; - line=props.getProperty( "secret" ); - if( secret==null ) secret=line; - } else { - BufferedReader rd=new BufferedReader - ( new FileReader(secretFile)); - String line=rd.readLine(); - - if( port < 0 ) { - try { - port=Integer.parseInt( line ); - } catch(NumberFormatException ex ) { - ex.printStackTrace(); + line=props.getProperty( "address" ); + if( host==null ) host=line; + line=props.getProperty( "secret" ); + if( secret==null ) secret=line; + shutdown=props.getProperty( "shutdown" ); + // if shutdown not enabled in default ajp13 file and + // picking ajp, try ajp12 default file + if( shutdown==null && secretFile == null && pickAjp) { + isAjp12=true; + isAjp13=false; + port=portSave; + host=hostSave; + secret=secretSave; + ajpFile=defAjp12File; } } + + if( isAjp12 ) { + BufferedReader rd=new BufferedReader + ( new FileReader(ajpFile)); + String line=rd.readLine(); - line=rd.readLine(); - if( host==null ) host=line; - line=rd.readLine(); - if( secret==null ) secret=line; + if( port < 0 ) { + try { + port=Integer.parseInt( line ); + } catch(NumberFormatException ex ) { + ex.printStackTrace(); + } + } + + line=rd.readLine(); + if( host==null ) host=line; + line=rd.readLine(); + if( secret==null ) secret=line; + } + } catch( IOException ex ) { + //ex.printStackTrace(); + System.out.println("Can't read " + ajpFile); + // System.out.println(ex.toString()); + if( ! commandLineParams ) + return; } - } catch( IOException ex ) { - //ex.printStackTrace(); - System.out.println("Can't read " + secretFile); - // System.out.println(ex.toString()); - if( ! commandLineParams ) - return; - } + } if( "".equals( secret ) ) secret=null; @@ -343,13 +388,16 @@ byte stopMessage[]=new byte[5]; stopMessage[0]=(byte)0x12; stopMessage[1]=(byte)0x34; - int len=secret.length() + 4; // 1==shutdown cmd, 2==string len, 1=\0 + int len=1; + if( secret != null ) + len=secret.length() + 4; // 1==shutdown cmd, 2==string len, 1=\0 stopMessage[2]= (byte) ( len/256 ); stopMessage[3]= (byte) (len % 256 ); stopMessage[4]= 7; // JK_AJP13_SHUTDOWN os.write( stopMessage ); - sendAjp13String( os, secret ); + if( secret != null ) + sendAjp13String( os, secret ); // flush the stream and give the backend a chance to read the request // and shut down before we close the socket @@ -372,7 +420,7 @@ os.write( s.getBytes() );// works only for ascii } - /** Small AJP12 client util + /** Small AJP13 client util */ public void sendAjp13String( OutputStream os, String s ) throws IOException @@ -397,7 +445,7 @@ } - static String options1[]= { "help", "stop" }; + static String options1[]= { "help", "stop", "ajp12", "ajp13" }; static Hashtable optionAliases=new Hashtable(); static Hashtable optionDescription=new Hashtable(); static { @@ -416,13 +464,20 @@ public static void printUsage() { System.out.println("Usage: java org.apache.tomcat.startup.StopTomcat {options}"); System.out.println(" Options are:"); - System.out.println(" -ajpid file (or -secretFile file) Use this file instead of conf/ajp12.id"); - System.out.println(" -help Show this usage report"); - System.out.println(" -host Host to send the shutdown command"); - System.out.println(" -home dir (or -h dir) Use this directory as tomcat.home,"); - System.out.println(" to find ajp12.id"); - System.out.println(" -pass Password to use"); - System.out.println(" -port Port to send the shutdown command"); + System.out.println(" -ajp12 Use Ajp12 protocol for shutdown"); + System.out.println(" -ajp13 Use Ajp13 protocol for shutdown"); + System.out.println(" Shutdown feature of Ajp13"); + System.out.println(" connector must be enabled."); + System.out.println(" -ajpid file (or -secretFile file) Use this file instead of conf/ajp13.id"); + System.out.println(" or conf/ajp12.id. You must set"); + System.out.println(" -ajp13 option if file is from"); + System.out.println(" Ajp13 connector"); + System.out.println(" -help (or -?) Show this usage report"); + System.out.println(" -host Host to send the shutdown command"); + System.out.println(" -home (or -h ) Use this directory as tomcat.home, to"); + System.out.println(" find conf/ajp13.id or conf/ajp12.id"); + System.out.println(" -pass (or -secret ) Password to use, aka secret"); + System.out.println(" -port Port to send the shutdown command"); System.out.println("Note: the '-' on the options is optional."); System.out.println(); } -- To unsubscribe, e-mail: For additional commands, e-mail: