You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Alessandro Di Maria <ad...@braus.ch> on 2001/10/01 12:08:56 UTC

InitParameters

Hello!

I have some problems to read the init-parameters for my servlet.

I'm usign tomcat  3.2.3, mod-jk. But tested with tomcat standalone on 
port 8080.

Here's my web.xml, located on TOMCAT_HOME/webapps/test/WEB-INF/

<web-app>
    <servlet>
        <servlet-name>remoteServlet</servlet-name>
        <servlet-class>ch.hephaistos.web.RemoteServlet</servlet-class>

        <init-param>
            <param-name>server-host</param-name>
            <param-value>localhost</param-value>
        </init-param>       
        <init-param>
            <param-name>server-name</param-name>
            <param-value>ServletServer</param-value>
        </init-param>
        <init-param>
            <param-name>timeout</param-name>
            <param-value>80000</param-value>
        </init-param>
        <load-on-startup>5</load-on-startup>
    </servlet> 
</web-app>

if I don't include the <load-on-startup> tag the init-param will never 
be read !

and here's a snippet of my servlet code:

public class RemoteServlet extends HttpServlet implements RRemoteServlet {
   
    private String serverHost="localhost";
   
    private String severName="ServletServer";
   
    private RServletServer server;
   
    private int timeout=60000;
   
    private static int count=0;
  
    private int number;
   
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        processes = new Hashtable(5);
       
        // config Log4J
        String prefix =  
this.getServletContext().getRealPath("/WEB-INF/conf/");
        Log.loadConfig(prefix+"log4j.lcf");
        Log.log.debug("Log4J configuration laoded");
       
        // load configuration
        serverHost  = config.getInitParameter("server-host");
        Log.web.info("Remote Host: "+serverHost);
        severName   = config.getInitParameter("server-name");
        Log.web.info("Server Name: "+severName);
        String timeoutInit = config.getInitParameter("timeout");
        try{
            timeout = Integer.parseInt(timeoutInit);
        } catch (NumberFormatException nfe){
            timeout = 60000;
        }
        Log.web.info("Timeout: "+timeout);
       
       
        // test only use DEBUG-Mode
        count++;
        Log.web.debug("Servlet Instance Nr."+count);
        number=count;
        Log.web.debug("Servlet Nr."+number);
       
        // prepare Servlet for callbacks
        try{
            UnicastRemoteObject.exportObject(this);
        } catch(RemoteException re){
            re.printStackTrace();
        }
        this.lookup(serverHost,severName);
        try{
            this.server.register(this);
            Log.rmi.info("Servlet registred to "+severName);
        } catch (RemoteException re){
            Log.rmi.fatal("Register to ["+severName+"] failed!",re);
        }
    }

Here the output I get from Tomcat:

2001-10-01 11:56:46 - ContextManager: Adding context Ctx( /test )
0     DEBUG [main] hephaistos.log init - Log4J configuration laoded
21    INFO  [main] hephaistos.web init - Remote Host: localhost
21    INFO  [main] hephaistos.web init - Server Name: ServletServer
21    INFO  [main] hephaistos.web init - Timeout: 80000
21    DEBUG [main] hephaistos.web init - Servlet Instance Nr.1
21    DEBUG [main] hephaistos.web init - Servlet Nr.1
241   INFO  [main] hephaistos.rmi init - Servlet registred to ServletServer
2001-10-01 11:56:47 - PoolTcpConnector: Starting HttpConnectionHandler 
on 8080
2001-10-01 11:56:47 - PoolTcpConnector: Starting Ajp12ConnectionHandler 
on 8007
9594  DEBUG [Thread-21] hephaistos.log init - Log4J configuration laoded
9594  INFO  [Thread-21] hephaistos.web init - Remote Host: null
9594  INFO  [Thread-21] hephaistos.web init - Server Name: null
9594  INFO  [Thread-21] hephaistos.web init - Timeout: 60000
9594  DEBUG [Thread-21] hephaistos.web init - Servlet Instance Nr.2
9594  DEBUG [Thread-21] hephaistos.web init - Servlet Nr.2
11868 ERROR [Thread-21] hephaistos.rmi lookup - Lookup for [null] failed!
java.rmi.UnknownHostException: Unknown host: null; nested exception is:
        java.net.UnknownHostException: null
java.net.UnknownHostException: null
        at java.net.InetAddress.getAllByName0(InetAddress.java:571)
         .....

Thread [main] is launched on tomcat's startup, Thread [21] on the first 
request for this servlet.

I don't understand why tomcat has initialized another intance of the 
servlet, he does it for every new request.
If I don't read any init-params tomcat only uses one instance, even if I 
would implement the SingleThreadModel.

What's wrong here?!

Alessandro Di Maria



Re: InitParameters

Posted by Bo Xu <bo...@cybershop.ca>.
I suggest you need to use your "<servlet-name>" to invoke your Servlet if you
want
to use your "<init-param>",  it will force your "<init-param>" to be included,
for example:
http://xxx.xxx.xxx.xxx:8080/myapp/servlet/remoteServlet

if you use your "Servlet class name" to invoke your Servlet, for example:
http://xxx.xxx.xxx.xxx:8080/myapp/servlet/ch.hephaistos.web.RemoteServlet

now (I only have tried TC4.0),  the "default Servlet-declaration(instance)" of
your Servlet
class will be invoked, which doesn't include your "<init-param>"

