Hi,

        Can anyone tell me how to get this error out of the way? I'm
trying to compile LoadOnStartup.java written by Mr.Matthias Kerkhoff.
Although I'm a starter, so far I think this is the major hurdle that I
encountered. Thanks to the mailing list archive which enabled me to jump
through all the hoops.

   I'm running weblogic 5.1 sp9, OK, I've read all comments on sp9:).
Just this help..by the way, this class was written for sp6. Also
attached is the java file.

- Thanks,

- Niranjan

LoadOnStartup.java:213:
prepareServlet(weblogic.servlet.internal.ServletRequestImpl,weblogic.servlet.internal.ServletResponseImpl)
in weblogic.servlet.internal.ServletStubImpl cannot be applied to ()

stub.prepareServlet( );

^
1 error
--



                         **********************
                         Niranjan Kumar Vuppu
                         Ph No: 901 263 4386(w)
                         **********************

/** Author: Matthias Kerkhoff, [EMAIL PROTECTED] */
package bestoffers.weblogic.util;

import java.util.Hashtable;
import java.util.Arrays;
import java.util.Comparator;
import java.net.URL;

import com.sun.java.util.collections.List;
import weblogic.common.*;
import weblogic.workspace.common.*;
import weblogic.servlet.internal.ServletContextManager;
import weblogic.servlet.internal.ServletContextImpl;
import weblogic.servlet.internal.ServletStubImpl;
import weblogic.servlet.internal.dd.WebAppDescriptor;
import weblogic.servlet.internal.dd.ServletDescriptor;
import weblogic.t3.srvr.T3Srvr;
import weblogic.t3.srvr.HttpServer;
import java.io.BufferedReader;
import java.io.InputStreamReader;

 /**
        * <pre>This startup class adds support for the load-on-startup tag.
        *
        * It has been tested with WLS 5.1 sp6. It may or may not work with
        * different configurations.
        * (It uses various internal WebLogic classes, so it's highly likely,
        *  that future service packs will require modifications.)
        *
  * To use this class, add the following lines to your weblogic.properties:
        *
        * 
weblogic.system.startupClass.loadServletsOnStartup=bestoffers.weblogic.util.LoadOnStartup
        *       
weblogic.system.startupArgs.loadServletsOnStartup=delay=1500,jspPageName=/dummy.jsp
        *
  * where ...
        *
        * <delay> specifies the time (in milliseconds) that the background thread
        *    should wait until it starts,  and
        *
        * <jspPageName> specifies the (exisiting or non-existing) page, that will be
        *    requested (for each WebApplication), before any servlets are preloaded.
        *
        *       The startupArgs are optional. If they're not present, they will default
        * to 
delay=1000,jspPage=/this_is_a_workaround_for_the_dreaded_classcast_exception.jsp</PRE>
        */
public class LoadOnStartup implements T3StartupDef, Runnable {
  
  /**
   * Default constructor. A default constructor is required of any
   * class that implements <tt>weblogic.common.T3StartupDef</tt>.
   */
  public LoadOnStartup() {}
  
  private T3ServicesDef services;
        private String jspPageName;
        private int delay;
  
  /**
   * Sets the services stub. The services stub provides
   * runtime access to WebLogic services.
   */
  public void setServices(T3ServicesDef services) {
    this.services = services;
  }
  
  /**
   * The startup action belongs in this method. The string
   * argument specifies the virtual name of this class by which it
   * is registered in the <tt>weblogic.properties</tt> file,
   * under the <tt>weblogic.system.startupClass</tt> property.
   * The hashtable argument is a set of name-value pairs that
   * are supplied to this method from the 
   * <tt>weblogic.system.startupArgs</tt> property.
   *
   * @param name             Virtual name under which this class is registered
   * @param args             Set of name-value pairs of arguments for this method
   * @exception              java.lang.Exception if there is an error
   */
  public String startup(String name, Hashtable args) throws Exception {
                HttpServer server = T3Srvr.getT3Srvr().httpServer();

                // Temporary disable the server to prevent processing of incoming 
requests.
                if (server.getEnable()) {
                        server.setEnable(false);

                        // Default delay for background thread 
                        delay = 1000;

                        // Could be changed via weblogic.properties
        try {
                                delay = Integer.parseInt( (String)args.get("delay") );
                        }
                        catch (Exception e) {;}
                
                        // This page will be requested to activate the JSP 
classloader. The page
                        // may or may not exist.
                        jspPageName = 
"/this_get_is_a_workaround_for_the_dreaded_classcast_exception.jsp";

                        // Could be changed via weblogic.properties
                        try {
                                String tmp = (String)args.get("jspPageName");
                                if (tmp != null && tmp.length() > 0) {
                                        jspPageName = tmp;
                                }
                        }
                        catch (Exception e) {;}
                        
                        // Some simple sanity checks
                        if ( !jspPageName.startsWith("/") )
                                jspPageName = "/" + jspPageName;
                                
                        if ( !jspPageName.endsWith(".jsp") )
                                jspPageName += ".jsp";

                        if ( delay < 100 )
                                delay = 100;
                                 
                        /**
                         * Start a background thread - the server will not accept 
connections
                         * while processing startup classes, so we have to use a 
background thread.
                         */
                        Thread t = new Thread(this);
                        t.start();

            return "Starting load-on-start processing in "  + delay/1000 + " seconds.";
                }
                else
        return "HTTP server not enabled. No load-on-startup processing.";
  }

