Re: Problem with get ROOT context in servlet on tomcat 8.0.30 (jdk 1.7.0_79)

2015-12-31 Thread Mark Thomas
On 31/12/2015 07:40, Tomasz Macnar wrote:
> Hi,
> 
> I have problem with get ROOT servlet context from other application (on
> the same server) in tomcat 8.0.30.
> My code look this:
> 
> public class TestServlet extends HttpServlet {
> 
> @Override
> public void init() throws ServletException {
> 
> ServletContext servletContext = getServletContext();
> 
> System.out.println("Servlet START: " +
> servletContext.getContextPath());
> 
> String[] contextTab = { "/", "/app1", "/app2" };
> 
> for (String con : contextTab) {
> System.out.println("Context " + con + " : " +
> servletContext.getContext(con));
> }
> }
> }
> 
> This servlet I have in app1 and app2 with
> 1.
> 
> And in context "/" always I have null. In server.xml i have configuration:
> 
>  crossContext="true" />
>  crossContext="true" />
>  crossContext="true" />
> 
> And the output is:
> Servlet START: /app1
> Context / : null
> Context /app1 : null
> Context /app2 : null
> 
> Servlet START: /app2
> Context / : null
> Context /app1 : org.apache.catalina.core.ApplicationContextFacade@8c6fb37
> Context /app2 : null
> 
> 
> I debug source of tomcat and find, that ROOT context (with empty "path"
> in configuration server.xml) is added to ContainerBase class (HashMap
> name children) in key "", but I suppose it should add ROOT context with
> key "/".

No.

> Please tell me if i have wrong configuration or other thing ?

The results above are giving you a big hint. app1 can't see any other
apps, but app2 can see app1 yet they are using exactly the same code.

Think about the order in which applications start and when the above
code runs.

Mark


-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org



Re: Problem with get ROOT context in servlet on tomcat 8.0.30 (jdk 1.7.0_79)

2015-12-31 Thread Tomasz Macnar

Thanks for answer.
I understand that application deploy order is the key to get context to 
deployed applicaitons (when application isn't deployed i can't get it 
context - it is clear).
But ROOT application is deployed before app1, but i can't get ROOT 
context from app1. *Is it in tomcat 8 possible to get ROOT context from 
other application (in servlet) ? *If yes, coud tou give me an simple 
example ?


In tomcat 6 when i put this configuration to server.xml



i have returned ROOT application context. The same code work fine in 
tomcat 6.


Pozdrawiam,
Tomasz Macnar

tel. +48 12 621 5234
mob. +48 694 464 934

W dniu 2015-12-31 o 10:09, Mark Thomas pisze:

On 31/12/2015 07:40, Tomasz Macnar wrote:

Hi,

I have problem with get ROOT servlet context from other application (on
the same server) in tomcat 8.0.30.
My code look this:

public class TestServlet extends HttpServlet {

 @Override
 public void init() throws ServletException {

 ServletContext servletContext = getServletContext();

 System.out.println("Servlet START: " +
servletContext.getContextPath());

 String[] contextTab = { "/", "/app1", "/app2" };

 for (String con : contextTab) {
 System.out.println("Context " + con + " : " +
servletContext.getContext(con));
 }
 }
}

This servlet I have in app1 and app2 with
1.

And in context "/" always I have null. In server.xml i have configuration:





And the output is:
Servlet START: /app1
Context / : null
Context /app1 : null
Context /app2 : null

Servlet START: /app2
Context / : null
Context /app1 : org.apache.catalina.core.ApplicationContextFacade@8c6fb37
Context /app2 : null


I debug source of tomcat and find, that ROOT context (with empty "path"
in configuration server.xml) is added to ContainerBase class (HashMap
name children) in key "", but I suppose it should add ROOT context with
key "/".

No.


Please tell me if i have wrong configuration or other thing ?

The results above are giving you a big hint. app1 can't see any other
apps, but app2 can see app1 yet they are using exactly the same code.

Think about the order in which applications start and when the above
code runs.

Mark


-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org





smime.p7s
Description: Kryptograficzna sygnatura S/MIME


Re: Problem with get ROOT context in servlet on tomcat 8.0.30 (jdk 1.7.0_79)

2015-12-31 Thread Konstantin Kolinko
2015-12-31 12:41 GMT+03:00 Tomasz Macnar :
> Thanks for answer.
> I understand that application deploy order is the key to get context to
> deployed applicaitons (when application isn't deployed i can't get it
> context - it is clear).
> But ROOT application is deployed before app1, but i can't get ROOT context
> from app1.
> Is it in tomcat 8 possible to get ROOT context from other
> application (in servlet) ? If yes, coud tou give me an simple example ?
>
> In tomcat 6 when i put this configuration to server.xml
>
>  />
>
> i have returned ROOT application context. The same code work fine in tomcat
> 6.
>

Deployment order does not matter. What matters is whether other
context has already been started (registered in Mapper and is
available to serve requests). As you have already noted during your
debugging, "children" field in ContainerBase is a HashMap and the
entries are not ordered.

Note that
1) modern JRE uses random seed when evaluating String hash code to
mitigate hash collision attacks, so the order will be different on
different runs

2) In Tomcat 7 and later a container starts all its children in
parallel, using an executor configured with "startStopThreads"
property.,

3) The Servlet API getContext(path) is tricky as it uses prefix matching.
Asking for getContext("/app/foo") can return context for "/app/foo",
or context for "/app", or the ROOT context.
Discussed here:
http://markmail.org/thread/wwfgnc6qwgaenwol
https://bz.apache.org/bugzilla/show_bug.cgi?id=57645

Best regards,
Konstantin Kolinko

-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org