Синглтон должен быть самим соединением пула JNDI; Класс базы данных с getConnection (), методами запросов и др. НЕ должен быть одноэлементным, но может быть статическим, если вы предпочитаете.
Таким образом, пул существует неограниченное время, доступный для всех пользователей, в то время как блоки запросов используют dataSource.getConnection () для рисования соединения из пула; выполните запрос, а затем закройте оператор, набор результатов и соединение (чтобы вернуть его в пул).
Кроме того, поиск JNDI довольно дорог, поэтому в этом случае имеет смысл использовать синглтон.