JNDI e Contexto da Aplicação

Ola Pessoal!

Gostaria de uma explicação sobre JNDI e Conxto de Aplicação.

O que são exatamente cada um deles?
Pra que servem?
Possuem alguma função?
Qual a diferença dos 2?
Quando devo ou quando são bom usa-los?

Sei que são várias perguntas, mas me ajudem aí pessoal, preciso muito dessas informações.
Desed já agradeço.

O contexto representa uma aplicação que roda em um virtual host, normalmente ele tem o nome do:

localhost:8080\contexto, que em muitos casos vai ser o arquivo .war de sua aplicação web.

No tomcat prq pode, por exemplo configurar datasource especificos para um determinado contexto, dentro da tag context que fica no server.xml

Vc configura um datasource no JNDI, que é o interface de nomes e diretorios do java.

Para recuperar seu datasource na aplicação vc fazer um simple loopup pelo nome.