Sorry I didn't mean to say ActionServlet or ModuleConfig objects...these are
struts based objects.. more generally, from within a Tomcat web
application... how do you access the Context object?
Thanks
Jamie


jamieb wrote:
> 
> 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-tp16065357p16102607.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