  /**
   * This method implements the load-on-startup stuff. It loops through all
   * WebApplication's, retrieves the list of registered servlets and loads
   * them in order of load-on-startup. Servlets without, with an empty or a
         * load-on-startup value of -1 will not be loaded. (This is not strictly spec
   * conformant. The spec requires that servlets with an empty or an negative
         * load-on-startup tag should be preloaded.)
         * To suppress class cast exceptions, we request for each WebApplication 
         * a dummy jsp. This activates the JSP classloader, which is the only (known)
         * work-around for the "dreaded ClassCastException".
         *
   */
        public void run() {              
                try {
                        // Wait a second to let the server finish it's startup.

                        // (If this thread starts too early, the load-on-startup will 
fail
                        //  the sleep amount
                        try {   Thread.sleep(delay);    } catch (InterruptedException 
e) {;}
                        
                        HttpServer server = T3Srvr.getT3Srvr().httpServer();
                        server.setEnable(true);

            services.log().log("Initalizing load-on-startup-servlets");
        
                        ServletContextManager scManager = 
HttpServer.getServletContextManager();
        
                        // Get all registered web-applications,
                        ServletContextImpl contexts[] = scManager.getAllContexts();
                        WebAppDescriptor waDesc;
                        
                        // loop through them and...
                        for (int i = 0;i < contexts.length; i++) {
                                waDesc = contexts[i].getWebAppDescriptor();
                                if (waDesc != null) {
                                        services.log().log("Checking WebApplication " 
+ contexts[i].getName() );
        
                            List webAppServlets = waDesc.getServletsList();
                                        if ( !webAppServlets.isEmpty() ) {
                                                services.log().log("Sorting registered 
servlets of " + contexts[i].getName() );
        
                                                // ... sort their servlets by the load 
sequence number.
                                                Object[] orderedServlets =  
webAppServlets.toArray();
                                                Arrays.sort( orderedServlets, 
                                                                new Comparator() {
                                                                        public int 
compare(Object left, Object right) {
                                                                                return 
((ServletDescriptor)left).getLoadSequence() - 
((ServletDescriptor)right).getLoadSequence();
                                                                        }
                                                                }
                                                        );
                
                                                // Before we load the servlet(s) we 
have to send a dummy
                                                // request to the server. Otherwise we 
would receive 
                                                // never-ending ClassCastExceptions.
                                                String contextPath = 
contexts[i].getContextPath();
                                                URL url = new URL("http://localhost:"; 
                                                        + server.serverPort
                                                        + ((contextPath != null && 
contextPath != "") ? contextPath : "")
                                                        + jspPageName);
                                                services.log().log("Trying to do an 
initial read from " + url);
                                                
                                                // Send the request
                        BufferedReader in = null;
                                                try {   in = new BufferedReader( new 
InputStreamReader( url.openStream() ));    }       
                                                catch (Exception e) {;}
                                                finally {       if (in != null) 
in.close();     }

                                                // Finally, we can load the servlets
                                                ServletDescriptor servletDesc;
                                                for (int k = 0;k < 
orderedServlets.length; k++) {
                                                        servletDesc = 
(ServletDescriptor)orderedServlets[k];
        
                                                        // WLS PROBLEM: WLS gives us 
no chance to differ between an empty 
                                                        // and a non-existing 
<load-on-startup> tag. This would be needed
                                                        // for 100% spec conformance.

                                                        // load-on-startup defined ? 
(-1 is the WLS default value for loadSequence)
                                                        if ( 
servletDesc.getLoadSequence() != -1) { 
                                                services.log().log("Loading servlet " 
+ servletDesc.getServletName() + " (load-on-startup=" + 
servletDesc.getLoadSequence()+")" );
                                                        
                                                                ServletStubImpl stub = 
contexts[i].getStubByName( servletDesc.getServletName() );
                                                                try {
                                                                        
stub.prepareServlet( );
                                                                }
                                                                catch (Exception e) { 
services.log().log( e.getMessage() ); }
                                                        }
                                                        else
                                                services.log().log("Skipping servlet " 
+ servletDesc.getServletName() + " (load-on-startup=" + 
servletDesc.getLoadSequence()+")" );
                                                }
                                        }
                                }
                        }
                }
                catch (Exception e1) {
                        try {
                                services.log().log( e1.getMessage() ); 
                        }
                        catch (Exception e2) {;}
                }
  }
}


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

Reply via email to