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