Hi Johnny,

Th code i used is basically the one you have in your last email...
I have an app running in privileged mode, and it has to add a servlet
definition on the fly to another app...so in my app i call a method and
pass the description of the other application as well as the servlet
definition i want to add:

public void addServlet(WebAppConfiguration webApp, DeploymentDescriptor
descriptor) {
    org.apache.catalina.Server server = ServerFactory.getServer();
    String contextRoot = webApp.getContextRoot();
    Service[] services = server.findServices();
    Context context = null;
    String initParamName = descriptor.getInitParamName();
    String initParamValue = descriptor.getInitParamValue();
    String servletName = descriptor.getServletName();
    String servletClass = descriptor.getServletClass();

    for (int i = 0; i < services.length; i++) {
      Engine engine = (Engine) services[i].getContainer();
      Host host = (Host) engine.findChild(engine.getDefaultHost());
      context = (Context) host.findChild(contextRoot);
      if (context != null){
        break;
      }
    }
    if (context == null)
      return;
    StandardWrapper
    w = (StandardWrapper)context.createWrapper();
      w.setName(servletName);
      w.setServletName(servletName);

      w.setServletClass(servletClass);
      w.addInitParameter(initParamName, initParamValue);
      context.addChild(w);
      context.addServletMapping(descriptor.getUrlPattern(), servletName);
  }


>
> ----- Original Message -----
> From: "Johnny Kewl" <[EMAIL PROTECTED]>
> To: "Tomcat Users List" <users@tomcat.apache.org>
> Sent: Sunday, October 05, 2008 5:40 AM
> Subject: Re: adding servlet definition to context on the fly :Tomcat 5.5
>
>
>>
>> ----- Original Message -----
>> From: "Martin Gainty" <[EMAIL PROTECTED]>
>> To: "Tomcat Users List" <users@tomcat.apache.org>
>> Sent: Saturday, October 04, 2008 11:39 PM
>> Subject: RE: adding servlet definition to context on the fly :Tomcat 5.5
>>
>>
>>
>> doctor john
>>
>> to followup with the addChild method and if an exception is thrown and
>> you
>> determine your container doesnt support child containers..what then?
>>
>> your diagnosis doctor..
>>
>> Martin
>> ---------------------------------------
>> I dont know the history... too young to remember TC 4 ;)
>> He probably lost his call when filters or something like that was
>> introduced... but heres the coders explanation, perhaps it makes sense
>> to
>> you...
>> I just looked at what he was calling before... and its gone ;)
>> addChild is still functional in container... but in wrapper its an
>> exception... some history here somewhere... risk one takes if they work
>> outside the intended API... unless that is in the servlet spec... doubt
>> it...
>>
>> /**
>> * A <b>Wrapper</b> is a Container that represents an individual servlet
>> * definition from the deployment descriptor of the web application.  It
>> * provides a convenient mechanism to use Interceptors that see every
>> single
>> * request to the servlet represented by this definition.
>> * <p>
>> * Implementations of Wrapper are responsible for managing the servlet
>> life
>> * cycle for their underlying servlet class, including calling init() and
>> * destroy() at appropriate times, as well as respecting the existence of
>> * the SingleThreadModel declaration on the servlet class itself.
>> * <p>
>> * The parent Container attached to a Wrapper will generally be an
>> * implementation of Context, representing the servlet context (and
>> * therefore the web application) within which this servlet executes.
>> * <p>
>> * Child Containers are not allowed on Wrapper implementations, so the
>> * <code>addChild()</code> method should throw an
>> * <code>IllegalArgumentException</code>.
>> *
>> * @author Craig R. McClanahan
>> * @version $Revision: 467222 $ $Date: 2006-10-24 05:17:11 +0200 (mar.,
>> 24
>> oct. 2006) $
>> */
>>
>> --------------------.
>
> A little more homework... would actuall be much easier if we saw the
> code...
> but the only thing that I can find in TC that is doing more or less what
> he
> "may" be doing is in the invoker servlet...
>
> looks like this....
>                     wrapper = context.createWrapper();
>                     wrapper.setName(name);
>                     wrapper.setLoadOnStartup(1);
>                     wrapper.setServletClass(servletClass);
>                     context.addChild(wrapper);
>                     context.addServletMapping(pattern, name);
>
> So if is calling  addChild on StandardWrapper... he has no chance..
> If his calls look something like the above... then its possible that
> invoker
> servlet is active on TC 4 and its not on TC 5...
> Possibly he has to turn on invoker servlet?
>
> In either case... its open heart surgery that I dont even see in embedded
> TC....
>
> Ram if you dont come right... post your code can we can see for sure what
> you doing... we as curious as hell ;)
>
> ---------------------------------------------------------------------------
> HARBOR : http://www.kewlstuff.co.za/index.htm
> The most powerful application server on earth.
> The only real POJO Application Server.
> See it in Action : http://www.kewlstuff.co.za/cd_tut_swf/whatisejb1.htm
> ---------------------------------------------------------------------------
>
>
> ---------------------------------------------------------------------
> 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]

Reply via email to