Return-Path: Delivered-To: apmail-jakarta-tomcat-dev-archive@www.apache.org Received: (qmail 46147 invoked from network); 8 Mar 2004 19:14:47 -0000 Received: from daedalus.apache.org (HELO mail.apache.org) (208.185.179.12) by minotaur-2.apache.org with SMTP; 8 Mar 2004 19:14:47 -0000 Received: (qmail 79047 invoked by uid 500); 8 Mar 2004 19:14:29 -0000 Delivered-To: apmail-jakarta-tomcat-dev-archive@jakarta.apache.org Received: (qmail 78944 invoked by uid 500); 8 Mar 2004 19:14:28 -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 78734 invoked from network); 8 Mar 2004 19:14:27 -0000 Received: from unknown (HELO starbug.mhsoftware.com) (67.154.139.115) by daedalus.apache.org with SMTP; 8 Mar 2004 19:14:27 -0000 Received: from emp00 (c-67-164-162-42.client.comcast.net [67.164.162.42]) by starbug.mhsoftware.com (8.12.8/8.12.8) with ESMTP id i28JEUEg019796 for ; Mon, 8 Mar 2004 12:14:30 -0700 From: "George Sexton" To: "'Tomcat Developers List'" Subject: RE: Behaviour of load-on-startup=0 Date: Mon, 8 Mar 2004 12:14:30 -0700 Organization: MH Software, Inc. Message-ID: <000401c40541$95252870$fe00a8c0@emp00> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook, Build 10.0.4024 In-Reply-To: <00d801c40534$e5607a40$01000001@trilemma> X-MIMEOLE: Produced By Microsoft MimeOLE V6.00.2800.1165 Importance: Normal X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N Load on startup should really be deprecated because it duplicates functionality available via context event listeners. As a warning, there is some variance in servlet engines. The spec says 0 starts before 1, logically -1 should load before 0. In fact, some containers (like Websphere if I remember correctly) don't process entries with a value less than 0. My practical advice to you is to look at context event listeners. -----Original Message----- From: Michael Prescott [mailto:michael.prescott@ingenura.com] Sent: Monday, March 08, 2004 10:44 AM To: tomcat-dev@jakarta.apache.org Subject: Behaviour of load-on-startup=0 I stumbled on what I think is a small difference in Tomcat's behaviour from the Servlet spec. Looking at the code, it seems to affect both Tomcat 4 and 5. In short, the servlet specs (2.3 and 2.4) says that a servlet with value set to 0 should load before those with values of 1 or higher, but Tomcat loads 1+ first, and 0 last. "The load-on-startup element indicates that this servlet should be loaded (instantiated and have its init() called) on the startup of the web application. The optional contents of these element must be an integer indicating the order in which the servlet should be loaded. If the value is a negative integer, or the element is not present, the container is free to load the servlet whenever it chooses. If the value is a positive integer or 0, the container must load and initialize the servlet as the application is deployed. The container must guarantee that servlets marked with lower integers are loaded before servlets marked with higher integers. The container may choose the order of loading of servlets with the same load-on-start-up value." Here's the first part of loadOnStartup(Container[]). This code is identical in Tomcat 4.x (StandardContext.java:3398) and 5.x (StandardContext.java:3930). public void loadOnStartup(Container children[]) { // Collect "load on startup" servlets that need to be initialized TreeMap map = new TreeMap(); for (int i = 0; i < children.length; i++) { Wrapper wrapper = (Wrapper) children[i]; int loadOnStartup = wrapper.getLoadOnStartup(); if (loadOnStartup < 0) continue; if (loadOnStartup == 0) // Arbitrarily put them last loadOnStartup = Integer.MAX_VALUE; Integer key = new Integer(loadOnStartup); ArrayList list = (ArrayList) map.get(key); if (list == null) { list = new ArrayList(); map.put(key, list); } list.add(wrapper); } ... It appears the problem would be solved by deleting the lines that read: if (loadOnStartup == 0) // Arbitrarily put them last loadOnStartup = Integer.MAX_VALUE; Michael -- Michael Prescott Ingenura Inc. michael.prescott@ingenura.com (416) 686-8576 PGP Public Key: http://www.ingenura.com/keys/MichaelPrescott.asc --------------------------------------------------------------------- To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org