В каких случаях может потребоваться JNDI?
===========================================

 С определением кажется все ясно, но непонятно в каких случаях это может потребоваться.   

Как понять, что в ситуации нужно использовать JNDI? 

 Если кратко, то обычно, когда у вас есть какой-то сервер приложений, вы там создаете всякие ресурсы (data-source, jms, etc) средствами самого сервера, а не внутри своего приложения. А приложение уже получает ссылку на ресурс из JNDI по имени ресурса. 

 JNDI можно использовать для доступа к общим ресурсам, вроде соединений с БД, очередей сообщений, конфигурационных переменных. К примеру, можно в настройках сервера приложений создать соединение с БД, которое будет использоваться несколькими приложениями.  

Однако, сейчас JNDI становится менее популярным инструментом, так как современные приложения разворачиваются в большинстве случае не в серверах приложений. Для распределённой конфигурации сейчас есть такие инструменты, как Spring Cloud Config, Apache Zookeeper, Consul и прочие. 

 JNDI отличный функционал, который сможет самостоятельно разруливать взаимоотношения вашего приложения допустим с сервером СУБД и т.д.. Этим функционалом обладает даже WEB контейнер Apache Tomcat.