В основном служба каталогов - это метод хранения больших объемов (часто разнородных) структурированных данных, их иерархической организации (в том числе сложных схем авторизации) и предоставления клиентам доступа к каждому элементу данных через уникальное имя.
Это в основном похоже на файловую систему, но оптимизировано для очень глубоких иерархий очень маленьких файлов, к которым одновременно обращаются многие клиенты по сети.
В контексте Java EE JNDI в основном используется просто как уровень косвенности, чтобы избежать жестко кодируемых зависимостей, таких как EJB и источники данных. Вместо этого их ищут по имени, что позволяет их настраивать во время выполнения. Это служит той же цели, что и контейнер внедрения зависимостей, и, на самом деле, внедрение зависимостей Java EE внутренне основано на JNDI, я считаю.
Но это действительно немного исторического артефакта, представленного в первых выпусках Java EE, и часть того, что дало тем плохую репутацию, потому что его было неудобно использовать. Более чистые и простые формы DI появились позже в Spring и с тех пор были приняты в Java EE.