Ответ 1
Ну, это две разные вещи.
JDBC - это API базы данных Java, а JNDI - это интерфейс API именования java и каталога.
Главное, что в каталоге JNDI вы фактически храните JDBC DataSource, поэтому вы просто используете JDBC и получаете соединение через JNDI-поиск.
Вкратце: JDBC - это область базы данных, JNDI позволяет хранить объекты в виртуальном контексте (каталог), которые могут быть локальными, удаленными (детали реализации обычно не имеют значения).
Вы получаете доступ к этому контексту через имена, получая хранимые объекты, хорошо делиться вещами между различными модулями.
Серверы приложений обычно имеют контекст JNDI для обмена глобальными объектами в разных приложениях, пулы соединений - один из наиболее ярких примеров того, почему совместное использование через JNDI является хорошим. (Определите 1 пул соединений, разделите их между несколькими веб-папками)