if you include the <load-on-startup> tag, now I guess because it will force
your Servlet
engineer Not to use the "default Servlet-declaration(instance)", so you can get
the "<init-param>"


Bo
Oct.01, 2001




Alessandro Di Maria wrote:

> Hello!
>
> I have some problems to read the init-parameters for my servlet.
>
> I'm usign tomcat  3.2.3, mod-jk. But tested with tomcat standalone on
> port 8080.
>
> Here's my web.xml, located on TOMCAT_HOME/webapps/test/WEB-INF/
>
> <web-app>
>     <servlet>
>         <servlet-name>remoteServlet</servlet-name>
>         <servlet-class>ch.hephaistos.web.RemoteServlet</servlet-class>
>
>         <init-param>
>             <param-name>server-host</param-name>
>             <param-value>localhost</param-value>
>         </init-param>
>         <init-param>
>             <param-name>server-name</param-name>
>             <param-value>ServletServer</param-value>
>         </init-param>
>         <init-param>
>             <param-name>timeout</param-name>
>             <param-value>80000</param-value>
>         </init-param>
>         <load-on-startup>5</load-on-startup>
>     </servlet>
> </web-app>
>
> if I don't include the <load-on-startup> tag the init-param will never
> be read !
>
> and here's a snippet of my servlet code:
>
> public class RemoteServlet extends HttpServlet implements RRemoteServlet {
>
>     private String serverHost="localhost";
>
>     private String severName="ServletServer";
>
>     private RServletServer server;
>
>     private int timeout=60000;
>
>     private static int count=0;
>
>     private int number;
>
>     public void init(ServletConfig config) throws ServletException {
>         super.init(config);
>         processes = new Hashtable(5);
>
>         // config Log4J
>         String prefix =
> this.getServletContext().getRealPath("/WEB-INF/conf/");
>         Log.loadConfig(prefix+"log4j.lcf");
>         Log.log.debug("Log4J configuration laoded");
>
>         // load configuration
>         serverHost  = config.getInitParameter("server-host");
>         Log.web.info("Remote Host: "+serverHost);
>         severName   = config.getInitParameter("server-name");
>         Log.web.info("Server Name: "+severName);
>         String timeoutInit = config.getInitParameter("timeout");
>         try{
>             timeout = Integer.parseInt(timeoutInit);
>         } catch (NumberFormatException nfe){
>             timeout = 60000;
>         }
>         Log.web.info("Timeout: "+timeout);
>
>
>         // test only use DEBUG-Mode
>         count++;
>         Log.web.debug("Servlet Instance Nr."+count);
>         number=count;
>         Log.web.debug("Servlet Nr."+number);
>
>         // prepare Servlet for callbacks
>         try{
>             UnicastRemoteObject.exportObject(this);
>         } catch(RemoteException re){
>             re.printStackTrace();
>         }
>         this.lookup(serverHost,severName);
>         try{
>             this.server.register(this);
>             Log.rmi.info("Servlet registred to "+severName);
>         } catch (RemoteException re){
>             Log.rmi.fatal("Register to ["+severName+"] failed!",re);
>         }
>     }
>
> Here the output I get from Tomcat:
>
> 2001-10-01 11:56:46 - ContextManager: Adding context Ctx( /test )
> 0     DEBUG [main] hephaistos.log init - Log4J configuration laoded
> 21    INFO  [main] hephaistos.web init - Remote Host: localhost
> 21    INFO  [main] hephaistos.web init - Server Name: ServletServer
> 21    INFO  [main] hephaistos.web init - Timeout: 80000
> 21    DEBUG [main] hephaistos.web init - Servlet Instance Nr.1
> 21    DEBUG [main] hephaistos.web init - Servlet Nr.1
> 241   INFO  [main] hephaistos.rmi init - Servlet registred to ServletServer
> 2001-10-01 11:56:47 - PoolTcpConnector: Starting HttpConnectionHandler
> on 8080
> 2001-10-01 11:56:47 - PoolTcpConnector: Starting Ajp12ConnectionHandler
> on 8007
> 9594  DEBUG [Thread-21] hephaistos.log init - Log4J configuration laoded
> 9594  INFO  [Thread-21] hephaistos.web init - Remote Host: null
> 9594  INFO  [Thread-21] hephaistos.web init - Server Name: null
> 9594  INFO  [Thread-21] hephaistos.web init - Timeout: 60000
> 9594  DEBUG [Thread-21] hephaistos.web init - Servlet Instance Nr.2
> 9594  DEBUG [Thread-21] hephaistos.web init - Servlet Nr.2
> 11868 ERROR [Thread-21] hephaistos.rmi lookup - Lookup for [null] failed!
> java.rmi.UnknownHostException: Unknown host: null; nested exception is:
>         java.net.UnknownHostException: null
> java.net.UnknownHostException: null
>         at java.net.InetAddress.getAllByName0(InetAddress.java:571)
>          .....
>
> Thread [main] is launched on tomcat's startup, Thread [21] on the first
> request for this servlet.
>
> I don't understand why tomcat has initialized another intance of the
> servlet, he does it for every new request.
> If I don't read any init-params tomcat only uses one instance, even if I
> would implement the SingleThreadModel.
>
> What's wrong here?!
>
> Alessandro Di Maria