Hi There

I had a look at Tomcat's Manager application.... the reload(..) function
reveals a hint:
..
Context context = (Context) host.findChild(path);
..
context.reload();

This should do the trick? Any idea on how to get the tomcat context
object... from ActionServlet or ModuleConfig objects...? I am not familar
with Tomcat's object model.

Many thanks

Jamie


 /**
     * Reload the web application at the specified context path.
     *
     * @param writer Writer to render to
     * @param path Context path of the application to be restarted
     */
    protected void reload(PrintWriter writer, String path) {

        if (debug >= 1)
            log("restart: Reloading web application at '" + path + "'");

        if ((path == null) || (!path.startsWith("/") && path.equals(""))) {
            writer.println(sm.getString("managerServlet.invalidPath",
                                        RequestUtil.filter(path)));
            return;
        }
        String displayPath = path;
        if( path.equals("/") )
            path = "";

        try {
            Context context = (Context) host.findChild(path);
            if (context == null) {
                writer.println(sm.getString
                               ("managerServlet.noContext",
                                   RequestUtil.filter(displayPath)));
                return;
            }
            // It isn't possible for the manager to reload itself
            if (context.getPath().equals(this.context.getPath())) {
                writer.println(sm.getString("managerServlet.noSelf"));
                return;
            }
            context.reload();
            writer.println
                (sm.getString("managerServlet.reloaded", displayPath));
        } catch (Throwable t) {
            log("ManagerServlet.reload[" + displayPath + "]", t);
            writer.println(sm.getString("managerServlet.exception",
                                        t.toString()));
        }

    }


Pid-2 wrote:
> 
> jamieb wrote:
>> Hi 
>> 
>> Thanks for the tip. While I am very grateful for your advice, I am not
>> sure
>> I like either of the approaches. I was hoping just to call a Tomcat API
>> function directly from my web application. 
> 
> Tomcat provides an API, in the form of JMX.
> 
>> Is'nt there a method called restart() or something? 
> 
> I'm not aware of one, have you found one in the docs?
> 
>> JMX seems like overkill since I do not need to
>> control the application remotely. The application doing the calling is
>> the
>> application that needs to be restarted itself. Any further ideas?
> 
> You haven't elaborated on how you're connecting to the box, but a simple 
> JMX app could be run from the command line, or another webapp on the 
> same server.
> 
> I'd suggest that you would be better off if a different app called the 
> restart, as you'll never be able to recover (or notify afterwards) from 
> a failure if the app itself is down.
> 
> p
> 
> 
> 
> 
>> Thanks
>> Jamie
>> 
>> 
>> Pid-2 wrote:
>>> jamieb wrote:
>>>> Hi there
>>>>
>>>> I am busy implementing an auto update facility for a Tomcat web
>>>> application.
>>>> As part of the auto update process, the auto update code needs to
>>>> unpack
>>>> the
>>>> changed class files and reload the Tomcat web application. 
>>>>
>>>> I am aware that you can configure Tomcat to automatically reload the
>>>> web
>>>> application when class files are changed. I've decided against the use
>>>> of
>>>> this functionality for fear of unscheduled service disruption.
>>>>
>>>> My question: Is recommended way for a web application to apply an
>>>> update
>>>> to
>>>> itself and restart itself? Is there an API call to reload the current
>>>> Tomcat
>>>> web application from within that application? 
>>> If app auto-reload facilities are switched off, you should be able to 
>>> replace WAR files safely*, and then use the built in JMX stuff to 
>>> restart the webapp in question.
>>>
>>> (* If you're doing it from a remote location, be sure to send it to a 
>>> safe directory /then/ do an internal copy to replace the file, rather 
>>> than directly uploading to the target web app dir.  Failed or slow 
>>> uploads won't cause problems then.)
>>>
>>>
>>>
>>> You can also use the included Tomcat Ant tasks, I think, (see 
>>> bin/catalina-tasks.xml)
>>>
>>> See also:
>>>
>>> http://tomcat.apache.org/tomcat-6.0-doc/monitoring.html
>>> http://tomcat.apache.org/tomcat-6.0-doc/mbeans-descriptor-howto.html
>>>
>>> The Tomcat manager app uses JMX AFAIK, so you could examine the source 
>>> code if you wanted to customise your own utility.
>>>
>>>
>>> p
>>>
>>>
>>>
>>>
>>>> Much appreciate
>>>>
>>>> Jamie
>>>>
>>>>
>>>
>>> ---------------------------------------------------------------------
>>> To start a new topic, e-mail: users@tomcat.apache.org
>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>
>>>
>>>
>> 
> 
> 
> ---------------------------------------------------------------------
> To start a new topic, e-mail: users@tomcat.apache.org
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/API-call-to-reload-Tomcat-web-application-tp16065357p16102507.html
Sent from the Tomcat - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to