Win a copy of Micro Frontends in Action this week in the Server-Side JavaScript and NodeJS forum!
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other all forums
this forum made possible by our volunteer staff, including ...
  • Campbell Ritchie
  • Ron McLeod
  • Paul Clapham
  • Bear Bibeault
  • Junilu Lacar
  • Jeanne Boyarsky
  • Tim Cooke
  • Henry Wong
Saloon Keepers:
  • Tim Moores
  • Stephan van Hulst
  • Tim Holloway
  • salvin francis
  • Frits Walraven
  • Scott Selikoff
  • Piet Souris
  • Carey Brown

Aleksander's Clarification needed

Ranch Hand
Posts: 256
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I still have doubt on this question

1) A parameter is defined in a <context-param> element of the deployment descriptor for a web application. Which of the following statements

is correct? Select 1 correct option.

A. It is accessible to all the servlets of the webapp.
B. It is accessible to all the servlets of all the webapps of the container.
C. It is accessible only to the servlet it is defined for.
D. It is accessible only in the init() method of the servlet.
E. None of the above is correct.

Charles Lyons replied In fact both are correct

Now as per my reference material

Question Discuss the behaviour of servlet context in distributed environment?

1. Each web application has one and only one ServletContext instance on each JVM.

2. Servlet Context attributes set on one JVM are not visible on another JVM.

3. Container is not required to propogate ServletContextEvent and ServletContextAttributeEvent to different JVM.This means changes to the ServletContext in one JVM may not trigger a method call on ServletContextListener or ServletContextAttributeListener in another JVM.

4. ServletContext initialization parameters are available in all JVMs

As the context attributes are local to the JVM in which they are declared,this prevents the ServletContext attributes to be shared in distributed environment,When information needs to be shared between the servlets running in distributed environment ,the information should be placed into session

Point 4 says the Initialization parameters are available in all JVM's so that way only answer to the question comes out to be option 1
No way it can be both

Please clarify if I am wrong
Posts: 836
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I would have preferred it if this had continued in the same thread, but never mind...

Yes, I see how you are looking at this question now. Indeed, since context initialisation parameters are immutable once set in the deployment descriptor, then assuming the same DD is deployed to each server, the same set of parameters will be available to each application.

So provided they are exactly the same application deployed on different machines, then the context parameters will be available to every component of each instance of the application.

But, and this was what I was implying, the context parameters are never migrated between different JVMs... Aleksander's comment was "so Servlets in second JVM will not have access to context param of ServletContext in first JVM". If we're talking about objects this is correct - servlets in one application can't invoke methods on context parameters in a different application. This is of course a different story to session attributes, whose instances can effectively be cloned between the two applications and any change in state between invocations are persisted.

However, assuming the applications are deployed in the same way, they should each contain the same set of context parameters. Since these are immutable, they contain the same data and so each application has access to identically named parameters with identical values. But these are not the same parameters in the object sense... method invocations on either occur quite separately.

Of course, a change in the deployment descriptor would also lead to each application having access to different parameters (and in theory this could happen if you had different Deployer personnel for different Web servers). Indeed, what would happen if your DD contained a host name and configuration for a mail server? This would most likely be different on each machine the application was deployed on, so even though the same parameter names appear, they have different values. But other applications can't 'see' the different values - they can only determine their own. So the context parameters are available in all applications, but they have different values.

Again, this is an esoteric argument of words, which is why both answers can be seen to be correct, depending on how you want to interpret the conditions, and what exact restrictions are given. In my opinion the question is quite unclear. Indeed, I could argue that in fact option D ("It is accessible only in the init() method of the servlet") is true if we choose never to save the ServletConfig object in the servlet... no ServletConfig object means no ServletContext object is available for use in any other methods of the servlet, so no access to context parameters elsewhere! This would have been better worded as "It is only ever accessible in the init() method of the servlet" which is then clearly false.

That might have made things more confusing, I don't know...
[ May 11, 2006: Message edited by: Charles Lyons ]
Gaurav Gambhir
Ranch Hand
Posts: 256
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Thanks Charles
I wish to win the lottery. I wish for a lovely piece of pie. And I wish for a tiny ad:
Building a Better World in your Backyard by Paul Wheaton and Shawn Klassen-Koop
    Bookmark Topic Watch Topic
  • New Topic